vue-mini / create-vue-mini

🛠️ 创建 Vue Mini 小程序项目的最佳方案。
MIT License
41 stars 14 forks source link

feat: 支持 monorepo 项目 #17

Closed cubxx closed 3 months ago

cubxx commented 3 months ago

v1.2.1 my-monorepo/ ├── packages/ │ ├── vue-mini/ │ │ ├── package.json │ │ └── index.js │ ├── shared/ │ │ ├── package.json │ │ └── index.js ├── node_modules/ └── package.json

vue-mini 是我的小程序项目根目录,也是在这里执行小程序的打包 目前无法识别子包路径,rollup 找不到 'shared' 模块 而 v1.2.2 似乎也是默认从项目根目录下查找 node_modules 的,对于 Monorepo 项目这可能不太合适 但是 v1.2.1 可以从 ../../node_modules 查找 node 包,具体原因我没细看

我尝试用 vite 在其他子项目(比如web前端)中打包,发现 vite 可以自动识别 monorepo 子包,并正常打包

解决方案:

  1. build.js 也许可以专门做成 vite 插件
  2. 如果在项目 package.json 中发现某些包为 'workspace:*' ,则将该包和本项目视为 monorepo 中的子包,并从 ../../node_modules 查找 node 包
  3. 补偿方案(仅对 v1.2.1 有效):向 babel 配置添加子包路径别名(比如:shared: '../../shared')

最后建议为 build.js 文件加上版本号注释,方便提 issue 时附上版本号

cubxx commented 3 months ago

bun-demo.zip 这是一个使用bun的最小复现,v1.2.1

yangmingshan commented 3 months ago

你给的 demo 我用 pnpm 可以正常 build

yangmingshan commented 3 months ago

你的 demo 是用的 create-vue-mini v1.2.1,用 bun 或 pnpm 都可以正常 build

将 build.js 升级到 create-vue-mini v1.2.2 之后,pnpm 可以正常 build,bun 会报错。因为它们 workspaces 的实现不同,bun 会将所有 node_modules 提升到最顶部。

如果可以,你可以先换成 pnpm

yangmingshan commented 3 months ago

create-vue-mini v1.2.3 已修复。

yangmingshan commented 3 months ago

最后建议为 build.js 文件加上版本号注释,方便提 issue 时附上版本号

好提议,昨天忘了。从下个版本开始加上。

cubxx commented 3 months ago

最后建议为 build.js 文件加上版本号注释,方便提 issue 时附上版本号

好提议,昨天忘了。从下个版本开始加上。

如果可以的话,感觉也可以附上最新版的文件链接,这样更新也方便些:

/**
 * @version 1.2.3
 * @see https://github.com/vue-mini/create-vue-mini/blob/main/template/typescript/build.js
 */
cubxx commented 3 months ago

可能这个issue需要重开,v1.2.3无法resolve ts模块,也不能对ts模块进行打包。 在monorepo项目中,对其他子包(如:shared)打包的情况会很常见。

解决办法: 1)配置 resolve 插件识别 ts 扩展名,以及向 rollup 添加打包 ts 的插件。但可能引入更多潜在问题 2)先在 shared 子包中自行打包,生成 .js 文件。但会增加项目维护成本,而且无法监听文件变化

yangmingshan commented 3 months ago

这是符合预期的,每个子包需要自行 build,这是 monorepo 的标准做法。