PackConfig 是软件包打包配置接口,用于将服务的构建产物打包成标准的 npm .tgz 格式软件包。
interface PackConfig {
enable?: boolean;
outputs?: string | string[] | boolean;
packageJson?: (esmx: Esmx, pkg: Record<string, any>) => Promise<Record<string, any>>;
onBefore?: (esmx: Esmx, pkg: Record<string, any>) => Promise<void>;
onAfter?: (esmx: Esmx, pkg: Record<string, any>, file: Buffer) => Promise<void>;
}是否启用打包功能。启用后会将构建产物打包成标准的 npm .tgz 格式软件包。
booleanfalse指定输出的软件包文件路径。支持以下配置方式:
string: 单个输出路径,如 'dist/versions/my-app.tgz'string[]: 多个输出路径,用于同时生成多个版本boolean: true 时使用默认路径 'dist/client/versions/latest.tgz'自定义 package.json 内容的回调函数。在打包前调用,用于自定义 package.json 的内容。
esmx: Esmx - Esmx 实例pkg: Record<string, any> - 原始的 package.json 内容Promise<Record<string, any>> - 修改后的 package.json 内容常见用途:
示例:
packageJson: async (esmx, pkg) => {
pkg.name = 'my-app';
pkg.version = '1.0.0';
pkg.description = '我的应用';
pkg.dependencies = {
'vue': '^3.0.0',
'express': '^4.17.1'
};
pkg.publishConfig = {
registry: 'https://registry.example.com'
};
return pkg;
}打包前的准备工作回调函数。
esmx: Esmx - Esmx 实例pkg: Record<string, any> - package.json 内容Promise<void>常见用途:
示例:
onBefore: async (esmx, pkg) => {
await fs.writeFile('dist/README.md', '# My App');
await fs.writeFile('dist/LICENSE', 'MIT License');
await runTests();
await generateDocs();
await cleanupTempFiles();
}打包完成后的处理回调函数。在 .tgz 文件生成后调用,用于处理打包产物。
esmx: Esmx - Esmx 实例pkg: Record<string, any> - package.json 内容file: Buffer - 打包后的文件内容Promise<void>常见用途:
示例:
onAfter: async (esmx, pkg, file) => {
await publishToRegistry(file, {
registry: 'https://registry.example.com'
});
await uploadToServer(file, 'https://assets.example.com/packages');
await createGitTag(pkg.version);
await triggerDeploy(pkg.version);
}import type { EsmxOptions } from '@esmx/core';
export default {
modules: {
exports: [
'root:src/components/button.vue',
'root:src/utils/format.ts',
'pkg:vue',
'pkg:vue-router'
]
},
packs: {
enable: true,
outputs: [
'dist/versions/latest.tgz',
'dist/versions/1.0.0.tgz'
],
packageJson: async (esmx, pkg) => {
pkg.version = '1.0.0';
return pkg;
},
onBefore: async (esmx, pkg) => {
await fs.writeFile('dist/README.md', '# Your App\n\n模块导出说明...');
await runTypeCheck();
},
onAfter: async (esmx, pkg, file) => {
await publishToRegistry(file, {
registry: 'https://npm.your-registry.com/'
});
await uploadToServer(file, 'https://static.example.com/packages');
}
}
} satisfies EsmxOptions;