因为过去我曾被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)
Subsequently.$ jslint ply.js
zsh: command not found: jslint
由于/usr/local/share/npm/bin
不在我的$PATH
中,所以出现问题。
1)为什么brew
没有将全局npm
bin
路径安装到路径中?也许它已经这样做了,但是zsh
的某些设置搞砸了。我该去哪里找到它呢?
2)我应该这么做吗?(在~/.zshrc
底部附加:/usr/local/share/npm/bin
导出到$PATH
中)
看起来这不是正确的方法,因为如果我以后安装其他东西(使用Homebrew或其他东西),我就需要将其附加到我的zsh启动脚本中以设置路径。我猜在这种特殊情况下,问题仅在于npm install -g
未在“适当”的位置(如/usr/local/bin
)创建正确的符号链接。
我认为我将手动在任何我遇到问题的程序中构建出符号链接,并且这对我的目的已经足够好了。
编辑:我在2019年更新了这篇文章,因为这个老问题虽然很受欢迎,但已经过时了,无论是从我的个人工作流程还是从如何最好地安装node和管理其各种依赖关系方面。
我的个人工作流程现在是使用从nodejs.org获取的安装程序在系统上安装节点。实际上,我比起homebrew包本身更信任它,因为它最懂得如何管理这些文件。如果你想将你的系统节点从8.10升级到10.15(无论是在Mac还是Windows上),只需为您的操作系统下载来自nodejs.org的10.15安装程序即可。在我的经验中,试图升级通过Homebrew安装的节点一直是一种更困难的方法。
另外,最需要指出的一点是,像我上面所示的npm安装jslint的sudo用法是不被推荐的;我相当确定homebrew软件包不应该使用superuser进行安装或与之交互。这不是必要的,并且会导致文件权限头痛!
此外,我建议使用ESLint而不是jslint,并且多年来没有使用jslint。