首先,在我的本地机器(macOS)上一切都按预期工作,但是在 Ubuntu 上的 CI(GitHub 工作流)上运行它时出现错误。我的包使用带有可执行脚本的 devDependency...
首先, 在我的本地机器(macOS)上一切都按预期运行 ,但在 Ubuntu 上的 CI(GitHub 工作流)上运行它时出现错误。
我的包使用带有可执行脚本的 devDependency,而该脚本又使用带有可执行脚本的另一个依赖项。
当运行 devDep A bin 脚本(带有 npx <command-a> ...
)时,该脚本内部运行 dep B bin 脚本(带有 npx <command-b> ...
),我收到错误 could not determine executable to run
.
从 CI 上的日志来看,它似乎尝试 command-b
从 npm 注册表中获取,然后尝试在找到的包中运行 bin 脚本 - 但该包中没有该脚本,从而导致错误。
据我了解,npm 应该尝试在本地环境中查找 npx 命令 node_modules
,然后在全局环境中查找,并且只有在找不到时才会尝试从 npm 注册表中获取它。因此,我认为问题是 npm 找不到 command-b
,因此它尝试从 npm 注册表中获取它。
注意: command-a
使用不依赖于 command-b
预期工作的选项运行。
这是工作流文件
name: Run tests
on:
pull_request:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
concurrency: ci-${{ github.ref }}-${{ github.workflow }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Install node
- uses: actions/setup-node@v4
with:
node-version: "20"
# Install pnpm
- uses: pnpm/action-setup@v4
with:
version: 8.9.0
- name: Install dependencies and run tests
run: |
cd examples/my-project
pnpm install
pnpm run test
pnpm run test
运行 command-a
依赖于的脚本 command-b
注意:两种方法都试过了 npm
—— pnpm
都没有用。
我不确定问题出在哪里,但由于它在我的本地环境中运行,我怀疑它与 GH CI / Ubuntu / 嵌套 npx 命令有关