最近在做的一个项目, 需求大家看来可能是有点奇怪的; 一开始是里面有一个服务, 后面想多个服务同时运行, 然后就使用了最笨的版本, 先复制了一份出来, 后面后搞了两个服务, 加起来有四个了, 一些代码需求修改就比较扯, 多出修改还容易漏, 然后就想有没有可以把通用的搞成base然后其他的来引用好了, 然后就看到了menorepo, 然后了解到了 turborepo, 再然后是pnpm的workspace概念, 看到这个我熟啊... xcode创建的工程 使用 pod init 后就会多出一个 *.xcworkspace, 这个可能是我最早使用workspace的概念了, 一度影响我的代码都是在电脑中一个 workspace的文件夹中的
前面初始化的地方我后面再补, 说几个遇到的问题然后又看了别人的方案如何去解决的; 这里得先提一下阿里的 umijs, 虽然大家对阿里开源的东西比较不信任, 但是umi这一套还真是不错的, 代码生成有 umi g, 后面更新到了单独的 @umijs/max, 变成了 max g, 今天在写代码生成时就想抄一下, 好家伙, 一开一层一层的, 竟然就是 turborepo的方案, 大喜
抄作业开始了,
- 我的业务代码是使用的typescript 写的, 主工程是使用的fastify的脚手架创建的项目, 主工程是cjs, 我之前开发的时间是 使用 watch + tsc即时编译, 然后编译出的js就在同级目录下所以也没有什么问题(后面再看这样就很丑, 应该放到 dist 目录再引用的), 但是抽离模块后, 我一开始 在模块的 idnex.js 全部 export * from '.src/...' 后发现 报module not found 问题, 然后我lib的package.json 中 "main": "index.js", 这个main是给 cjs用的, 然后我export 又用的是 ejs的方式, 当然不行了..., 然后又看 ant-design 组件的导出, 发现是遍历导出的, 我也这样搞了下勉强能用了, 但是每次我本次搞完, 还要编译下在把编译的代码也上传, 就很别扭
然后看了 umijs 中的实现是 只编译出cjs, 因为cjs的lib ejs是可以直接使用的, 然后我就修改了我的 tsconfig.json, 改变了输入输出