我比平时更加谨慎,因为我一直困惑的行为 npm
在过去。
我在 Mac 上,通过 brew install node
安装了 node.js。
现在,我想在命令行上以命令 jslint
的形式运行 jslint.js
,我发现完成这一任务的规范方法是 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
附加到导出的 $PATH
在我的 ~/.zshrc
的底部)
这似乎不是正确的做法,因为如果我以后安装了其他东西(使用 Homebrew 或其他东西) ,我将需要把它附加到我的 zsh 启动脚本来设置路径。我猜想在这个特殊的例子中,问题只是 npm install -g
没有在一个“适当”的位置(也许像 /usr/local/bin
一样)建立正确的符号链接。
我认为我要做的是在 /usr/local/bin
中手动建立符号链接,以便我能够处理我遇到的任何问题,这对我的目的来说应该足够好了。
编辑 : 我将在2019年更新这个版本,因为这个老问题很流行,但是现在已经过时了,不管是就我的个人工作流程而言,还是就如何最好地安装节点和管理它的各种依赖而言。
我的个人工作流程现在是使用从 nodejs.org 获得的安装程序在系统上安装节点。实际上,我比自制软件包本身更信任它,因为它最清楚如何管理文件。如果您想将系统节点从8.10更改为10.15,无论是在 Mac 还是 Windows 上,只需从 nodejs.org 下载10.15版本的安装程序。根据我的经验,尝试通过自制软件升级安装的节点总是被证明是一种更困难的方法。
另外,最需要指出的是,在上面的 jslint 示例的 npm 安装中显示的 sudo 的使用是非常不鼓励的; 我相当肯定,自制软件包不应该使用超级用户以任何方式安装或交互。它不应该是必要的,并将导致文件权限头痛!
此外,我推荐使用 ESLint 而不是 jslint,并且已经很多年没有使用 jslint 了。