使用npm的注意事项及错误收集

前言

记录npm使用的一些注意事项,以及收集一些npm错误的解决办法。

更新node和npm

更新node

  1. 安装n模块:
1
sudo npm i -g n
  1. 安装最新稳定版node:
1
sudo n stable

更新npm

1
sudo npm i -g npm

注意:更新完node和npm后,可能当前环境并没有刷新,需要手动更新命令行工具或重新进入;

手动更新:

1
source ~.zshrc

通过nvm更新node和npm

nvmNode version manager,是专门用来管理node版本切换的工具;

  1. 安装相应版本的node
1
nvm install v10.8.0

执行上述命令会自动安装v10.8.0node及其对应的npm;安装完后会自动切换到安装完后的node版本,需要注意的是这只是临时切换

  1. 永久切换node版本:
1
nvm alias default v10.8.0

这样关闭终端后,打开的默认node版本就是上述设置的版本。

  1. 临时切换node版本:
1
nvm use vxx.x.x
  1. 查看已安装的node版本:
1
nvm list

NPM错误收集

1
2
3
npm ERR!   errno: -4048,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'unlink'

导致问题的原因:项目中文件夹或某个文件被其他程序占用(很可能就是vscode的锅),导致文件没有权限被读写;

解决办法:使用杀毒软件对文件夹进行占用解锁;如腾讯管家:

img

相关参考链接

  1. node.js - Fail to install npm package “npm ERR! errno -4048” - Stack Overflow
  2. node.js - npm install give Error: EPERM, unlink - Stack Overflow

EPERM: operation not permitted

1
2
3
4
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall lstat
npm ERR! Error: EPERM: operation not permitted

该类错误通常是项目文件夹的权限不够(win10中可能出现),在文件夹右击,然后选择『管理员取得所有权』即可。(很纳闷,明明是管理员账户为啥还有这情况出现?)

img

如果是解锁文件和赋予管理员权限还是提示-4048的错误时,可以考虑在npm命令后面加上--no-bin-links参数;如:

1
npm i xxx --no-bin-links

参考文档Error: EPERM: operation not permitted, unlink · Issue #2464 · phoenixframework/phoenix

Unexpected end of JSON input while parsing near

1
Unexpected end of JSON input while parsing near xxx

导致问题的原因:可能是之前安装的时候出现错误导致安装中断,因此npm缓存中含有不正确的安装包;

解决办法:使用npm cache clean -f清除缓存,然后再次安装即可;

相关参考链接

  1. npm install error unexpected end of JSON input while parsing near ‘…omment:http://open’ · Issue #4328 · LLK/scratch-gui

node-sass安装失败

解决办法:直接单独设置淘宝源镜像进行安装;

1
npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/

参考链接整理 node-sass 安装失败的原因及解决办法 - 个人文章 - SegmentFault 思否

提示包不存在:code ETARGET

如这样的错误:

1
2
3
4
5
6
7
npm ERR! code ETARGET
npm ERR! notarget No matching version found for es-abstract@1.14.0
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.
npm ERR! notarget
npm ERR! notarget It was specified as a dependency of 'xxx'
npm ERR! notarget

查找原因是package-lock.json当中的这个包确实没有这个版本;

解决办法:直接把package-lock.json这个包的信息去掉,然后重新安装即可;千万不要尝试直接在里面改变包的版本号,那样校验不会通过!

参考文档