基于Yarn Workspaces与TypeScript的共享库构建及部署疑问
解决方案:无需Webpack,仅用Yarn Workspaces + TypeScript即可实现需求
解决「修改lib需手动重新构建」的问题
- 在
/lib/package.json中添加监听编译脚本:"scripts": { "dev": "tsc --watch" } - 在
/api/package.json中用并发工具(如concurrently)同时启动lib的监听编译和api的开发服务:
这样修改lib源码时,TypeScript会自动增量编译,api服务也会自动重启。"scripts": { "dev": "concurrently \"yarn workspace @myproject/lib dev\" \"nodemon --watch src --watch ../lib/src dist/index.js\"" }
解决「api编译后依赖本地lib路径,部署Heroku失败」的问题
核心思路是让api直接编译lib的源码,而非引用lib的构建产物,最终将lib代码打包进/api/build:
- 修改
/api/tsconfig.json,配置路径映射与文件包含:{ "compilerOptions": { "baseUrl": ".", "paths": { "@myproject/lib": ["../lib/src"] // 直接指向lib源码目录 }, "outDir": "./build", // 其他TS配置... }, "include": [ "src/**/*", "../lib/src/**/*" // 包含lib的源码文件 ] } - 确保
/lib/package.json中不要设置main或types指向build目录(或者让api的tsconfig路径映射覆盖这个配置)。 - 编译api时,直接在
/api目录执行tsc,TypeScript会把lib的源码和api代码一起编译到/api/build,生成的文件不再依赖本地lib路径。
为什么Expo能自动实现?
Expo使用的Metro打包器默认支持Yarn Workspaces的源码依赖,会自动将工作区中的源码打包进客户端bundle,无需额外配置。
是否需要Webpack?
不需要。仅通过上述Yarn Workspaces和TypeScript的配置,就能满足你的需求。如果后续有更复杂的打包需求(如代码分割、资源压缩等),再考虑引入Webpack即可。
内容的提问来源于stack exchange,提问作者samala7800
相关产品推荐
相关产品推荐

