首页 文章

npm全局路径前缀

提问于
浏览
112

我比平常更谨慎,因为我过去对 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 路径?也许它确实如此,但是 zsh 确实搞砸了它 . 我可以在哪里找到它?
2)我应该这样做吗? (将 :/usr/local/share/npm/bin 附加到 ~/.zshrc 底部的导出 $PATH

看起来这不是需要将它附加到我的zsh启动脚本来设置路径 . 我想在这个特定的例子中,只是 npm install -g 没有在"proper"位置创建正确的符号链接(例如 /usr/local/bin ) .

我想我要做的是在 /usr/local/bin 中为我遇到问题的任何程序手动构建符号链接,它应该足够我的目的 .

8 回答

  • 1

    如果已使用sudo命令链接节点包

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

    在Unix系统上,当全局安装时,它们通常放在/ usr / local / lib / node或/ usr / local / lib / node_modules中 . 如果将NODE_PATH环境变量设置为此路径,则可以按节点找到模块 .

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

    然后运行该命令

    ls -l
    

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

  • 3

    sudo brew不再是一个选项,所以如果你在这个时候用brew安装,你会得到2个非常令人讨厌的东西:A:它喜欢安装到 /usr/local/opts 或根据这个/ usr / local / shared . 这不是节点PATH的问题,尤其是当我安装lint时 . B:你有点被sudo命令困住,直到你以这种方式卸载和安装它,或者你可以从Bitnami获得堆栈

    我建议在堆栈选项上使用此方法,因为如果您有多个项目,它已准备就绪 . 如果你使用premade MEAN堆栈,你将不得不在httpd.conf中设置虚拟主机(这个堆栈比XAMPP更痛苦)通常更新你的额外/ vhosts.conf和/ etc / hosts项目,除非您想要在完成更新后重新启动服务器并重新启动服务器 .

  • 7

    试试跑步:

    PATH=$PATH:~/npm/bin
    

    然后在命令行中运行 express 进行测试 . 这对我有用 .

  • 5

    即使在使用-g运行npm时,brew也不应该要求你使用sudo . 这实际上可能会在未来产生更多问题 .

    通常情况下,brew或port允许您更新路径,因此不会破坏您的.zshrc,.bashrc,.cshrc或您使用的任何shell风格 .

  • 0

    在这个问题上花了一段时间,PATH开关没有帮助 . 我的问题是这里发现的Homebrew / node / npm错误 - 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
    
  • 0

    扩展你的 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 docs,你应该能够 npm install 它 .

    如果你安装了npm作为sudo( sudo brew install ),请尝试使用普通的' brew install 重新安装它 . Homebrew应该帮助你保持自由 .

  • 0

    我使用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
    

    然后我刚刚添加到.bash_profile的路径,该路径位于/ Users / [user]

    PATH=$PATH:~/.node/bin
    
  • 251

    任何人都有同样的问题,这与brew和npm之间的冲突有关请检查此解决方案https://gist.github.com/DanHerbert/9520689

相关问题