繁体   English   中英

在 AWS CodePipeline 中运行“npm ci”失败:“无法读取未定义的属性‘aws-cdk-lib’”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM