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 '/*'
我有一个正在使用 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 '/*'