nvmd-command icon indicating copy to clipboard operation
nvmd-command copied to clipboard

希望能在 pnpm monorepo 里面增加支持

Open cuidong626 opened this issue 1 year ago • 2 comments

使用qiankun+monorepo的项目结构,需要给不同的包指定不同node版本。使用nvmd测试后发现,虽然可以给指定项目指定版本,但是在monorepo根目录执行的项目,子包的版本是随着当前工程来的,尽管已经使用nvmd给子包指定了版本。只有进入子包执行命令,才是nvmd设置的版本。 翻了一下pnpm 的文档,pnpm是支持给子包设置不同版本的,英语不是很好,看截图意思因该是会默认使用nvm做node版本切换。但是windows环境下.nvmrc好像还不支持,所以nvm相当于不能用。然后由pnpm管理node版本。 实际测试是可以的。如下图: image pnpm文档截图如下: image

不知道这个能不能去增加一下支持?

cuidong626 avatar Sep 26 '24 03:09 cuidong626

image

cuidong626 avatar Sep 26 '24 03:09 cuidong626

This setting works only in a .npmrc file that is in the root of your workspace. If you need to specify a custom Node.js for a project in the workspace, use the pnpm.executionEnv.nodeVersion field of package.json instead.

翻译下来就是:此设置仅适用于.npmrc工作区根目录中的文件中。如果您需要为工作区中的项目指定自定义 Node.js,请改用pnpm.executionEnv.nodeVersion字段package.json。

所以如果你想让monorepo子项目使用不同的版本应该是去子项目的package.json文件中配置:

{
  "pnpm": {
    "executionEnv": {
      "nodeVersion": "16.16.0"
    }
  }
}

image

我理解下来 这个应该是pnpm自己实现的功能 nvmd是改变不了其加载方式的

1111mp avatar Sep 26 '24 06:09 1111mp

目前 pnpm 是支持自己去管理和应用项目运行时的 Node.js 的版本的。

当运行子项目命令时(比如:pnpm -F <子项目名> start ),没有办法去介入更改其默认行为,不过可以考虑加入一个功能:通过环境变量来指定 Node.js 的版本 NVMD_NODE_VERSION,这样你可以使用 cross-env NVMD_NODE_VERSION=20.12.2 pnpm -F <子项目名> start 来运行项目了。

1111mp avatar Dec 06 '25 10:12 1111mp