SvelteKit:AWS CodeBuild 中的 'npm run build' 错误

SvelteKit: 'npm run build' error in AWS CodeBuild

我有一个正在使用 AWS CodePipeline 部署的 SvelteKit 应用程序。

我的管道在推送到 CodeCommit 时被触发。但是 CodeBuild 失败并显示以下错误消息:

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! project-title@0.0.1 build: `svelte-kit build`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the project-title@0.0.1 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
[Container] 2021/11/30 14:45:25 Command did not exit successfully npm run build exit status 1

我尝试克隆存储库并在我的 PC 上的干净环境中构建它,并且构建时没有任何错误。我无法在 CodeBuild 之外重现该问题。


buildspec.yml

    version: 0.2
    
    phases: 
        install:
            commands:
                - echo "Entered the install phase..."
                - npm install
        pre_build:
            commands: 
                - echo "Entered the pre_build phase..."
        build:
            commands:
                - echo "Entered the build phase..."
                - echo "Build started on `date`"
                - npm run build
        post_build:
            commands:
                - echo "Entered the post_build phase..."
                - echo "Build completed on `date`"
    
    artifacts:
      files:
        - '**/*'
      name: project-title

package.json

{
  "name": "project-title",
  "version": "0.0.1",
  "scripts": {
    "dev": "svelte-kit dev",
    "build": "svelte-kit build",
    "preview": "svelte-kit preview",
    "lint": "prettier --ignore-path .gitignore --check --plugin-search-dir=. . && eslint --ignore-path .gitignore .",
    "format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. ."
  },
  "devDependencies": {
    "@sveltejs/adapter-static": "^1.0.0-next.21",
    "@sveltejs/kit": "next",
    "autoprefixer": "^10.4.0",
    "eslint": "^7.32.0",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-svelte3": "^3.2.1",
    "prettier": "^2.4.1",
    "prettier-plugin-svelte": "^2.4.0",
    "svelte": "^3.42.6",
    "tailwindcss": "^2.2.19"
  },
  "type": "module"
}

svelte.config.js

import adapter from '@sveltejs/adapter-static';

export default {
    kit: {
        adapter: adapter({
            // default options are shown
            pages: 'build',
            assets: 'build',
            fallback: null
        })
    }
};

CodeBuild项目环境:

我最终采取了以下解决方法:我在自己的机器上构建项目,然后为构建文件创建一个代码提交存储库。

然后我创建了一个 CodeBuild 项目,将 CodeCommit 存储库与我想要的 S3 存储桶同步。 CodeBuild 使用的命令是:

aws s3 sync . s3://BUCKET_NAME --delete

“--delete”选项基本上会从 S3 中删除所有不在存储库中的文件,sync 命令会复制新文件并更新其中已有的文件。

可选:我没有设置代码管道,因为在推送到存储库时我并不总是需要 运行 CodeBuild。所以我只是在 as-needed 的基础上手动启动 CodeBuild 项目。

可选 2:我的静态网站是通过 CloudFront 分发访问的,因此每次我使用 CodeBuild 和以下命令(在同步命令之后)时,我都会创建一个 CloudFront 失效:

 aws cloudfront create-invalidation --distribution-id ID_OF_DISTRIBUTION --paths '/*'