我最近升级了我的计算机并使用它升级到最新的Node和NPM的LTS版本:
我有一个Sails.js 0.12.14应用程序,我正在尝试使用npm install
安装NPM依赖项,但是当我这样做时,我收到以下错误:
➜ web-service git:(feature/auth) ✗ npm install
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/pako-660dbb41/package.json'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/pako-660dbb41/README.md'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/pako-660dbb41/LICENSE'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/pako-660dbb41/index.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/pako-660dbb41/CHANGELOG.md'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/camelCase.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/uniqueId.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/bindKey.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/unnest.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/bindAll.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/unset.js'
// a bunch of similar Lodash errors removed from here
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/T.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/zipWith.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/lastIndexOfFrom.js'
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/oauth-sign):
npm WARN enoent SKIPPING OPTIONAL DEPENDENCY: ENOENT: Cannot cd into '/Users/Nag/Code/project/web-service/node_modules/.staging/oauth-sign-b13c86db'
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/mkdirp):
npm WARN enoent SKIPPING OPTIONAL DEPENDENCY: ENOENT: Cannot cd into '/Users/Nag/Code/project/web-service/node_modules/.staging/mkdirp-c94c8047'
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/mkdirp/node_modules/minimist):
npm WARN enoent SKIPPING OPTIONAL DEPENDENCY: ENOENT: Cannot cd into '/Users/Nag/Code/project/web-service/node_modules/.staging/minimist-ba966a6e'
npm ERR! path /Users/Nag/Code/project/web-service/node_modules/.staging/sails-02afd14e/node_modules/@sailshq/body-parser
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall rename
npm ERR! enoent ENOENT: no such file or directory, rename '/Users/Nag/Code/project/web-service/node_modules/.staging/sails-02afd14e/node_modules/@sailshq/body-parser' -> '/Users/Nag/Code/project/web-service/node_modules/.staging/@sailshq/body-parser-6d1e8405'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/Nag/.npm/_logs/2018-01-22T14_40_13_889Z-debug.log
我似乎无法弄清楚发生了什么,也无法在网上找到合适的答案。我甚至跑了npm cache clean --force
,rm -rf node_modules
并重试了类似的错误。当我在Node~6上似乎工作正常但升级到Node 8.9.4和NPM 5.6.0后,它只是不会安装我的依赖项。我该如何解决这个问题?
尝试删除package-lock.json
文件。
没有许可,没有互联网问题,这只是npm
的一般问题。我用yarn解决了这个问题。
yarn install
或者你可以使用no-optional
标志。
npm install --no-optional
我有一段时间一直在努力,似乎与以下有关。
假设你有3个模块,A,B和C.
模块A直接包括B和C模块B还包括模块C,其中包含package.json依赖项。
如果模块A中的package.json依赖项如下所示:
"dependencies": {
"C": "^1.0.0",
"B": "^1.1.0"
}
你会得到你提到的上述错误,ENOENT,等等,等等
另一方面,如果您首先包含嵌套包含的模块,请执行以下操作:
"dependencies": {
"B": "^1.1.0",
"C": "^1.0.0"
}
错误消失了。这似乎是npm中的嵌套依赖项中的错误,错误消息和日志不是很具描述性。检查您的依赖关系树,看看您是否有描述的案例,如果是,那就是您的问题。
只需删除package-lock.json
文件,然后安装所需的软件包即可。一切都会奏效。
删除和重新生成'package-lock.json'通常可以解决这个问题,但这本身就存在风险,因为您可能会一次升级多个包。
在我的情况下,事实证明,package-lock.json引用了一个特定的包版本,在依赖项中有5个级别。该版本不再存在于npm注册表中,因此导致安装中断。我必须找到哪个软件包在这个依赖项中提升并升级那个软件包以解决问题。