如何在Node中导入全局模块? 我得到“错误:无法find模块<模块>”?

我正在尝试在Mac OSX Lion上设置节点。 这一切似乎工作正常,但我似乎无法从我的全局模块文件夹中导入任何模块。 我得到的错误,

Error: Cannot find module <module> 

如果我运行这个: node -e require.paths ,我得到的响应是:

 [ '/usr/local/lib/node_modules', '/Users/Me/.node_modules', '/Users/Me/.node_libraries', '/usr/local/Cellar/node/0.4.12/lib/node' ] 

这是正确的,我的模块确实安装在/ usr / local / lib / node_modules中。 当我尝试和运行一个脚本,但是,我得到这个:

 Error: Cannot find module 'socket.io' at Function._resolveFilename (module.js:326:11) at Function._load (module.js:271:25) at require (module.js:355:19) at Object.<anonymous> (/Users/Me/node/server.js:2:10) at Module._compile (module.js:411:26) at Object..js (module.js:417:10) at Module.load (module.js:343:31) at Function._load (module.js:302:12) at Array.<anonymous> (module.js:430:10) at EventEmitter._tickCallback (node.js:126:26) 

我的.bash_profile如下所示:

 export PATH=/usr/local/mysql/bin:$PATH export NODE_PATH=/usr/local/lib/node_modules export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/" 

真的很感谢一些帮助,我不知道为什么我不能导入任何库。

如果您使用的是npm> = 1.0,则可以使用npm link <global-package>创build一个到全局安装的包的本地链接。 ( 警告:操作系统必须支持符号链接。

但是,这并不是没有问题。

npm链接是一个开发工具。 在本地开发框中pipe理软件包真棒 。 但是使用npm链接进行部署基本上是要求问题,因为它使得更新内容变得非常容易,而不需要实现它。

作为替代,您可以在本地以及全局安装软件包。

有关更多信息,请参阅

您可以使用npm链接在您的项目文件夹中创build一个符号链接到您的全局包。

例:

 $ npm install -g express $ cd [local path]/project $ npm link express 

它所做的就是创build一个本地的node_modules文件夹,然后创build一个符号链接express – > [global directory] ​​/ node_modules / express,然后可以通过require('express')来parsing

Node.js使用环境variablesNODE_PATH来允许指定包含在模块searchpath中的附加目录。 你可以使用npm自己告诉你全局模块在哪里存储在npm root -g命令中。 因此,把这两者放在一起,你可以确保全局模块包含在你的searchpath中,使用以下命令(在Linux-ish上)

export NODE_PATH=$(npm root --quiet -g)

全球安装任何软件包如下:

 $ npm install -g replace // replace is one of the node module. 

由于这个replace模块是全局安装的,所以如果你看到你的节点模块文件夹,你将不会在那里看到replace模块,所以你不能使用require('replace')来使用这个包。

因为在需要的情况下,只能使用存在于节点模块文件夹中的本地模块。

现在要使用全局模块,您应该使用下面的命令将其链接到节点模块path。

 $ npm link replace 

现在回头看看您的节点模块文件夹,您现在可以在那里看到replace模块,并可以在应用程序中使用require('replace'),因为它与本地节点模块链接。

请让我知道是否需要进一步澄清。

您可以使用require作为参数的全局模块目录的path。

 require('/path/to/global/node_modules/the_module'); 

在我的Mac上,我使用这个:

 require('/usr/local/lib/node_modules/the_module'); 

如何find你的全球模块? – > npm在哪里安装软件包?

多德。

require.paths已被弃用

去你的项目文件夹并input

 npm install socket.io 

应该将其安装在节点将查找它的本地./node_modules文件夹中。

我保持这样的东西:

 cd ~/Sites/ mkdir sweetnodeproject cd sweetnodeproject npm install socket.io 

创build一个app.js文件

 // app.js var socket = require('socket.io') 

现在跑我的应用程序

 node app.js 

确保你使用npm> = 1.0,节点> = 4.0

祝你好运!

我正在使用Docker。 我正在尝试创build一个Docker镜像,该镜像已经安装了所有的节点依赖关系,但是可以在容器运行时使用我的本地应用程序目录(而不用node_modules目录或链接对其进行污染)。 这在这种情况下导致问题。 我的解决方法是要求模块的确切path,例如require('/ usr / local / lib / node_modules / socket.io')