构建产物
在CLI
指令解析时,格式化 format 相关配置
if (flags.format) {
const format = ensureArray(flags.format) as Format[]
options.format = format
}
设置在执行构建时,格式化options
传参,默认导出路径为dist
,针对format
格式化
const options: Partial<NormalizedOptions> = {
outDir: 'dist',
..._options,
format:
typeof _options.format === 'string'
? [_options.format as Format]
: _options.format || ['cjs'],
dts:
typeof _options.dts === 'boolean'
? _options.dts
? {}
: undefined
: typeof _options.dts === 'string'
? { entry: _options.dts }
: _options.dts,
}
格式化后,在runEsbuild
方法中,传给esbuild
的format
方法。
esbuild({
entryPoints: options.entry,
format: (format === 'cjs' && splitting) || options.treeshake ? 'esm' : format,
})
针对--legacy-output
,也在esbuild
中进行对应配置,针对非CJS
模式创建对应的文档目录。
esbuild({
outdir:
options.legacyOutput && format !== 'cjs'
? path.join(outDir, format)
: outDir,
outExtension: options.legacyOutput ? undefined : outExtension,
})
const outExtension = getOutputExtensionMap(options, format, pkg.type)
const getOutputExtensionMap = (
options: NormalizedOptions,
format: Format,
pkgType: string | undefined
) => {
const outExtension: OutExtensionFactory =
options.outExtension || defaultOutExtension
const defaultExtension = defaultOutExtension({ format, pkgType })
const extension = outExtension({ options, format, pkgType })
return {
'.js': extension.js || defaultExtension.js,
}
}