希望能在 pnpm monorepo 里面增加支持
使用qiankun+monorepo的项目结构,需要给不同的包指定不同node版本。使用nvmd测试后发现,虽然可以给指定项目指定版本,但是在monorepo根目录执行的项目,子包的版本是随着当前工程来的,尽管已经使用nvmd给子包指定了版本。只有进入子包执行命令,才是nvmd设置的版本。
翻了一下pnpm 的文档,pnpm是支持给子包设置不同版本的,英语不是很好,看截图意思因该是会默认使用nvm做node版本切换。但是windows环境下.nvmrc好像还不支持,所以nvm相当于不能用。然后由pnpm管理node版本。
实际测试是可以的。如下图:
pnpm文档截图如下:
不知道这个能不能去增加一下支持?
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"
}
}
}
我理解下来 这个应该是pnpm自己实现的功能 nvmd是改变不了其加载方式的
目前 pnpm 是支持自己去管理和应用项目运行时的 Node.js 的版本的。
当运行子项目命令时(比如:pnpm -F <子项目名> start ),没有办法去介入更改其默认行为,不过可以考虑加入一个功能:通过环境变量来指定 Node.js 的版本 NVMD_NODE_VERSION,这样你可以使用 cross-env NVMD_NODE_VERSION=20.12.2 pnpm -F <子项目名> start 来运行项目了。