npm全局path前缀

我比以前更加谨慎,因为过去npm的行为让我感到困惑。

我在Mac上并通过brew install node安装了node.js。

现在我想在命令行上运行jslint.js作为命令jslint我发现完成此操作的规范方法是使用此输出成功运行的sudo npm install -g jslint

 $ sudo npm install -g jslint npm http GET https://registry.npmjs.org/jslint npm http 200 https://registry.npmjs.org/jslint npm http GET https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz npm http 200 https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz npm http GET https://registry.npmjs.org/nopt npm http 200 https://registry.npmjs.org/nopt npm http GET https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz npm http 200 https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz npm http GET https://registry.npmjs.org/abbrev npm http 200 https://registry.npmjs.org/abbrev npm http GET https://registry.npmjs.org/abbrev/-/abbrev-l.0.4.tgz npm http 200 https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz /usr/local/share/npm/bin/jslint -> /usr/local/share/npm/lib/node_modules/jslint/ bin/jslint.js jslint@0.1.9 /usr/local/share/npm/lib/node_modules/jslint └── nopt@1.0.10 (abbrev@1.0.4) 

后来

 $ jslint ply.js zsh: command not found: jslint 

由于/usr/local/share/npm/bin不在我的$PATH

1)为什么brew不能把全局的npm binpath安装到path上? 也许它做到了,但zsh做的事情是搞砸了。 我可以在哪里find?
2)我应该这样做吗? (追加:/usr/local/share/npm/bin到我的~/.zshrc底部导出的$PATH

这似乎是不正确的做法,因为如果我以后安装别的东西(使用自制软件或其他东西),我将需要将其附加到我的zsh启动脚本来设置path。 我猜在这个特定的实例中,这只是npm install -g一个问题,而不是在正确的位置(比如/usr/local/bin )创build正确的符号链接。

我想我会做的是手动build立在/usr/local/bin里面的符号链接,这对我有任何问题的程序来说是非常好的。

扩展你的PATH

 export PATH=/usr/local/share/npm/bin:$PATH 

不是一个可怕的想法。 话虽如此,你不应该这样做。

运行这个:

 npm config get prefix 

OS X上的默认值是/usr/local ,这意味着npm会将二进制文件符号链接到/usr/local/bin ,这应该已经存在于PATH (特别是在使用Homebrew时)。

所以:

  1. npm config set prefix /usr/local如果是别的,和
  2. 不要用npm使用sudo ! 根据jslint文档 ,你应该能够npm install

如果你把npm安装成sudo( sudo brew install ),尝试用普通的“ brew install ”重新brew install 。 Homebrew应该帮助你保持sudo免费。

在这个问题上花了一段时间,PATH切换没有帮助。 我的问题是在这里find的Homebrew / node / npm bug – https://github.com/npm/npm/issues/3794

如果您已经使用Homebrew安装了节点,请尝试按注释注释,这可能不安全。 它为我工作,但可能会有意想不到的后果。 也看来,最新版本的Homebrew正确安装npm。 所以可能我会尝试brew updatebrew doctorbrew upgrade node等尝试****之前:

 npm update -gf 

或者,如果你想用Homebrew安装节点并且有npm工作,使用:

 brew install node --without-npm curl -L https://npmjs.org/install.sh | sh 

brew即使在使用-g运行npm时也不需要使用sudo。 这实际上可能会创造更多的问题。

通常情况下,brew或port可以让你更新你的path,所以不用担心你的.zshrc,.bashrc,.cshrc或者你使用的任何shell的风格。

我使用brew,前缀已经设置为:

 $ npm config get prefix /Users/[user]/.node 

我注意到,bin和lib文件夹是由root拥有的,这阻止了通常的非sudo安装,所以我将它们重新拥有给用户

 $ cd /Users/[user]/.node $ chown -R [user]:[group] lib $ chown -R [user]:[group] bin 

然后,我只是将path添加到我的.bash_profile位于/用户/ [用户]

 PATH=$PATH:~/.node/bin 

任何人得到了相同的问题,它与brew和npm之间的冲突有关请检查此解决schemehttps://gist.github.com/DanHerbert/9520689

尝试运行:

 PATH=$PATH:~/npm/bin 

然后通过在命令行运行express来做一个testing。 这对我有效。

如果使用sudo命令链接了节点程序包

然后转到全局安装node_modules的文件夹。

在Unix系统中,全局安装时,它们通常位于/ usr / local / lib / node或/ usr / local / lib / node_modules中。 如果将NODE_PATH环境variables设置为此path,则可以按节点查找模块。

Windows XP – %USERPROFILE%\ Application Data \ npm \ node_modules Windows 7 – %AppData%\ npm \ node_modules

然后运行该命令

 ls -l 

这将提供所有全局node_modules的列表,您可以轻松查看链接的节点模块。

sudo brew不再是一个选项,所以如果你现在用brew来安装,你会得到2个令人讨厌的东西:A:它喜欢安装到/usr/local/opts或者根据这个,/ usr / local /共享。 起初这不是什么大问题,但是我已经遇到了node PATH问题,特别是当我安装lint的时候。 B:你用sudo命令卡住了,直到你用这种方式卸载并安装它,或者你可以从Bitnami

我推荐这个方法通过堆栈选项,因为如果你有多个项目,就准备好了。 如果你使用预制的MEAN栈,你将不得不在httpd.conf中设置虚拟主机(这个堆栈比XAMPP更痛苦),通常更新你的extra / vhosts.conf和/ etc / hosts每增加一个项目,除非你想重新命名并重新启动你的服务器,当你完成更新的东西。