我仍然遇到这个问题,这在开发中很好——我只是在顶层手动创建一个符号链接
node_modules
。不过,我现在正在尝试将 linting 集成到我的 GitHub CI 操作中,因此需要能够在 actions/setup-node
创建的构建上创建符号链接。
执行
actions/setup-node
时,node_modules
将 pnpm install
放在哪里?
我尝试只做我在本地所做的事情,假设它安装在跑步者的
cwd
中:
name: 'Intall'
description: 'Sets up the repository'
inputs:
node-version: # node version on which to build
description: "Node version for the build"
required: true
default: 'latest'
runs:
using: 'composite'
steps:
- name: Set up pnpm
# pnpm version controlled in top level package.json
uses: pnpm/action-setup@v4
- name: Install NodeJS
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
- name: Install dependencies
shell: bash
run: pnpm install --frozen-lockfile
# pnpm doesn't do this? ¯\_(ツ)_/¯
# needed for linting
- name: Link globals package
shell: bash
run: ln -s node_modules/.pnpm/[email protected]/node_modules/globals/ node_modules/globals
但是
ln
失败了。基于这个答案(实际上是关于npm ci
,而不是setup-node
和pnpm
,但我想我应该尝试一下),我尝试切换到~/.npm
:
run: ln -s ~/.npm/node_modules/.pnpm/[email protected]/node_modules/globals/ ~/.npm/node_modules/globals
但还是没有爱:
ln: failed to create symbolic link '/home/runner/.npm/node_modules/globals': No such file or directory
setup-node
文档说,“该操作......在机器上缓存全局缓存而不是node_modules
”,但这似乎指的是全局,这似乎不正确;即使是,它也没有说明将其缓存在哪里。
我还尝试更深入地挖掘 GitHub Actions 输出,它说
env:
PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
但是从网上搜索发现,
PNPM_HOME
仅存储pnpm
本身,而不是已安装的软件包。
actions/setup-node
和/或pnpm/action-setup
在哪里放置本地node_modules
,以便我可以创建到<node_modules>/.pnpm/node_modules/[email protected]/node_modules/globals
缺少的符号链接?
事实证明你可以用
github.workspace
获取路径,所以这最终成功了:
- name: Link globals package
shell: bash
run: ln -s ${{ github.workspace }}/node_modules/.pnpm/[email protected]/node_modules/globals/ ${{ github.workspace }}/node_modules/globals