[英]Running `npm ci` in AWS CodePipeline fails: "Cannot read property 'aws-cdk-lib' of undefined"
在 AWS CodePipeline 中调用npm ci
时,我遇到了一些奇怪的行为。
NPM 文档建议在自动化环境中使用npm ci
(“全新安装”)而不是npm install
。 AWS CDK 文档在其CDK 管道示例中遵循此建议:
const pipeline = new pipelines.CodePipeline(this, 'Pipeline', {
synth: new pipelines.ShellStep('Synth', {
...
commands: [
'npm ci',
'npm run build',
'npx cdk synth',
],
}),
});
然而,当我尝试这样做时,我的管道在npm ci
命令中失败,并出现一条奇怪的错误消息:
[Container] 2022/12/14 16:00:37 Running command npm ci
npm ERR! Cannot read property 'aws-cdk-lib' of undefined
package aws-cdk-lib
是我的package.json
依赖项中的第一个条目。 因此,在通过npm ci
安装时,CodeBuild 似乎无法解析我的依赖项。 奇怪的是,当我将npm ci
替换为npm install
时一切正常......但我想找到一种方法来使它与npm ci
一起工作。
npm ci
不起作用的原因是 CodeBuild 使用旧版本 npm。我检查时,最新版本是 9.2.0,而 CodeBuild 使用的是 6.14.17。
在运行npm ci
之前更新 npm 修复了这个问题:
const pipeline = new pipelines.CodePipeline(this, 'Pipeline', {
synth: new pipelines.ShellStep('Synth', {
...
// Update npm before running commands
installCommands: ['npm i -g npm@latest'],
commands: [
'npm ci',
'npm run build',
'npx cdk synth',
],
}),
});
可以在此处找到问题和修复的最小工作示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.