Node.js错误:找不到模块表达


145

我写了我的第一个node.js应用程序,但是找不到快速库:

C:\ChatServer\Server>node server.js

module.js:340
    throw err;
          ^
Error: Cannot find module 'express'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (C:\ChatServer\Server\server.js:6:9)
    at Object.<anonymous> (C:\ChatServer\Server\server.js:25:4)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

但是Express已安装(带有-g密钥):

C:\ChatServer\Server>npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/connect/2.7.11
npm http GET https://registry.npmjs.org/commander/0.6.1
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.4
npm http GET https://registry.npmjs.org/cookie/0.1.0
npm http GET https://registry.npmjs.org/buffer-crc32/0.2.1
npm http GET https://registry.npmjs.org/fresh/0.1.0
npm http GET https://registry.npmjs.org/methods/0.0.1
npm http GET https://registry.npmjs.org/send/0.1.0
npm http GET https://registry.npmjs.org/cookie-signature/1.0.1
npm http GET https://registry.npmjs.org/debug
npm http 304 https://registry.npmjs.org/mkdirp/0.3.4
npm http 304 https://registry.npmjs.org/range-parser/0.0.4
npm http 304 https://registry.npmjs.org/cookie/0.1.0
npm http 304 https://registry.npmjs.org/connect/2.7.11
npm http 304 https://registry.npmjs.org/commander/0.6.1
npm WARN package.json range-parser@0.0.4 No repository field.
npm http 304 https://registry.npmjs.org/buffer-crc32/0.2.1
npm http 304 https://registry.npmjs.org/fresh/0.1.0
npm http 304 https://registry.npmjs.org/methods/0.0.1
npm http 304 https://registry.npmjs.org/send/0.1.0
npm http 304 https://registry.npmjs.org/cookie-signature/1.0.1
npm WARN package.json methods@0.0.1 No repository field.
npm WARN package.json methods@0.0.1 No readme data.
npm WARN package.json fresh@0.1.0 No repository field.
npm WARN package.json send@0.1.0 No repository field.
npm WARN package.json cookie-signature@1.0.1 No repository field.
npm http 304 https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/qs/0.6.5
npm http GET https://registry.npmjs.org/send/0.1.1
npm http GET https://registry.npmjs.org/formidable/1.0.14
npm http GET https://registry.npmjs.org/cookie/0.0.5
npm http GET https://registry.npmjs.org/bytes/0.2.0
npm http GET https://registry.npmjs.org/pause/0.0.1
npm http 304 https://registry.npmjs.org/mime/1.2.6
npm http 304 https://registry.npmjs.org/bytes/0.2.0
npm WARN package.json bytes@0.2.0 No repository field.
npm http 304 https://registry.npmjs.org/pause/0.0.1
npm WARN package.json pause@0.0.1 No repository field.
npm http 304 https://registry.npmjs.org/formidable/1.0.14
npm http 304 https://registry.npmjs.org/qs/0.6.5
npm http 304 https://registry.npmjs.org/send/0.1.1
npm http 304 https://registry.npmjs.org/cookie/0.0.5
npm http GET https://registry.npmjs.org/mime
npm http 304 https://registry.npmjs.org/mime
C:\Users\Dmitry\AppData\Roaming\npm\express -> C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express\bin\express
npm WARN package.json policyfile@0.0.4 'repositories' (plural) Not supported.
npm WARN package.json Please pick one as the 'repository' field
npm WARN package.json assert-plus@0.1.2 No repository field.
npm WARN package.json ctype@0.5.2 No repository field.
express@3.2.6 C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express
├── methods@0.0.1
├── fresh@0.1.0
├── range-parser@0.0.4
├── cookie-signature@1.0.1
├── buffer-crc32@0.2.1
├── cookie@0.1.0
├── debug@0.7.2
├── commander@0.6.1
├── mkdirp@0.3.4
├── send@0.1.0 (mime@1.2.6)
└── connect@2.7.11 (pause@0.0.1, qs@0.6.5, bytes@0.2.0, cookie@0.0.5, formidable@1.0.14, send@0.1.1)

一些信息:

C:\ChatServer\Server>npm --version
1.2.24

C:\ChatServer\Server>node --version
v0.10.9

C:\ChatServer\Server>npm --version
1.2.24

C:\ChatServer\Server>npm ls -g installed express
npm WARN package.json cookie-signature@1.0.1 No repository field.
npm WARN package.json fresh@0.1.0 No repository field.
npm WARN package.json methods@0.0.1 No repository field.
npm WARN package.json range-parser@0.0.4 No repository field.
npm WARN package.json send@0.1.0 No repository field.
npm WARN package.json policyfile@0.0.4 'repositories' (plural) Not supported.
npm WARN package.json Please pick one as the 'repository' field
npm WARN package.json bytes@0.2.0 No repository field.
npm WARN package.json pause@0.0.1 No repository field.
npm WARN package.json assert-plus@0.1.2 No repository field.
npm WARN package.json ctype@0.5.2 No repository field.
C:\Users\Dmitry\AppData\Roaming\npm
└── express@3.2.6


C:\ChatServer\Server>npm ls installed express
C:\ChatServer\Server
└── (empty)

我怎么解决这个问题?(必须安装时不带-g吗?)




Answers:


275

您需要在本地将Express安装到应用程序(node_modules文件夹)的上下文中:

$ npm install express

原因是应用程序总是在其本地上下文中查找任何依赖项。全局安装仅用于设置系统范围内的可用二进制文件,例如单元测试运行程序或引导程序或类似的东西。

使用Express,在全局安装它时,您会获得一个express可以为您引导应用程序的二进制文件。有关更多信息,请键入

