如何为@nrwl/esbuild:esbuild配置两个入口以生成两个.cjs包?
实现多入口生成多个.cjs文件的可行方案
方案1:配置多个独立ESBuild Target
在project.json中为每个入口文件单独定义@nrwl/esbuild:esbuild target,分别指定入口与输出路径:
{ "targets": { "build-main": { "executor": "@nrwl/esbuild:esbuild", "options": { "main": "src/main-thread.ts", "outputPath": "dist/main", "format": ["cjs"], "platform": "node", "bundle": true } }, "build-worker": { "executor": "@nrwl/esbuild:esbuild", "options": { "main": "src/worker-thread.ts", "outputPath": "dist/worker", "format": ["cjs"], "platform": "node", "bundle": true } }, "build": { "dependsOn": ["build-main", "build-worker"] } } }
执行nx build会同时触发两个target,生成各自独立的.cjs文件,彻底分离主线程与工作线程代码。
方案2:使用自定义ESBuild配置文件
若需要复用配置逻辑,可创建独立的ESBuild配置文件,在project.json中指定config字段调用:
{ "targets": { "build-main": { "executor": "@nrwl/esbuild:esbuild", "options": { "config": "esbuild.main.config.js" } }, "build-worker": { "executor": "@nrwl/esbuild:esbuild", "options": { "config": "esbuild.worker.config.js" } } } }
esbuild.main.config.js示例(完全遵循ESBuild原生配置规范):
module.exports = { entryPoints: ['src/main-thread.ts'], outfile: 'dist/main/index.cjs', format: 'cjs', platform: 'node', bundle: true };
这种方式可以绕开Nx封装的限制,直接使用ESBuild官网的所有配置选项。
关键注意事项
- 确保不同target的
outputPath不重叠,避免文件覆盖 - 若需共享依赖缓存,可在target配置中添加
cacheableOperations字段 - 执行单个target用
nx run <project>:build-main,批量执行用nx build
内容的提问来源于stack exchange,提问作者serlingpa
相关产品推荐
相关产品推荐

