为 Firebase 托管设置 Github 操作时找不到 package.json 文件
Couldn't find a package.json file when setting up Github actions for Firebase Hosting
在为 firebase 托管初始化 github 操作时,我指定了以下内容:
在每次部署之前将工作流程设置为 运行 构建脚本?是的
每次部署前应该 运行 什么脚本?纱线 运行 构建。
这个工作流程给我错误
Run yarn run build
yarn run v1.22.10
error Couldn't find a package.json file in "/home/runner/work/SpaceBar/SpaceBar"
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Error: Process completed with exit code 1.
我的项目目录中有一个 package.json 文件。为什么说找不到?
firebase-hosting-merge.yml 位于名为 spacebar 的目录中,该目录包含另一个名为 spacebar 的目录,其中包含 package.json 文件。
反正有没有cd到这个文件的子目录
name: Deploy to Firebase Hosting on merge
'on':
push:
branches:
- main
jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: yarn run build
- uses: FirebaseExtended/action-hosting-deploy@v0
由于 actions/checkout
操作使您可以访问存储库文件和目录,因此您可以 cd
进入 package.json
文件所在的目录,然后再执行 [=14] =] 命令。否则,它只会在存储库根目录中查找它。
示例(针对您的第二步)
run: |
cd spacebar/spacebar
yarn run build
我在类似的设置中遇到了同样的错误。不幸的是,标记为已接受的答案并没有解决我的问题。
然而,经过大量谷歌搜索后,我确实设法解决了我的问题,只是想分享我发现的内容,以防其他人仍然遇到我遇到的问题:
正如 GuiFalourd 正确提到的那样,错误是要求您进入 package.json 文件所在的目录。但事实证明,有多种方法可以做到这一点——有些方法比其他方法更正确。在我的具体情况下,我正在使用的操作和其中的所有命令 运行ning 都应该在特定目录中 运行 ,因此我选择使用关键字 [= 声明目录13=] 在 defaults
设置中:
name: Build & deploy
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./frontend
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Clean Cache
run: |
npm cache clean --force
- name: CI Install
run: |
npm ci
- name: NPM Install
run: |
npm install
- name: Production Build
run: |
npm run build
env:
CI: false
- name: Unit Tests
run: |
npm run test --passWithNoTests
另一种可行的替代方法是在每个步骤中使用命令设置 working-directory
。如果您想 运行 特定目录中的特定命令一次,而其他所有内容都在其他地方 运行 ,这可能很有用。缺点是它看起来很乱并且是多余的,如果一切都意味着 运行 在同一个目录中的话:
name: Build & deploy
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Clean Cache
working-directory: ./frontend
run: |
npm cache clean --force
- name: CI Install
working-directory: ./frontend
run: |
npm ci
- name: NPM Install
working-directory: ./frontend
run: |
npm install
- name: Production Build
working-directory: ./frontend
run: |
npm run build
env:
CI: false
- name: Unit Tests
working-directory: ./frontend
run: |
npm run test --passWithNoTests
请注意: working-directory
关键字对 uses
和 with
关键字不起作用。根据您使用的部署操作,您必须在其自己的 env
设置中进行设置。
就我而言,我最终的 YML 文件如下所示:
name: Build & deploy
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./frontend
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Clean Cache
run: |
npm cache clean --force
- name: CI Install
run: |
npm ci
- name: NPM Install
run: |
npm install
- name: Production Build
run: |
npm run build
env:
CI: false
- name: Unit Tests
run: |
npm run test --passWithNoTests
- name: Deploy to S3
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --delete
env:
AWS_S3_BUCKET: ${{ secrets.AWS_PRODUCTION_BUCKET_NAME }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
SOURCE_DIR: "./frontend/build"
希望这对您有所帮助。
在为 firebase 托管初始化 github 操作时,我指定了以下内容:
在每次部署之前将工作流程设置为 运行 构建脚本?是的 每次部署前应该 运行 什么脚本?纱线 运行 构建。
这个工作流程给我错误
Run yarn run build
yarn run v1.22.10
error Couldn't find a package.json file in "/home/runner/work/SpaceBar/SpaceBar"
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Error: Process completed with exit code 1.
我的项目目录中有一个 package.json 文件。为什么说找不到?
firebase-hosting-merge.yml 位于名为 spacebar 的目录中,该目录包含另一个名为 spacebar 的目录,其中包含 package.json 文件。 反正有没有cd到这个文件的子目录
name: Deploy to Firebase Hosting on merge
'on':
push:
branches:
- main
jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: yarn run build
- uses: FirebaseExtended/action-hosting-deploy@v0
由于 actions/checkout
操作使您可以访问存储库文件和目录,因此您可以 cd
进入 package.json
文件所在的目录,然后再执行 [=14] =] 命令。否则,它只会在存储库根目录中查找它。
示例(针对您的第二步)
run: |
cd spacebar/spacebar
yarn run build
我在类似的设置中遇到了同样的错误。不幸的是,标记为已接受的答案并没有解决我的问题。
然而,经过大量谷歌搜索后,我确实设法解决了我的问题,只是想分享我发现的内容,以防其他人仍然遇到我遇到的问题:
正如 GuiFalourd 正确提到的那样,错误是要求您进入 package.json 文件所在的目录。但事实证明,有多种方法可以做到这一点——有些方法比其他方法更正确。在我的具体情况下,我正在使用的操作和其中的所有命令 运行ning 都应该在特定目录中 运行 ,因此我选择使用关键字 [= 声明目录13=] 在 defaults
设置中:
name: Build & deploy
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./frontend
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Clean Cache
run: |
npm cache clean --force
- name: CI Install
run: |
npm ci
- name: NPM Install
run: |
npm install
- name: Production Build
run: |
npm run build
env:
CI: false
- name: Unit Tests
run: |
npm run test --passWithNoTests
另一种可行的替代方法是在每个步骤中使用命令设置 working-directory
。如果您想 运行 特定目录中的特定命令一次,而其他所有内容都在其他地方 运行 ,这可能很有用。缺点是它看起来很乱并且是多余的,如果一切都意味着 运行 在同一个目录中的话:
name: Build & deploy
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Clean Cache
working-directory: ./frontend
run: |
npm cache clean --force
- name: CI Install
working-directory: ./frontend
run: |
npm ci
- name: NPM Install
working-directory: ./frontend
run: |
npm install
- name: Production Build
working-directory: ./frontend
run: |
npm run build
env:
CI: false
- name: Unit Tests
working-directory: ./frontend
run: |
npm run test --passWithNoTests
请注意: working-directory
关键字对 uses
和 with
关键字不起作用。根据您使用的部署操作,您必须在其自己的 env
设置中进行设置。
就我而言,我最终的 YML 文件如下所示:
name: Build & deploy
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./frontend
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Clean Cache
run: |
npm cache clean --force
- name: CI Install
run: |
npm ci
- name: NPM Install
run: |
npm install
- name: Production Build
run: |
npm run build
env:
CI: false
- name: Unit Tests
run: |
npm run test --passWithNoTests
- name: Deploy to S3
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --delete
env:
AWS_S3_BUCKET: ${{ secrets.AWS_PRODUCTION_BUCKET_NAME }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
SOURCE_DIR: "./frontend/build"
希望这对您有所帮助。