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
bin
path安装到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时)。
所以:
-
npm config set prefix /usr/local
如果是别的,和 - 不要用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 update
, brew doctor
, brew 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每增加一个项目,除非你想重新命名并重新启动你的服务器,当你完成更新的东西。