Skip to content

Commit 72ed6df

Browse files
authored
Merge pull request #9 from vite-plugin/v1.4.3
V1.4.3
2 parents 649c6cc + ca823bc commit 72ed6df

File tree

12 files changed

+10530
-41
lines changed

12 files changed

+10530
-41
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,5 @@ dist
109109
package-lock.json
110110
pnpm-lock.yaml
111111
yarn.lock
112+
113+
/index.mjs

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
## [2022-10-17] v1.4.3
2+
3+
- e9201bf v1.4.3
4+
- e28a9f9 docs: v1.4.3
5+
- 2bd756b feat: add test
6+
- 6f2266c feat: support `"type": "module"`
7+
- bddbc85 refactor: use lib-esm
8+
- 8b905b3 fix(#8): type define
19

210
## [2022-07-26] v1.4.2
311

README.md

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,19 @@ console.log(stdout);
5050

5151
<!-- [👉 See test](https://github.com/vite-plugin/vite-plugin-esmodule/test) -->
5252

53-
## API
53+
## API <sub><sup>(Define)</sup></sub>
5454

5555
`esmodule(modules[, webpack])`
5656

5757
```ts
58-
import type { Plugin } from 'vite'
5958
import type { Configuration } from 'webpack'
6059

61-
export type ModuleRecord = string | { [module: string]: string }
60+
type ModuleRecord = string | { [module: string]: string }
6261

63-
declare function exports(
62+
function esmodule(
6463
modules: ModuleRecord[] | ((esmPkgs: string[]) => ModuleRecord[]),
6564
webpack?: ((config: Configuration) => Configuration | void | Promise<Configuration | void>),
66-
): Plugin
67-
68-
export = exports
65+
): import('vite').Plugin
6966
```
7067

7168
## How to work

build.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const fs = require('fs');
2+
const path = require('path');
3+
const libEsm = require('lib-esm');
4+
5+
// const iswatch = process.argv.slice(2).includes('--watch');
6+
7+
const filename = path.join(__dirname, 'index.js');
8+
const destname = filename.replace('.js', '.mjs');
9+
const result = libEsm({ require: './index.js', exports: Object.keys(require('.')) });
10+
fs.writeFileSync(destname, `${result.require}\n${result.exports}`);
11+
12+
console.log('build success');

index.d.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
import type { Plugin } from 'vite'
2-
import type { Configuration } from 'webpack'
1+
declare module 'vite-plugin-esmodule' {
2+
import type { Configuration } from 'webpack'
33

4-
export type ModuleRecord = string | { [module: string]: string }
4+
type ModuleRecord = string | { [module: string]: string }
55

6-
declare function exports(
7-
modules: ModuleRecord[] | ((esmPkgs: string[]) => ModuleRecord[]),
8-
webpack?: ((config: Configuration) => Configuration | void | Promise<Configuration | void>),
9-
): Plugin
6+
function esmodule(
7+
modules: ModuleRecord[] | ((esmPkgs: string[]) => ModuleRecord[]),
8+
webpack?: ((config: Configuration) => Configuration | void | Promise<Configuration | void>),
9+
): import('vite').Plugin
1010

11-
export = exports
11+
// https://www.typescriptlang.org/docs/handbook/declaration-files/templates/module-d-ts.html#default-exports
12+
export = esmodule
13+
}

index.js

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ const fs = require('fs');
22
const path = require('path');
33
const webpack = require('webpack');
44
const optimizer = require('vite-plugin-optimizer');
5+
const libEsm = require('lib-esm');
56

67
const PLUGIN_NAME = 'vite-plugin-esmodule';
78
const CACHE_DIR = `.${PLUGIN_NAME}`;
89

910
/**
1011
* @type {import('.')}
1112
*/
12-
module.exports = function esmodule(modules, webpackFn) {
13+
function esmodule(modules, webpackFn) {
1314
/**
1415
* @type {import('vite').ConfigEnv}
1516
*/
@@ -43,7 +44,7 @@ module.exports = function esmodule(modules, webpackFn) {
4344
}
4445

4546
if (!Array.isArray(modules)) {
46-
throw new Error(`(modules) expects an array, but got: ${modules}`);
47+
throw new Error(`[vite-plugin-esmodule] esmodule(modules) expects an array, but got: ${modules}`);
4748
}
4849

4950
/**
@@ -155,27 +156,22 @@ function logError(error, exit = true) {
155156
}
156157

157158
/**
158-
* @type {(args: import('vite-plugin-optimizer').OptimizerArgs, ...args: Parameters<import('.').Esmodule>) => Promise<void>}
159+
* @type {(options: import('vite-plugin-optimizer').OptimizerArgs, ...args: Parameters<import('vite-plugin-esmodule')>) => Promise<void>}
159160
*/
160-
function writeElectronRendererServeESM(args, modules) {
161+
function writeElectronRendererServeESM(options, modules) {
161162
for (const mod of modules) {
162163
const moduleName = typeof mod === 'object' ? Object.keys(mod)[0] : mod
163-
const { cjsId, electronRendererId } = getModuleId(path.join(args.dir, moduleName));
164-
165-
// 🚧 For Electron-Renderer
166-
const cjsModule = require(cjsId);
167-
const requireModule = `const _M_ = require("${CACHE_DIR}/${moduleName}");`;
168-
const exportDefault = `const _D_ = _M_.default || _M_;\nexport { _D_ as default };`;
169-
const exportMembers = Object
170-
.keys(cjsModule)
171-
.filter(n => n !== 'default')
172-
.map(attr => `export const ${attr} = _M_.${attr};`).join('\n')
173-
const esmModuleCodeSnippet = `
174-
${requireModule}
175-
${exportDefault}
176-
${exportMembers}
177-
`.trim();
178-
fs.writeFileSync(electronRendererId, esmModuleCodeSnippet);
164+
const { cjsId, electronRendererId } = getModuleId(path.join(options.dir, moduleName));
165+
const result = libEsm({
166+
require: `${CACHE_DIR}/${moduleName}`,
167+
exports: Object.keys(require(cjsId)),
168+
});
169+
170+
fs.writeFileSync(
171+
ensureDir(electronRendererId),
172+
// `const _M_ = require("${CACHE_DIR}/${moduleName}");\n${result.exports}`,
173+
`const _M_ = require("./index.js");\n${result.exports}`,
174+
);
179175
}
180176
}
181177

@@ -200,3 +196,18 @@ function lookupFile(filename, paths) {
200196
}
201197
}
202198
}
199+
200+
function ensureDir(filename) {
201+
const dirname = path.dirname(filename);
202+
!fs.existsSync(dirname) && fs.mkdirSync(dirname, { recursive: true });
203+
return filename;
204+
}
205+
206+
esmodule.__test__ = {
207+
CACHE_DIR,
208+
ensureDir,
209+
getModuleId,
210+
writeElectronRendererServeESM,
211+
};
212+
213+
module.exports = esmodule;

package.json

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
{
22
"name": "vite-plugin-esmodule",
3-
"version": "1.4.2",
3+
"version": "1.4.3",
44
"description": "Build ES module to CommonJs module for Node.js/Electron",
55
"main": "index.js",
6+
"exports": {
7+
".": {
8+
"import": "./index.mjs",
9+
"require": "./index.js"
10+
}
11+
},
612
"scripts": {
7-
"test": "echo \"Error: no test specified\" && exit 1"
13+
"build": "node build.js",
14+
"test": "node test/index.js",
15+
"prepublishOnly": "npm run build"
816
},
917
"repository": {
1018
"type": "git",
@@ -26,10 +34,17 @@
2634
},
2735
"homepage": "https://github.com/vite-plugin/vite-plugin-esmodule#readme",
2836
"dependencies": {
29-
"vite-plugin-optimizer": "^1.3.4",
30-
"webpack": "^5.73.0"
37+
"lib-esm": "~0.2.0",
38+
"vite-plugin-optimizer": "~1.4.1",
39+
"webpack": "^5.74.0"
3140
},
3241
"devDependencies": {
33-
"vite": "^2.9.9"
34-
}
42+
"got": "^12.5.2",
43+
"vite": "^3.2.0-beta.2"
44+
},
45+
"files": [
46+
"index.js",
47+
"index.mjs",
48+
"index.d.ts"
49+
]
3550
}

test/-.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import got from 'got'
2+
3+
console.log(got)

test/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/-.mjs
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const _M_ = require("./index.js");
2+
export const AbortError = _M_.AbortError;
3+
export const CacheError = _M_.CacheError;
4+
export const CancelError = _M_.CancelError;
5+
export const HTTPError = _M_.HTTPError;
6+
export const MaxRedirectsError = _M_.MaxRedirectsError;
7+
export const Options = _M_.Options;
8+
export const ParseError = _M_.ParseError;
9+
export const ReadError = _M_.ReadError;
10+
export const RequestError = _M_.RequestError;
11+
export const RetryError = _M_.RetryError;
12+
export const TimeoutError = _M_.TimeoutError;
13+
export const UploadError = _M_.UploadError;
14+
export const calculateRetryDelay = _M_.calculateRetryDelay;
15+
export const create = _M_.create;
16+
export const keyword_default = _M_.default || _M_;
17+
export const got = _M_.got;
18+
export const isResponseOk = _M_.isResponseOk;
19+
export const parseBody = _M_.parseBody;
20+
export const parseLinkHeader = _M_.parseLinkHeader;
21+
export {
22+
keyword_default as default,
23+
};

0 commit comments

Comments
 (0)