【问题标题】:Running `npm ci` in AWS CodePipeline fails: "Cannot read property 'aws-cdk-lib' of undefined"在 AWS CodeBuild 中运行“npm ci”:无法读取未定义的属性“aws-cdk-lib”
【发布时间】:2022-12-15 01:00:47
【问题描述】:

在 AWS CodePipeline 中调用 npm ci 时,我遇到了一些奇怪的行为。

NPM docs 建议在自动化环境中使用 npm ci(“全新安装”)而不是 npm install。 AWS CDK 文档在其CDK pipelines example 中遵循此建议:

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

aws-cdk-lib 包是我的package.json 依赖项中的第一个条目。因此,当通过 npm ci 安装时,CodeBuild 似乎无法解析我的依赖项。奇怪的是,当我将 npm ci 替换为 npm install 时一切正常......但我想找到一种方法来使用 npm ci 来完成这项工作。

【问题讨论】:

    标签: amazon-web-services npm aws-cdk aws-codepipeline aws-codebuild


    【解决方案1】:

    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',
        ],
      }),
    });
    

    可以在here 找到问题和修复的最小工作示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 2020-08-16
      • 2019-01-20
      • 1970-01-01
      相关资源
      最近更新 更多