本文最后更新于:2019年11月18日 下午

起因

最近开始尝试使用hexo写一些博客全没有接触过Node.js,部署使用的netlify,但netlify的命令行工具也用node.js做的,安装的过程中出现了npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules的报错,根据程序猿的直觉,推测可能是权限出了问题,一概使用sudo解决,后来看到Node.js官方不推荐使用sudo这种方式,便有了这篇文章,把折腾的过程记录了下来。

配置过程

  1. 备份相关重要文件。
  2. 命令行中,创建一个目录,用于一些全局包的安装:
mkdir ~/.npm-global
  1. 设置npm使用新的目录:
npm config set prefix '~/.npm-glabal'
  1. 设置环境变量:
export PATH="~/.npm-global/bin:$PATH"

tips: 第四步的命令可以直接在命令行中使用,也可以写到命令行的配置文件中,mac推荐写到~/.bash_profile中,ubnuntu之类的推荐写到~/.bashrc中。之后通过source ~/.bash_profilesource ~/.bashrc生效即可。

  1. 测试新的设置是否生效:
npm install -g jshint

tips:测试完后,删除测试安装的包可以使用npm uninstall -g jshint

另外,可以按照如下设置环境变量来替代2-4步中的配置过程:

NPM_CONFIG_PREFIX=~/.npm-global

扩展知识

npx:运行全局命令的替代方法

如果您使用的是npm5.2及以上的版本,则可以考虑使用npx作为运行全局命令的替代方法,尤其是在偶尔仅仅需要一个命令的情况下。

npx和npm的区别:

  • npm将包安装到本地,不会执行包。
  • npx将检查是否存在于$PATH或本地项目二进制文件中,并执行它。另外,npx可以执行本地没有安装的包。

参考链接

[1]: 解决权限问题的英文原文. https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally

[2]: npx的说明文档. https://www.npmjs.com/package/npx