153

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

我在 Mac 上并通过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)

随后

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

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

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

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

我认为我要做的就是/usr/local/bin为我遇到问题的任何程序手动构建符号链接,它应该足以满足我的目的。

编辑:我将在 2019 年更新这个问题,因为这个老问题很受欢迎,但现在就我的个人工作流程以及如何最好地安装节点和管理其各种依赖项而言已经过时了。

我个人的工作流程现在是使用从 nodejs.org 获得的安装程序在系统上安装 node。我实际上比自制软件包本身更信任它,因为它最了解如何管理文件。如果您想将系统节点从 8.10 更改为 10.15,无论是在 Mac 还是 Windows 上,只需从 nodejs.org 下载适用于您操作系统的 10.15 的安装程序。根据我的经验,尝试升级通过自制软件安装的节点总是被证明是一种更困难的方法。

另外,要指出的最重要的一点是,非常不鼓励使用上面我的 npm install of jslint 示例中所示的 sudo ;我相当肯定自制软件包永远不应该使用超级用户以任何方式安装或交互。这不应该是必要的,并且会导致文件权限问题!

此外,我推荐 ESLint 而不是 jslint,并且多年来没有使用过 jslint。

4

11 回答 11

323

扩展您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. 不要sudo与 npm 一起使用!根据jslint docs,您应该能够npm install做到。

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

于 2013-02-12T19:32:14.373 回答
8

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

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

npm update -gf

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

brew install node --without-npm
curl -L https://npmjs.org/install.sh | sh
于 2014-04-10T03:33:02.233 回答
5

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

然后我只是将路径添加到位于 /Users/[user] 的 .bash_profile

PATH=$PATH:~/.node/bin
于 2015-09-16T19:56:32.427 回答
3

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

通常,brew 或 port 允许您更新路径,因此它不会冒弄乱您的 .zshrc、.bashrc、.cshrc 或您使用的任何外壳的风险。

于 2013-02-11T00:19:40.960 回答
3

我通过执行以下操作设法修复了 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

希望这可以帮助!

于 2019-04-11T15:41:39.860 回答
0

尝试运行:

PATH=$PATH:~/npm/bin

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

于 2016-10-28T01:14:11.033 回答
0

如果您使用 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 的列表,您可以轻松查看链接的节点模块。

于 2017-02-22T04:10:35.080 回答
0

sudo brew 不再是一个选项,所以如果你此时使用 brew 安装,你会得到 2 个非常讨厌的东西: A:它喜欢安装到/usr/local/opts/usr/local/shared 中或根据这个安装。起初这没什么大不了的,但我遇到了节点 PATH 的问题,尤其是在我安装 lint 时。B:在您以这种方式卸载并安装它或者您可以从Bitnami获取堆栈之前,您有点卡在 sudo 命令中

我推荐这种方法而不是堆栈选项,因为如果您有多个项目,它就可以使用了。如果你使用预制的 MEAN 堆栈,你必须在 httpd.conf 中设置虚拟主机(这个堆栈比 XAMPP 更痛苦)加上通常更新你的 extra/vhosts.conf 和 /etc/hosts 为每个额外的项目,除非您想在完成更新后重新指向并重新启动服务器。

于 2017-03-01T16:53:43.837 回答
0

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

于 2017-04-15T16:05:47.837 回答
0

我从 M1 Apple Silicon 上的自制软件中卸载了节点,而是使用了来自https://nodejs.org/en/download/的 Mac 安装程序。之后,我可以使用 npm 和 npx 进行安装。

于 2021-03-01T05:00:59.010 回答
-2

简单的解决方案是...

只需输入以下命令:

  1. sudo npm config get prefix

    如果不是这些/usr/local,则需要使用以下命令对其进行修复。

  2. sudo npm config set prefix /usr/local...

现在它 100% 工作正常

于 2019-05-06T10:52:34.940 回答