| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- 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()
- ]
- });
|