$ express --help

因此,要回答您的最后一个问题:,您需要不安装-g


1
这也对我有帮助。我已经winston在全球范围内进行安装,以普通用户身份启动我的应用程序时由于某种原因可以工作,但是在启动我的应用程序和系统初始化脚本时却无法正常工作。我通过在应用程序目录中本地安装winston并将其添加到package.json中来修复它。
trusktr 2014年

3
您可以通过cd将全局安装的依赖
项链

11
创建应用后,请安装npm。它将安装所有依赖项。

谢谢,这真的有所帮助。转到node_modules文件夹并比安装express解决了我的问题
Megha,

@Golo Roden我尝试使用您的解决方案来编码您的答案,但是它抛出错误:'npm ERR!tar.unpack解压缩错误C:\ Users \ VV \ AppData \ Roaming \ npm-cache \ express \ 4.14.0 \ package.tgz npm ERR!Windows_NT 6.3.9600 npm错误!argv“ C:\\ Program Files \\ nodejs \\\\ node.exe”“ C:\\ Program Files \\ nodejs \\ node_modules \\ npm \\ bin \\ npm-cli.js”“安装”“快递”
VjyV

20

对我来说,使用--save选项在本地安装express时,它可以正常工作,如下所示:

$ npm install express --save

12

检查您是否不是安装express模块,请使用以下命令:

 npm install express

如果node_modules目录位于另一个位置,请设置NODE_PATH环境变量:

 set NODE_PATH=your\directory\to\node_modules;%NODE_PATH%

在Windows 10中,npm install express之后,它无法自动添加到节点路径,您需要手动将节点模块添加到其中。
简(Jane)

5

Golo很好地解释了该解决方案,但我可能需要澄清一下:
有时在其中安装了节点模块

/usr/local/lib/node_modules

当您启动节点时,会在其中搜索blabla.js模块

/lib

因此,一种解决方案是创建一个符号链接:

sudo ln -s /usr/local/lib/node_modules/ /lib/node_modules

1
更简单的方法-> npm link <module>
Amit G

4

在您的情况下,您的express模块安装在C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express,但是您需要将该模块放入项目目录。所以,你应该将文件复制express从模块文件夹C:\Users\Dmitry\AppData\Roaming\npm\node_modules\到你的项目目录为:C:\ChatServer\Server\node_modules。如果您的项目文件夹中没有名为“ node_modules”的文件夹,请先创建它,然后将这些文件粘贴到该文件夹​​中。这种方法在我的Windows PC上对我有用。重新启动节点服务器,然后再次运行命令node C:\ChatServer\Server>node server.js。现在应该可以工作了!!!!


也在Windows 10上工作!
维克多·迈克尔·科斯盖


3

如果您已在系统上安装了节点,请使用以下Windows操作系统在本地为项目安装Express:

npm install express

要么

npm install express --save

您可以通过以下方式授予其全局访问权限:

npm install -g express --save

2

我在vscode中遇到了这个错误,尽管模块是在哪里安装的。我正在使用打字稿和表达。在server.ts文件中,所有导入都带有红色波浪状下划线。原来我的tsconfig.json文件有问题。

{
    "compileOnSave": false,
    "compilerOptions": {
        "module": "commonjs", // Previously this value was `es6`
        "target": "es6",
        "allowSyntheticDefaultImports": true,
        "baseUrl": "public",
        "sourceMap": true,
        "outDir": "dist",
        "jsx": "react",
        "strict": true,
        "preserveConstEnums": true,
        "removeComments": true,
        "noImplicitAny": true,
        "allowJs": true
    },
    "exclude": [
        "node_modules",
        "build"
    ]
}

1

在您的硬盘中创建一个文件夹,例如sample1并转到命令提示符键入:cd并给出sample1文件夹的路径,然后安装所有模块...

npm安装快递

npm安装玉

npm安装socket.io

然后将要创建的应用程序保存在sample1文件夹中

试试吧...


1

转到应用程序目录,并使用以下命令 npm install express --save安装express 模块,然后使用以下命令npm ls列出所有安装模块, 您将看到所有本地安装模块。


1

在全球范围内安装Express不适用于您的本地项目,因此您需要在本地安装它才能使用。

npm install express

希望这会起作用

谢谢


0

我遇到了同样的问题。我已经在/ usr / local / bin /全局安装了express。当我执行“ npm install”时,在本地目录的node_modules中未创建express。

  1. 检查$ HOME中是否有文件名.npmrc
  2. 如果它具有“ global = true”,则更改为“ global = false”
  3. 现在在应用程序目录中执行“ npm install”。您更有可能将所有与程序包相关的模块安装在应用程序目录的node_modules(本地)中。

0
  • sudo brew卸载节点
  • 酿造更新
  • 酿造升级
  • 冲泡清理
  • brew安装节点
  • 须藤chown -R $(whoami)/ usr / local
  • 酿造链接-覆盖节点
  • sudo brew postinstall节点

这在MacOS X Sierra上为我工作


0

我并不为此感到自豪,但就我而言,我有:

 require('express.handlebars')

 //and the correct form is:
 require('express-handlebars'); //Use dash instead.

0

按照本书上的示例,我遇到了相同的错误:“ Kubernetes Up&Running”。
我看到许多建议“手动” 安装快递的答案,但我不认为这是最佳解决方案。
因为我们正在使用package.json(我可以在日志中看到它)并且正在构建应用程序的正确方法正在运行npm install,所以我在package.json文件中添加了express依赖项。

 "dependencies": {
    "express": "^4.17.1"
}

我得到的是当前版本npm search express

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.