Npm安装期间“无法读取未定义的属性'match'”

m2s*_*2sj 2 node.js npm

我在构建Jenkins时遇到错误

詹金斯·洛格(Jenkins Log)

任务:api:processResources任务:api:classes任务:web:nodeSetup任务:web:npmSetup /var/lib/jenkins/workspace/hds_v2_docker/web/.gradle/npm/npm-v6.11.2/bin/npm-> / var / lib / jenkins / workspace / hds_v2_docker / web / .gradle / npm / npm-v6.11.2 / lib / node_modules / npm / bin / npm-cli.js / var / lib / jenkins / workspace / hds_v2_docker / web /。 gradle / npm / npm-v6.11.2 / bin / npx-> /var/lib/jenkins/workspace/hds_v2_docker/web/.gradle/npm/npm-v6.11.2/lib/node_modules/npm/bin/npx-cli .js + npm@6.11.2在6.837s中添加了832个贡献者的430个软件包任务:web:npmInstall FAILED npm ERR!无法读取未定义的属性“匹配”

npm ERR!可以在以下位置找到该运行的完整日志:npm ERR!
/var/lib/jenkins/.npm/_logs/2019-10-16T01_11_20_594Z-debug.log

失败:构建失败,发生异常。

  • 出了什么问题:任务':web:npmInstall'的执行失败。

    进程'命令'/var/lib/jenkins/workspace/hds_v2_docker/web/.gradle/npm/npm-v6.11.2/bin/npm''完成,返回值非零

  • 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。与--scan一起运行以获取完整的见解。

  • https://help.gradle.org上获得更多帮助

此构建中使用了不推荐使用的Gradle功能,使其与Gradle 6.0不兼容。使用“ --warning-mode all”来显示各个弃用警告。参见 https://docs.gradle.org/5.0/userguide/command_line_interface.html#sec:command_line_warnings

在33秒内失败

/var/lib/jenkins/.npm/_logs/2019-10-16T01_11_20_594Z-debug.log

17傻saveTree???? clean-css@4.2.1 17傻的saveTree????? source-map@0.6.1 17傻saveTree吗???? commander@2.17.1 17傻saveTree吗???? he@1.2.0 17傻的saveTree ??? loader-utils@0.2.17 17傻saveTree ??? big.js@3.2.0 17傻的saveTree ??? emojis-list@2.1.0 17愚蠢的saveTree ??? json5@0.5.1 18详细堆栈TypeError:无法在tarballToVersion(/usr/local/lib/node_modules/npm/lib/install/inflate-shrinkwrap.js:87:20)读取未定义的18详细堆栈的属性'match'可充气儿童的详细堆栈(/usr/local/lib/node_modules/npm/lib/install/inflate-shrinkwrap.js:99:22)18个BB。详细堆栈(/ usr / local / lib / node_modules / npm / lib /install/inflate-shrinkwrap.js:55:12)tryCatcher上的18个详细堆栈(/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:

Hol*_*r L 31

你必须删除两个 package-lock.json node_modules/

如果您不删除两者,问题将在下一个npm install.

  • 这应该是公认的答案。问题是为什么会出现这种情况? (2认同)

Ven*_*ryx 9

npm install在我的回购中运行时,我遇到了同样的错误。我不使用 Jenkins,但我找到了在 NPM 中调试(并最终解决)这个问题的通用方法。

  1. 打开 cli 为您提供的 npm 调试日志文件。(在 Windows 上,C:\Users\USERNAME\AppData\Roaming\npm-cache\_logs默认情况下)
  2. 在文件底部查找错误的堆栈跟踪。
  3. 错误堆栈跟踪的前三行应该是这样的:
18 verbose stack TypeError: Cannot read property 'match' of undefined
18 verbose stack     at tarballToVersion (C:\Users\USERNAME\AppData\Roaming\nvm\v14.5.0\node_modules\npm\lib\install\inflate-shrinkwrap.js:87:20)
18 verbose stack     at inflatableChild (C:\Users\USERNAME\AppData\Roaming\nvm\v14.5.0\node_modules\npm\lib\install\inflate-shrinkwrap.js:113:22)
Run Code Online (Sandbox Code Playgroud)
  1. 打开inflate-shrinkwrap.js文件,并转到上面堆栈跟踪第 3 行中列出的行。
  2. 添加此调试代码:(就在调用 的行 [in stack-trace] 之前tarballToVersion
if (sw.version == null) {
    console.error(`
        NPM is trying to retrieve package "${name}" with version "undefined"!
        Package location: ${(onDiskChild || {}).location}
        Package parse error:`, (onDiskChild || {}).error);
}
Run Code Online (Sandbox Code Playgroud)
  1. 运行npm install(或任何产生错误的命令)。你应该看到这样的输出:
        NPM is trying to retrieve package with version "undefined"!
        Package location: /firebase-feedback/webpack-dev-middleware
        Package parse error: [Error: ENOENT: no such file or directory, open 'C:\Root\Apps\@V\@Modules\firebase-feedback\Main\node_modules\webpack-dev-middleware\package.json'] {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'open',
  path: 'C:\\Root\\Apps\\@V\\@Modules\\firebase-feedback\\Main\\node_modules\\webpack-dev-middleware\\package.json'
}
Run Code Online (Sandbox Code Playgroud)
  1. 转到内部错误中指定的路径。您应该会发现该路径下的 package.json 文件确实丢失了。
  2. 解决您认为合适的潜在“package.json”问题。(对我来说,这是通过删除C:/Root/Apps/@V/@Modules/firebase-feedback/Main/node_modules文件夹,然后npm installMain文件夹中运行)

请注意,在我的情况下,(缺少 package.json 文件的)潜在问题似乎是由我不小心npm install从父项目(使用我的firebase-feedback库)运行引起的,而我有该库“npm 链接”。

我通常使用npm-safe-install来避免这些类型的问题(使用 时npm link),但我最近一定忘记了——导致 NPM 破坏了 npm 链接库的node_modules文件夹。

npm link以前也发生过类似的问题,但我希望 NPM 现在已经修补了这些问题。显然不是; 尽管 NPM 的第 7 版已被声明为将在该领域进行重写,因此希望这将长期解决它。


adn*_*ved 6

您必须删除项目 Package-lock.json 文件。然后尝试安装你想要的。

您可以在主项目目录中找到该文件

  • 不,不应该。这是“推荐的解决方法”,但在实践中却被严重破坏。在 package.json 中拥有锁定的依赖项并不能确保依赖项的依赖项保持一致,因此删除 package-lock.json 文件、npm 安装并生成 newlock 文件*将允许这些子依赖项发生更改,这通常会完全改变破坏任何未来的建筑。使用现有的锁定文件通常是维护构建的唯一方法(毕竟这是文件的要点),因此完全删除它违背了它存在的原因。 (10认同)

Adi*_*ash 5

尝试删除您的package-lock.json以查看是否有帮助。

rm -rf package-lock.json

  • 在 Windows 操作系统上使用“del package-lock.json”命令。同时关闭编辑器并删除“node_modules”。两者都是必须的。 (5认同)
  • 也尝试删除node_modules。cd 进入应用程序目录后,执行 rm -rf node_modules 。 (4认同)
  • 谢谢您的回答。我已经尝试过,但遇到了同样的错误 (3认同)