Skip to content

Commit

Permalink
Merge pull request #37 from electron-vite/v0.13.2
Browse files Browse the repository at this point in the history
V0.13.2
  • Loading branch information
caoxiemeihao authored Mar 21, 2023
2 parents 6748af8 + 47801e3 commit caffb1e
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 7 deletions.
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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)

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
33 changes: 28 additions & 5 deletions src/optimizer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -109,18 +109,41 @@ 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<Record<string, string>>(pkg.exports)) {
if (_export.import) {
// { "exports": { ".": { "import": "main.mjs" } } }
moduleType = 'module'
break
}
}
}
}
}

const userType = await resolve?.(args)
if (userType === false) {
// 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 {
Expand Down

0 comments on commit caffb1e

Please sign in to comment.