一个基于 esbuild 的快速 JavaScript/TypeScript 库打包器
- 基于 esbuild
- 支持 CommonJS、ESM、IIFE 格式
- 内置 TypeScript 支持
- 文件变化自动重新构建
- glob 模式匹配入口文件
# 全局安装
pnpm add -g @elecmonkey/empacker
# 或在项目中安装
pnpm add -D @elecmonkey/empacker
# 初始化配置文件
empacker init
# 构建项目
empacker build
# 监听模式
empacker watch
# 直接指定入口文件构建
empacker build -e src/index.ts -o dist
创建 empacker.config.js
或 empacker.config.ts
,参考 配置示例。
import { Empacker } from 'empacker';
const bundler = new Empacker({
entry: 'src/index.ts',
outdir: 'dist',
format: 'esm',
minify: true
});
// 构建
const result = await bundler.build();
console.log('构建结果:', result);
// 监听模式
await bundler.watch();
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
entry |
string | string[] |
- | 入口文件路径,支持 glob 模式 |
outdir |
string |
'dist' |
输出目录 |
outfile |
string |
- | 输出文件名(与 outdir 二选一) |
format |
'cjs' | 'esm' | 'iife' |
'esm' |
输出格式 |
bundle |
boolean |
true |
是否打包成单个文件 |
sourcemap |
boolean |
false |
是否生成 source map |
minify |
boolean |
true |
是否压缩代码 |
dts |
boolean |
false |
是否生成 TypeScript 声明文件 |
external |
string[] |
[] |
外部依赖列表 |
watch |
boolean |
false |
是否启用监听模式 |
esbuildOptions |
Partial<BuildOptions> |
{} |
自定义 esbuild 配置 |
构建项目
empacker build [options]
选项:
-c, --config <config> 配置文件路径
-e, --entry <entry> 入口文件
-o, --outdir <outdir> 输出目录
--outfile <outfile> 输出文件名
-f, --format <format> 输出格式 (cjs|esm|iife)
--bundle 打包成单个文件
--no-bundle 不打包,保持文件结构
--sourcemap 生成 source map
--no-sourcemap 不生成 source map
--minify 压缩代码
--no-minify 不压缩代码
--dts 生成 TypeScript 声明文件
--external <external...> 外部依赖
监听文件变化并自动构建
empacker watch [options]
选项: (与 build 命令相同)
创建配置文件
empacker init [options]
选项:
-f, --format <format> 配置文件格式 (js|ts|json)
empacker build -e src/index.ts --outfile dist/bundle.js --minify
// empacker.config.js
export default {
entry: ['src/index.ts', 'src/worker.ts'],
outdir: 'dist',
format: 'esm'
};
// empacker.config.js
export default {
entry: 'src/**/*.ts',
outdir: 'dist',
external: ['react']
};
// empacker.config.js
export default {
entry: 'src/index.ts',
outdir: 'dist',
esbuildOptions: {
target: 'es2020',
platform: 'browser',
define: {
'process.env.NODE_ENV': '"production"'
}
}
};
// empacker.config.js
export default {
entry: 'src/**/*.ts',
outdir: 'dist',
format: 'esm',
bundle: false, // 不打包,保持原有文件结构
dts: true, // 同时生成声明文件
external: ['react']
};
// empacker.config.js
export default {
entry: 'src/index.ts',
outdir: 'dist',
format: 'esm',
bundle: true,
minify: true,
dts: true, // 生成 .d.ts 文件
external: ['lodash']
};
创建 empacker.config.ts
:
import type { EmpackerConfig } from 'empacker';
const config: EmpackerConfig = {
entry: 'src/index.ts',
outdir: 'dist',
format: 'esm',
bundle: true,
sourcemap: false,
minify: true,
dts: true,
external: ['react', 'react-dom']
};
export default config;
import type { EmpackerConfig } from 'empacker';
const config: EmpackerConfig = {
// 多任务配置
tasks: [
{
name: 'main',
entry: 'src/index.ts',
outdir: 'dist',
format: 'esm',
bundle: true,
minify: true,
dts: true,
external: ['react']
},
{
name: 'cli',
entry: 'src/cli.ts',
outfile: 'dist/cli.cjs',
format: 'cjs',
bundle: true,
minify: true,
external: ['commander', 'chalk']
}
]
};
export default config;
主要的打包器类
创建打包器实例
执行构建
启动监听模式
加载配置文件
创建默认配置文件内容
合并配置
MIT