使用 pnpm 工作区时,在 GitHub Actions 中找不到 NodeJS 包二进制文件

2024-01-17

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

我相信我包含了所有必要的细节,但如果我遗漏了任何内容,请告诉我。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pnpm 工作区时,在 GitHub Actions 中找不到 NodeJS 包二进制文件 的相关文章

随机推荐