Files
helios-evcs/apps/csms/esbuild.config.js

62 lines
1.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import esbuild from 'esbuild'
import fs from 'fs'
import path from 'path'
const isProduction = process.env.NODE_ENV === 'production'
// 读取 package.json 中的所有依赖
const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf-8'))
const allDeps = {
...packageJson.dependencies,
...packageJson.devDependencies,
}
// 开发模式将依赖标记为 external 以加快构建速度;
// 生产模式全部打包进 bundlerunner 阶段无需 node_modules。
const externalModules = isProduction ? [] : Object.keys(allDeps)
const config = {
entryPoints: ['src/index.ts'],
bundle: true,
platform: 'node',
target: 'esnext',
format: 'esm',
outfile: 'dist/index.js',
external: externalModules,
sourcemap: !isProduction,
minify: isProduction,
// CJS 包(如 dotenv在 ESM bundle 中需要 require 支持
banner: isProduction
? {
js: `import{createRequire}from'module';const require=createRequire(import.meta.url);`,
}
: {},
define: {
'process.env.NODE_ENV': `"${process.env.NODE_ENV || 'development'}"`,
},
}
async function build() {
try {
console.log('Building with esbuild...')
await esbuild.build(config)
// 生成 package.json
const packageJson = { type: 'module' }
fs.mkdirSync(path.dirname('dist/package.json'), { recursive: true })
fs.writeFileSync('dist/package.json', JSON.stringify(packageJson, null, 2))
console.log('✓ Build complete!')
console.log(` Entry: ${config.entryPoints[0]}`)
console.log(` Output: ${config.outfile}`)
console.log(` Mode: ${isProduction ? 'production' : 'development'}`)
console.log(
` Size: ${(fs.statSync(config.outfile).size / 1024).toFixed(1)}KB`,
)
} catch (error) {
console.error('✗ Build failed:', error.message)
process.exit(1)
}
}
build()