升级Node 8.9.4 LTS后安装Sails.js依赖遇NPM ENOENT错误如何解决?
解决Node.js 8.9.4 + NPM 5.6.0下Sails.js 0.12.14依赖安装失败的问题
我之前也碰到过类似的情况,旧版Sails(0.12.x)和NPM 5.x的组合确实存在兼容性冲突——主要是NPM 5引入的package-lock.json和更严格的依赖目录处理逻辑,和Sails 0.12.x的旧依赖树不匹配,导致解压和重命名临时文件时出现ENOENT错误。以下是几个亲测有效的解决方法:
方法一:降级NPM到兼容版本(最稳妥)
NPM 4.x和Node.js 8 LTS的兼容性更好,也能完美支持Sails 0.12.x的依赖安装:
- 全局降级NPM:
npm install -g npm@4.6.1 - 清理项目残留文件:
rm -rf node_modules package-lock.json npm cache clean --force - 重新安装依赖:
npm install
方法二:禁用Package Lock(无需降级NPM)
如果不想降级NPM,可以通过禁用package-lock.json生成来规避冲突:
- 清理现有残留:
rm -rf node_modules package-lock.json npm cache clean --force - 带参数安装依赖:
npm install --no-package-lock
方法三:锁定冲突依赖版本
如果上面的方法都不行,可以手动在package.json里锁定出现错误的依赖(比如pako、lodash)的稳定版本,强制NPM安装指定版本:
- 打开项目的
package.json,在dependencies中添加或修改以下内容:"pako": "^1.0.6", "lodash": "^4.17.4" - 清理残留后重新安装:
rm -rf node_modules package-lock.json npm cache clean --force npm install
补充说明
Sails 0.12.14是比较老旧的版本,发布时NPM 5还未推出,它的依赖声明没有考虑NPM 5的新特性,所以才会出现这类文件路径错误。如果后续有机会,建议逐步升级Sails到1.x版本,能更好地适配新的Node.js和NPM版本。
内容的提问来源于stack exchange,提问作者JackH
相关产品推荐
相关产品推荐

