2012-11-20 163 views
34

我意识到,当我做了一个node.js模块的全局安装(带-g标志)节点不能使用该模块,除非我编写了整个路径。node.js模块路径

我的意思是,这并不工作,如果模块已在全球安装:

cheerio = require('cheerio'), 

我必须写:

cheerio = require('/usr/lib/node_modules/cheerio'), 

我怎么能告诉节点,它已经在正确的路径中寻找模块?

谢谢。

+5

节点,测试以.json。所以在部署期间,您可以上传源代码并在服务器中为模块执行npm install或部署整个项目文件夹。 好处是不会有依赖关系来照顾不同的项目。我将集中lib的PHP Java而不是节点。 – wayne

回答

46

在一般情况下,我会建议让故宫给你的路径,并设置如上所述:

$ echo 'export NODE_PATH="'$(npm root -g)'"' >> ~/.bash_profile && . ~/.bash_profile 
+0

我猜如果你在'npmrc'配置文件中有'loglevel = info'(或者其他任何详细信息),这将不起作用,所以要注意那个。将'$(npm root -g)'更改为'$(npm root -g 2>/dev/null)'可能会更好,但这仍然不是通用的,因为只有某些shell遵循STDERR重定向的语法。 – BotNet

+0

'-bash:/Users/abc/.nvm/nvm.shexport:没有这样的文件或目录' –

+1

不要这个命令它会杀死你的NVM! –

15

您可以添加以下到〜/ .bash_profile:

export NODE_PATH=/usr/lib/node_modules:$NODE_PATH 
+3

请参阅http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders –

6

适用人群与ZSH安装:

echo 'export NODE_PATH="'$(npm root -g)'"' >> ~/.zshrc && . ~/.zshrc

14

对于那些在Windows PLA TForm的系统变量添加到您的PATH:

C:\Users\<username>\AppData\Roaming\npm 

PS:我们大多数人(或某些)项目文件夹中安装模块通过将模块作为软件包的依赖在Windows 8.1

+2

您必须在Users \和\ AppData之间包含“UserName”。这个配置应该包含在你的usser系统变量中。然后你需要关闭会话并重新启动以查看控制台中的更改 – edrian

+0

在我的情况下,运行Windows 8.1时,它是'npm-cache'而不是'npm'。 –

+1

@edrian在原始答案中实际上有一个占位符,但是由于没有将其标记为代码,“标记”被删除。现在已修复 –