npm全局路径前缀

Ste*_* Lu 133 macos zsh node.js npm

我比平时更加​​谨慎,因为我npm对过去的行为感到困惑.

我在Mac上,并通过安装的node.js brew install node.

现在我想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)
Run Code Online (Sandbox Code Playgroud)

后来

$ jslint ply.js
zsh: command not found: jslint
Run Code Online (Sandbox Code Playgroud)

由于/usr/local/share/npm/bin没有在我的$PATH.

1)为什么没有brew安装npm bin路径的全局路径?也许它确实如此,但有些东西zsh确实弄乱了它.我可以在哪里找到它?
2)我应该这样做吗?(附加:/usr/local/share/npm/bin$PATH我底部的导出~/.zshrc)

看起来这不是正确的方法,因为如果我稍后安装其他东西(使用Homebrew或其他东西),我将需要将它附加到我的zsh启动脚本来设置路径.我想在这个特定的例子中,这只是一个问题,即npm install -g没有在正确的位置(如果/usr/local/bin可能)制作正确的符号链接.

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

Tre*_*ham 292

扩展你PATH的:

export PATH=/usr/local/share/npm/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

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

运行这个:

npm config get prefix
Run Code Online (Sandbox Code Playgroud)

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

所以:

  1. npm config set prefix /usr/local 如果它是别的东西,并且
  2. 不要sudo与npm一起使用!根据jslint文档,你应该能够做到npm install这一点.

如果您将npm安装为sudo(sudo brew install),请尝试使用plain ol'重新安装它brew install.Homebrew应该帮助你保持sudo自由.

  • 如果我要让任何脚本在不需要"sudo"的情况下将链接写入其中,我是不是需要`chown``/ usr/local`?怎么跟随[this](http://tnovelli.net/blog/blog.2011-08-27.node-npm-user-install.html)在`〜/ .local`中设置nom/node ? (2认同)
  • 甜!我去了用我的`〜/`dir中的用户`root`存放的各种dirs(在`tmp /`上的`sudo rm -r`和`.npm /`)以及随后的`npm install -g jslint `工作得很漂亮.npm本身就是一个节点程序,这对我来说是一个JS命令行概念验证,我现在开始欣赏它了,我现在理解它好一点了. (2认同)
  • @StevenLu是的,`chown`-ing`/usr/local`,其中的所有内容都是OS X的标准做法.请参阅[故障排除](https://github.com/mxcl/homebrew/wiki/Troubleshooting)页面自制的维基. (2认同)

YPC*_*ble 8

在这个问题上花了一段时间,PATH开关没有帮助.我的问题是这里发现的Homebrew/node/npm错误 - https://github.com/npm/npm/issues/3794

如果您已经使用Homebrew安装了节点,请尝试****注意每条评论,这可能不安全.它对我有用但可能会产生意想不到的后果.似乎最新版本的Homebrew正确安装了npm.所以,很可能我会尝试brew update,brew doctor,brew upgrade node等试图****之前:

npm update -gf
Run Code Online (Sandbox Code Playgroud)

或者,如果要使用Homebrew安装节点并使npm工作,请使用:

brew install node --without-npm
curl -L https://npmjs.org/install.sh | sh
Run Code Online (Sandbox Code Playgroud)

  • 随便建议全球人民强制更新并不是一个好主意. (3认同)
  • 盲目地听从网上某人的建议并不是一个好主意。 (2认同)

Gre*_*reg 5

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

$ npm config get prefix
/Users/[user]/.node
Run Code Online (Sandbox Code Playgroud)

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

$ cd /Users/[user]/.node
$ chown -R [user]:[group] lib
$ chown -R [user]:[group] bin
Run Code Online (Sandbox Code Playgroud)

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

PATH=$PATH:~/.node/bin
Run Code Online (Sandbox Code Playgroud)


Mar*_*sel 5

我通过执行以下操作成功修复了 Vue Cli no command 错误:

  • 在终端中sudo nano ~/.bash_profile编辑您的 bash 配置文件。
  • 添加export PATH=$PATH:/Users/[your username]/.npm-packages/bin
  • 保存文件并重新启动终端
  • 现在你应该能够使用vue create my-project等等vue --version

我在从https://cli.vuejs.org/安装最新的 Vue Cli 后执行了此操作

我通常使用yarn,但我使用npm全局安装了它npm install -g @vue/cli。如果您愿意,也可以使用纱线yarn global add @vue/cli

注意:如果您已经安装了它,您可能需要先全局卸载它:npm uninstall -g vue-cli

希望这可以帮助!

  • 这基本上对我有用。我必须将其调整为导出 PATH=$PATH:/Users/[your username]/node_modules/.bin (2认同)