今天,我感到奇怪的是,在全局安装async后,nodejs报告无法找到该模块。以下是工作流程
安装异步
npm install -g async
确保异步存在
npm list -g async
得到这个输出:
/usr/local/lib ├── async@0.2.9 └─┬ npm@1.3.21 └─┬ request@2.30.0 └─┬ form-data@0.1.2 └── async@0.2.9
3.使用它。
I create a simple js file which only contains one statement: var async=require('async'); then execute the file via node, I get exception:
Error: Cannot find module 'async' 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. (/lxzhu/nodejs/asynctest/test.js:1:73) 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) at Function.Module.runMain (module.js:497:10)
答案 0 :(得分:23)
这是因为您要在全局安装异步。
npm install async
将创建一个名为node_modules
的目录,require
查找算法会在那里找到它。
答案 1 :(得分:6)
NPM的全局安装并不总是意味着可以为多个项目共享该模块。这是一个非常流行的误解。您可以阅读this blog post on nodejs.org以获取更多信息,但一般来说,全局模块用于命令行工具和其他系统实用程序,而不是用于代码中使用的模块。
因此,理想情况下,您需要在本地为每个项目使用模块。
答案 2 :(得分:4)
全局安装异步。为此,我们必须创建和安装async模块。
npm install async --save
此命令行在node_modules文件夹中添加文件。
答案 3 :(得分:1)
在多个项目中使用全局安装的模块的正确方法是使用npm link
命令
npm link
将在您的应用node_modules
目录中创建全局安装包的符号链接
编辑:因为npm @ 5做本地安装npm install foo
将从类似于纱线策略的系统缓存链接。因此,即使全局安装了相同的模块,也可以使用npm install
进行本地化
答案 4 :(得分:0)
最后,我从http://nodejs.org/api/modules.html获得答案。
全局安装后,我需要将其子目录放到NODE_PATH中,使其出现在节点的搜索路径中。
另外,正如文档所述,建议在本地存储模块,NODE_PATH用于版本兼容,我们不应再使用它了。
答案 5 :(得分:0)
如果找不到类似的模块
找不到模块“ sql”,找不到模块“ nodemailer”
然后使用npm install和找不到的模块名称。
npm安装异步
答案 6 :(得分:0)
这对我有用:
npm uninstall async npm install -g async npm link async