我在构建Jenkins时遇到错误
Jenkins日志
任务: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:npm安装失败npm错误!无法读取未定义的属性“匹配”
npm错误!有关此运行的完整日志,请参见:npm ERR!
/var/lib/jenkins/.npm/_logs/2019-10-16T01_11_20_594Z-debug.log失败:构建失败,并出现异常。
出了什么问题:任务':web:npmInstall'的执行失败。
处理'command'/var/lib/jenkins/workspace/hds_v2_docker/web/.gradle/npm/npm-v6.11.2/bin/npm'' 以非零退出值1结束
尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。使用--scan运行以获取完整的见解。
- 获得更多帮助
在此版本中使用了不推荐使用的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 silly saveTree││└──source-map@0.6.1 17傻saveTree│├──指挥官@ 2.17.1 17 silly 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:无法读取未定义的属性“ match” tarballToVersion上的18个详细堆栈(/usr/local/lib/node_modules/npm/lib/install/inflate-shrinkwrap.js:87:20) 可充气儿童处的18个详细堆栈(/usr/local/lib/node_modules/npm/lib/install/inflate-shrinkwrap.js:99:22) BB.each上的18个详细堆栈(/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:23) 18个详细的堆栈位于Object.gotValue(/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/reduce.js:155:18) Object.gotAccum上的18个详细堆栈(/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/reduce.js:144:25) Object.tryCatcher上的18个详细堆栈(/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23) Promise._settlePromiseFromHandler(/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:512:31)上的18个详细堆栈 Promise._settlePromise(/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:569:18)上的18个详细堆栈 Promise._settlePromiseCtx上的18个详细堆栈(/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:606:10) _drainQueueStep处的18详细堆栈(/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:142:12) _drainQueue上的18详细堆栈(/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:131:9) Async._drainQueues上的18个详细堆栈(/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:147:5) 在Instant.Async.drainQueues(/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:17:14)上的18个详细堆栈 runCallback上的18个详细堆栈(timers.js:810:20) tryOnImmediate上的18个详细堆栈(timers.js:768:5) 19详细的cwd / var / lib / jenkins / workspace / hds_v2_docker / web 20详细Linux 4.4.0-59-generic 21详细argv“ / usr / bin / node”“ / usr / local / bin / npm”“安装” 22详细节点v8.16.0 23详细npm v6.9.0 24错误无法读取未定义的属性“匹配” 25详细出口[1,true]
答案 0 :(得分:18)
您必须同时删除 package-lock.json
和 node_modules/
。
如果您不删除两者,则问题将再次出现在下一个npm install
上。
答案 1 :(得分:6)
尝试删除package-lock.json看看是否有帮助。
rm -rf package-lock.json
答案 2 :(得分:2)
在仓库中运行npm install
时,我遇到了相同的错误。我没有使用Jenkins,但是我发现了一种在NPM中调试(最终解决)该问题的通用方法。
C:\Users\USERNAME\AppData\Roaming\npm-cache\_logs
下)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)
inflate-shrinkwrap.js
文件,然后转到上面的堆栈跟踪行#3中列出的行。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);
}
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'
}
C:/Root/Apps/@V/@Modules/firebase-feedback/Main/node_modules
文件夹,然后在npm install
文件夹中运行Main
来完成的)请注意,在我的情况下,(缺少的package.json文件)潜在的问题似乎是由我意外地从父项目(使用我的npm install
库)运行firebase-feedback
引起的,而我的图书馆“已链接npm”。
我通常使用npm-safe-install来避免这类问题(使用npm link
时),但是我一定是最近一段时间忘记了–导致NPM处理npm链接库的{{1} }文件夹。
与node_modules
相关的类似问题以前已经发生过,但是我希望NPM到现在可以解决这类问题。显然不是;尽管NPM版本7已被声明将在该领域进行重写,所以希望可以长期解决。
答案 3 :(得分:1)
答案 4 :(得分:0)
该错误可能会随其抛出的npm内部文件而有所不同! (我想知道所有可能的原因)!而且应该是一个错误!
(在我的最后一种情况中:它位于npm文件[_canPlaceDep]
的{{1}}方法上!
如果所有常用方法都不起作用!并且您正在使用 nodejs v15 + 和最新npm版本之一!转到最后一部分!我称之为nodejs 版本地狱的问题! (注意:经过反思!对于npm来说,它可能不是一个地狱版本!请阅读)
build-ideal-tree.js
之后重新安装
\rm -r node_modules
(注意:可能仍然无法使用)
您也可以尝试删除package.lock!
npm install
如果缓存以某种方式损坏,那可以工作!但是常见的错误更多是npm cache clean --force
您可以在此处查看我的答案(解释得很好):https://stackoverflow.com/a/52249619/7668448
Unexpected end of JSON input while parsing near ...
来自@DanielIM评论
不,不应该。这是“建议的解决方法”,但在实践中令人难以置信。在package.json中拥有锁定的依赖关系绝不能确保依赖关系的依赖关系保持一致,因此,删除package-lock.json文件,安装npm并生成新的锁定文件*将允许那些子依赖关系发生改变,而这通常会完全改变破坏任何未来的建筑。使用现有的锁定文件通常是维护构建的唯一方法(毕竟这是文件的要点),因此完全删除它与存在的原因背道而驰。
因此,通常把它留作最后的选择会很好!如果不起作用!您也可以尝试删除node_modules !
npm级别可能会发生问题!尝试重新安装可能是一个不错的方法!
要在重新安装的地方进行快速测试!使用NVM(nodejs版本管理器)并切换到另一个版本既快速又有趣!因为我们也可以测试版本问题!
如果在切换后仍然有效!然后或者是npm的问题,重新安装可能会解决它!或者这是版本地狱问题(错误)!
如何快速重新安装!再次使用nvm!
rm package.lock
然后
nvm uninstall v15
然后使用它
nvm install v15
您可以仅安装另一个版本并使用它! (例如v14)
检查版本问题,以及如何使用nvm在版本之间进行切换!
今年!我遇到了许多nodejs 版本问题! (我喜欢这样称呼他们)(因为我给他们起了个名字!天空给我更多的祝福)(讽刺)
要快速列出它们:
nvm use v15
而失败!回滚到 v3.9 成功运行!没问题!cannot read property "" of undefined
)如果您正在使用节点v15 !尝试使用节点v14 (npm v6.14.8)!就是这样!一个npm错误!这是第一个想法!那是我最初的想法!
对我来说就是这样!在最后一个问题中!我尝试了所有我熟悉的解决方案!而且它们也已经在这里列出!没有一个工作!当我删除 node_modules 时,还有更多!我是Cannot read property 'matches' of undefined
!而且是就是这样!它与Please not another version HELL
一起使用效果很好。提示[BUG]。
然后反思一下!就像嘿!当我更改版本时!我正在使用另一个nodejs安装!哪有没有问题。 npm结构或某些问题以及重新安装可能会解决该问题(如上所述)!
之后!我尝试了**node v14** (npm v6.14.8)
。而且一切正常!安装完成后就可以了!我回到了节点v15.0.1!它再次起作用!因此,问题绝对不是 VERSION HELL问题
我仍然无法解释发生了什么!但总之!使用 NVM !尝试其他版本!是解决它的好方法!您也可以快速重新安装当前版本!
从nodejs v14开始!和v15!或者只是一般!对此版本持怀疑态度真是太好了!这更多是没有意义的原因!这就是所有问题,而不仅仅是npm! VERSIONS HELL 问题太多了!我遇到了2到现在!收到 VERSIONS HELL 的提醒可以节省您很多时间!
要快速测试并检查!主要是为了解决任何内部错误!我将快速谷歌!然后尝试使用其他版本的nodejs 或任何有问题的内容(例如:打字稿)!我也可以调试(console.log)引发错误的内部文件!并尝试找出答案!
但是就是这样! 检查其他版本真的很有趣! (nodejs,打字稿,... [请记住对此表示怀疑或警告])
对于nodejs要快速做到:
使用 NVM (nvm是node.js的版本管理器)
在NVM中快速安装版本
node v15.3.0
快速切换到另一个节点版本
nvm install v14
(检查文档以获取详细信息!并确定安装过程)
如果是cli工具!您可以全局安装精确版本
nvm use v14
使用npm i -g typescript@3.9
语法!
验证和测试后,您可以切换回任意状态!
如果在项目中!您可以做同样的事情(不是全局的)!使用@
语法来精确定义版本!
@
或保存
npm i moduleName@<versionSpecifier>
版本说明符使用 SEMVER 约定(https://semver.org/)。
设置项目内部的版本很好!例如
npm i moduleName@<versionSpecifier> --save
在脚本中,我使用npx:
"devDependencies": {
"@types/cors": "^2.8.6",
"@types/gulp": "^4.0.6",
"cross-env": "^6.0.3",
"glob": "^7.1.6",
"gulp": "^4.0.2",
"nodemon": "^2.0.4",
"ts-node": "^8.10.2",
"typescript": "^3.9.7", // <===== Typescript version 3.9 (for this project)
"jest": "^26.6.3"
}
当我们通过nodjes模块cli工具以这种方式使用npx时! npx将首先检查该模块是否在本地node_modules中可用!如果找到将使用它(否则使用全局,或下载最新版本并运行)!
所以按照我的建议做吧!将确保您的项目将独立于全局运行而独立运行!
(如果您不太了解该工具,请阅读有关npx的更多信息)