Overview
我有一个使用 pnpm 工作区和 Turborepo 的 monorepo。我有一个包,它是节点二进制文件(deploy-script
)我想从另一个包中的包脚本调用(website
).
在本地一切正常。但是,在 GitHub 操作中,脚本失败,因为找不到二进制文件。
为什么这在 GitHub 操作中不起作用?
Details
Command
pnpm run deploy
这调用turbo run deploy
使用我在工作区根目录中设置的包脚本。
package.json
{
"scripts": {
"build": "turbo run build",
"deploy": "turbo run deploy",
},
"devDependencies": {
"turbo": "^1.8.8"
},
"packageManager": "[email protected] /cdn-cgi/l/email-protection"
}
然后在apps/website/package.json
部署脚本,这会调用deploy-script
.
apps/website/package.json
{
"name": "website",
"type": "module",
"scripts": {
"deploy": "build-script"
},
"dependencies": {
"build-script": "workspace:*"
}
}
deploy-script
是这个 monorepo 中定义的另一个包:
tools/deploy-script/package.json
{
"name": "deploy-script",
"type": "module",
"bin": ".dist/main.js",
"scripts": {
"build": "<build command>"
}
}
错误信息
website:deploy:
website:deploy: > website@ deploy /home/runner/work/repo/repo/apps/website
website:deploy: > deploy-script
website:deploy:
website:deploy: sh: 1: deploy-script not found
website:deploy: ELIFECYCLE Command failed.
website:deploy: ERROR: command finished with error: command (/home/runner/work/repo/repo/apps/website) pnpm run deploy exited (1)
command (/home/runner/work/repo/repo/apps/website) pnpm run deploy exited (1)
这让我认为我想作为二进制文件运行的 npm 包配置错误。
文件结构
package.json
turbo.json
pnpm-workspace.yaml
apps/
website/
package.json
main.ts
.dist/
main.js -- automatically built before deploying, I checked
tools/
deploy-script/
package.json
.github/workflows/ci.yml
Note: .dist/main.js
根据 NPM 文档,以 shebang 开头。
其他可能相关的文件
apps/website/package.json
{
"name": "website",
"type": "module",
"scripts": {
"deploy": "build-script"
},
"dependencies": {
"build-script": "workspace:*"
}
}
package.json
{
"scripts": {
"build": "turbo run build",
"deploy": "turbo run deploy",
},
"devDependencies": {
"turbo": "^1.8.8"
},
"packageManager": "[email protected] /cdn-cgi/l/email-protection"
}
turbo.json
{
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": [".dist/**"]
},
"deploy": {
"dependsOn": ["^build", "build"]
},
}
}
pnpm-workspace.yaml
packages:
- 'apps/**'
- 'tools/**'
- 'libs/**'
.github/workflows/ci.yml
on:
- push
jobs:
check-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- uses: pnpm/action-setup@v2
name: Install pnpm
id: pnpm-install
with:
version: 8
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Build
run: pnpm build
- name: Deploy production
run: pnpm run deploy
我相信我包含了所有必要的细节,但如果我遗漏了任何内容,请告诉我。