From 8e702586d5668387fb7bf03b2e826d92ddc13b52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=89=E9=9E=8B=E6=B2=A1=E5=8F=B7?= <308487730@qq.com> Date: Tue, 1 Mar 2022 19:08:06 +0800 Subject: [PATCH] vite-plugin-esm2cjs --- packages/main/vite.config.ts | 7 ++++++ scripts/vite-plugin-esm2cjs.ts | 40 ++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 scripts/vite-plugin-esm2cjs.ts diff --git a/packages/main/vite.config.ts b/packages/main/vite.config.ts index 9f5e378..c510a5b 100644 --- a/packages/main/vite.config.ts +++ b/packages/main/vite.config.ts @@ -1,9 +1,16 @@ import { builtinModules } from 'module' import { defineConfig } from 'vite' +import esm2cjs from '../../scripts/vite-plugin-esm2cjs' import pkg from '../../package.json' export default defineConfig({ root: __dirname, + plugins: [ + esm2cjs([ + 'execa', + 'node-fetch', + ]), + ], build: { outDir: '../../dist/main', lib: { diff --git a/scripts/vite-plugin-esm2cjs.ts b/scripts/vite-plugin-esm2cjs.ts new file mode 100644 index 0000000..09496f6 --- /dev/null +++ b/scripts/vite-plugin-esm2cjs.ts @@ -0,0 +1,40 @@ +import { builtinModules } from 'module' +import { Plugin, build } from 'vite' +import resolve from 'vite-plugin-resolve' + +export default function esm2cjs(modules: string[]): Plugin { + return resolve({ + ...modules.reduce((memo, moduleId) => Object.assign(memo, { + async [moduleId](args) { + await build({ + plugins: [ + { + name: 'vite-plugin[node:mod-to-mod]', + enforce: 'pre', + resolveId(source) { + if (source.startsWith('node:')) { + return source.replace('node:', '') + } + }, + } + ], + build: { + outDir: args.dir, + minify: false, + emptyOutDir: false, + lib: { + entry: require.resolve(moduleId), + formats: ['cjs'], + fileName: () => `${moduleId}.js`, + }, + rollupOptions: { + external: [ + ...builtinModules, + ], + }, + }, + }) + }, + } as Parameters[0]), {}), + }) +}