Closed bingtsingw closed 1 year ago
查了好久资料, 找到一个可能可行的解决方案:
pnpm
提供了一个命令pnpm deploy
来解决在monorepo
安装包的链接问题: https://pnpm.io/cli/deploy,
所以在pnpm monorepo
项目里构建malagu build
时, 应该用pnpm deploy
代替pnpm install
, 我们可以用--filter
选项来开启这个功能
malagu.yml
packager: pnpm
malagu:
packagerOptions:
filter: @mono/api
执行如下流程代替 pnpm install --filter @mono/api
pnpm --filter @mono/api --prod deploy .pnpm-deploy-target
cp -R .pnpm-deploy-target/node_modules .
rm -rf .pnpm-deploy-target
不过在pnpm workspace
里, 不管是执行install
还是deploy
, packExternalModules
过程实际上是无效的, 因为它不会从生成的.malagu/dist/backend/package.json
文件去读取信息, 而是总会从@packages/**/package.json
文件读取信息
一个典型的monorepo项目结构如下:
如果在
apps/api
目录下运行malagu build
, 会在apps/api/.malagu/dist/backend
目录下构建并运行pnpm install
, 但是由于是在workspace
环境里执行的pnpm install
, 所以node_modules
里的包会链接到{workspaceRoot}/node_modules/.pnpm
目录, 无法打包上传到服务器.