diff --git a/CHANGELOG.md b/CHANGELOG.md index dd96c1e..8fc8c70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ +## 0.13.2 (2023-03-21) + +- 7cc1abd refactor: better module type detect + ## 0.13.1 (2023-03-21) -893e361 refactor!: improve Pre-Bundling #35 +- 893e361 refactor!: improve Pre-Bundling #35 ## 0.13.0 (2023-03-20) diff --git a/package.json b/package.json index 61ba97d..f5eeec8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vite-plugin-electron-renderer", - "version": "0.13.1", + "version": "0.13.2", "description": "Support use Node.js API in Electron-Renderer", "main": "index.mjs", "types": "types", diff --git a/src/optimizer.ts b/src/optimizer.ts index 4e73d85..794829c 100644 --- a/src/optimizer.ts +++ b/src/optimizer.ts @@ -22,12 +22,12 @@ export interface optimizerOptions { * * - `false` Vite's default Pre-Bundling will be used. */ - resolve?: (args: import('esbuild').OnResolveArgs) => 'commonjs' | 'module' | false | null | undefined | Promise<'commonjs' | 'module' | false | null | undefined> + resolve?: (args: import('esbuild').OnResolveArgs) => { type: 'commonjs' | 'module' } | false | void | Promise<{ type: 'commonjs' | 'module' } | false | void> } export default function optimizer(options: optimizerOptions, nodeIntegration: boolean): VitePlugin { return { - name: 'vite-plugin-electron-renderer:pre-bundle', + name: 'vite-plugin-electron-renderer:optimizer', config(config) { node_modules_path = find_node_modules(config.root ? path.resolve(config.root) : process.cwd())[0] cache_dir = path.join(node_modules_path, CACHE_DIR) @@ -109,7 +109,27 @@ export function esbuildPlugin(options: optimizerOptions): EsbuildPlugin { let moduleType: 'commonjs' | 'module' | undefined const packageJson = path.join(node_modules_path, id, 'package.json') if (fs.existsSync(packageJson)) { - moduleType = cjs_require(packageJson).type === 'module' ? 'module' : 'commonjs' + const pkg = cjs_require(packageJson) + if (pkg.type) { + // { "type": "module" } + moduleType = pkg.type === 'module' ? 'module' : 'commonjs' + } else if (pkg.module) { + // { "module": "main.mjs" } + moduleType = 'module' + } else if (pkg.exports) { + if (pkg.exports.import) { + // { "exports": { "import": "main.mjs" } } + moduleType = 'module' + } else { + for (const _export of Object.values>(pkg.exports)) { + if (_export.import) { + // { "exports": { ".": { "import": "main.mjs" } } } + moduleType = 'module' + break + } + } + } + } } const userType = await resolve?.(args) @@ -117,10 +137,13 @@ export function esbuildPlugin(options: optimizerOptions): EsbuildPlugin { // Use Vite's default Pre-Bundling return } - if (userType === 'commonjs' || userType === 'module') { - moduleType = userType + if (userType && typeof userType === 'object') { + moduleType = userType.type } + // Assign default value + moduleType ??= 'commonjs' + // Only `cjs` modules, especially C/C++ npm-pkg, `es` modules will be use Vite's default Pre-Bundling if (moduleType === 'commonjs') { return {