import { defineConfig } from 'rolldown'; import path from "path"; import dotenv from 'dotenv'; // 加载 .env 文件 const define = { 'process.env.NODE_ENV': '"production"' } const env = dotenv.config({ path: path.resolve('.env') }).parsed; for (const key in env) { define[`process.env.${key}`] = JSON.stringify(env[key]); } const env_production = dotenv.config({ path: path.resolve('.env.production') }).parsed; for (const key in env_production) { define[`process.env.${key}`] = JSON.stringify(env_production[key]); } console.log({define}) const entryFile = 'src/index.ts'; function injectRequireEvalShim() { const shimCode = ` if (!globalThis.eval) { globalThis.eval = (code) => { console.log({code}) const fn = new Function("import { createRequire } from 'module';\\nconst require = createRequire(import.meta.url);\\n" + code); return fn(); }; } `; return { name: 'inject-require-eval-shim', transform(code, id) { const entryFilePath = path.resolve(entryFile); if (id !== entryFilePath) { return null; } // 把 shim 代码注入入口文件最前面 return { code: shimCode + '\n' + code, map: null, }; }, }; } function injectCodeInBundlePlugin() { return { name: 'inject-code-in-bundle', generateBundle(options, bundle) { // 遍历所有生成的文件 for (const [fileName, chunkOrAsset] of Object.entries(bundle)) { // 只处理 JS chunk(即打包后的代码文件) if (chunkOrAsset.type === 'chunk') { // 在代码开头注入代码 const injectCode = ` if (!globalThis.eval) { globalThis.eval = (code) => { console.log({code}) const fn = new Function("import { createRequire } from 'module';\\nconst require = createRequire(import.meta.url);\\n" + code); return fn(); }; } `; // 修改代码内容 chunkOrAsset.code = injectCode + chunkOrAsset.code; } } }, }; } export default defineConfig({ input: entryFile, output: { format: 'esm', dir: 'dist', }, platform: 'node', resolve: { tsconfigFilename: 'tsconfig.json' }, define, plugins: [ // injectRequireEvalShim() // injectCodeInBundlePlugin() ] });