@tomjs/vite-plugin-electron 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,10 +2,19 @@
2
2
 
3
3
  [![npm](https://img.shields.io/npm/v/@tomjs/vite-plugin-electron)](https://www.npmjs.com/package/@tomjs/vite-plugin-electron) ![node-current (scoped)](https://img.shields.io/node/v/@tomjs/vite-plugin-electron) ![NPM](https://img.shields.io/npm/l/@tomjs/vite-plugin-electron) [![Docs](https://www.paka.dev/badges/v0/cute.svg)](https://www.paka.dev/npm/@tomjs/vite-plugin-electron)
4
4
 
5
- > A simple [vite](https://vitejs.dev/) plugin to help [electron](https://www.electronjs.org) apps develop
6
-
7
5
  **English** | [中文](./README.zh_CN.md)
8
6
 
7
+ > A Simple [vite](https://vitejs.dev/) plugin for [electron](https://www.electronjs.org), supports `esm` and `cjs`.
8
+
9
+ ## Features
10
+
11
+ - Fast build `main` and `preload` with [tsup](https://github.com/egoist/tsup)
12
+ - Little configuration, focus on business
13
+ - Support `main`'s `Hot Restart`
14
+ - Support `preload`'s `Hot Reload`
15
+ - Support `esm` and `cjs`, you can use `esm` in [electron v28+](https://www.electronjs.org/blog/electron-28-0)
16
+ - Support `vue` and `react` and [other frameworks](https://vitejs.dev/guide/#trying-vite-online)
17
+
9
18
  ## Install
10
19
 
11
20
  With `pnpm`
package/README.zh_CN.md CHANGED
@@ -2,10 +2,19 @@
2
2
 
3
3
  [![npm](https://img.shields.io/npm/v/@tomjs/vite-plugin-electron)](https://www.npmjs.com/package/@tomjs/vite-plugin-electron) ![node-current (scoped)](https://img.shields.io/node/v/@tomjs/vite-plugin-electron) ![NPM](https://img.shields.io/npm/l/@tomjs/vite-plugin-electron) [![Docs](https://www.paka.dev/badges/v0/cute.svg)](https://www.paka.dev/npm/@tomjs/vite-plugin-electron)
4
4
 
5
- > 一个简单的 [vite](https://cn.vitejs.dev/) 插件,助力 [electron](https://www.electronjs.org/zh/) 应用开发
6
-
7
5
  [English](./README.md) | **中文**
8
6
 
7
+ > 一个简单的 [electron](https://www.electronjs.org/zh/) [vite](https://cn.vitejs.dev/) 插件,支持 `esm` 和 `cjs`
8
+
9
+ ## 特性
10
+
11
+ - 使用 [tsup](https://github.com/egoist/tsup) 快速构建 `main` 和 `preload`
12
+ - 配置简单,专注业务
13
+ - 支持 `main` 的 `热重启`
14
+ - 支持 `preload` 的 `热重载`
15
+ - 支持 `esm` 和 `cjs` ,你可以在 [electron v28+](https://www.electronjs.org/zh/blog/electron-28-0) 中使用 `esm`
16
+ - 支持 `vue` 和 `react` 以及 [其他框架](https://cn.vitejs.dev/guide/#trying-vite-online)
17
+
9
18
  ## 安装
10
19
 
11
20
  使用 `pnpm`
package/dist/index.js CHANGED
@@ -73,7 +73,10 @@ function getBuildOptions(options, innerOpts) {
73
73
  delete env[key];
74
74
  }
75
75
  });
76
- return ["main", "preload"].filter((s) => options[s] && options[s].entry).map((s) => options[s]).map((cfg) => {
76
+ return ["main", "preload"].filter((s) => options[s] && options[s].entry).map((s) => {
77
+ options[s].__NAME__ = s;
78
+ return options[s];
79
+ }).map((cfg) => {
77
80
  return {
78
81
  ...cfg,
79
82
  env,
@@ -93,40 +96,45 @@ function runMainProcess(options, innerOpts) {
93
96
  stdio: "inherit"
94
97
  }).on("exit", exitMainProcess);
95
98
  }
96
- async function runServe(options, innerOpts) {
97
- let electronProcess;
99
+ async function runServe(options, innerOpts, server) {
100
+ let mainProcess;
98
101
  const killProcess = () => {
99
- if (electronProcess) {
100
- electronProcess.off("exit", exitMainProcess);
101
- electronProcess.kill();
102
+ if (mainProcess) {
103
+ mainProcess.off("exit", exitMainProcess);
104
+ mainProcess.kill();
102
105
  }
103
106
  };
104
107
  process.on("exit", () => {
105
108
  killProcess();
106
109
  });
107
- logger.info(`electron server start`);
108
110
  const buildOptions = getBuildOptions(options, innerOpts);
109
111
  for (let i = 0; i < buildOptions.length; i++) {
110
112
  let isFirstBuild = true;
111
113
  const tsOpts = buildOptions[i];
112
- const { onSuccess: _onSuccess, watch, ...tsupOptions } = tsOpts;
113
- logger.info(`electron ${tsOpts.name} process build`);
114
+ const { __NAME__: name, onSuccess: _onSuccess, watch, ...tsupOptions } = tsOpts;
115
+ logger.info(`${name} build`);
114
116
  const onSuccess = async () => {
115
- logger.info(`electron ${tsOpts.name} process build success`);
116
117
  if (typeof _onSuccess === "function") {
117
118
  await _onSuccess();
118
119
  }
119
- logger.success("rebuild succeeded!");
120
120
  if (isFirstBuild) {
121
+ logger.info(`${name} build succeeded`);
121
122
  isFirstBuild = false;
122
123
  return;
123
124
  }
124
- killProcess();
125
- electronProcess = runMainProcess(options, innerOpts);
125
+ logger.success(`${name} rebuild succeeded!`);
126
+ if (name === "main") {
127
+ killProcess();
128
+ mainProcess = runMainProcess(options, innerOpts);
129
+ } else {
130
+ server.ws.send({
131
+ type: "full-reload"
132
+ });
133
+ }
126
134
  };
127
135
  await _tsup.build.call(void 0, { onSuccess, watch: true, ...tsupOptions });
128
136
  }
129
- electronProcess = runMainProcess(options, innerOpts);
137
+ mainProcess = runMainProcess(options, innerOpts);
130
138
  return {
131
139
  kill: killProcess
132
140
  };
@@ -224,7 +232,6 @@ function vitePluginElectron(options) {
224
232
  if (isDev) {
225
233
  opts.main.sourcemap = _nullishCoalesce(opts.main.sourcemap, () => ( true));
226
234
  opts.preload.sourcemap = _nullishCoalesce(opts.main.sourcemap, () => ( true));
227
- opts.inspect = _nullishCoalesce(opts.inspect, () => ( true));
228
235
  } else {
229
236
  opts.main.minify = _nullishCoalesce(opts.main.minify, () => ( true));
230
237
  opts.preload.minify = _nullishCoalesce(opts.preload.minify, () => ( true));
@@ -251,7 +258,7 @@ function vitePluginElectron(options) {
251
258
  }
252
259
  }
253
260
  (_a = process.__tomjs_electron_serve__) == null ? void 0 : _a.kill();
254
- process.__tomjs_electron_serve__ = await runServe(opts, innerOpts);
261
+ process.__tomjs_electron_serve__ = await runServe(opts, innerOpts, server);
255
262
  });
256
263
  },
257
264
  async closeBundle() {
package/dist/index.mjs CHANGED
@@ -73,7 +73,10 @@ function getBuildOptions(options, innerOpts) {
73
73
  delete env[key];
74
74
  }
75
75
  });
76
- return ["main", "preload"].filter((s) => options[s] && options[s].entry).map((s) => options[s]).map((cfg) => {
76
+ return ["main", "preload"].filter((s) => options[s] && options[s].entry).map((s) => {
77
+ options[s].__NAME__ = s;
78
+ return options[s];
79
+ }).map((cfg) => {
77
80
  return {
78
81
  ...cfg,
79
82
  env,
@@ -93,40 +96,45 @@ function runMainProcess(options, innerOpts) {
93
96
  stdio: "inherit"
94
97
  }).on("exit", exitMainProcess);
95
98
  }
96
- async function runServe(options, innerOpts) {
97
- let electronProcess;
99
+ async function runServe(options, innerOpts, server) {
100
+ let mainProcess;
98
101
  const killProcess = () => {
99
- if (electronProcess) {
100
- electronProcess.off("exit", exitMainProcess);
101
- electronProcess.kill();
102
+ if (mainProcess) {
103
+ mainProcess.off("exit", exitMainProcess);
104
+ mainProcess.kill();
102
105
  }
103
106
  };
104
107
  process.on("exit", () => {
105
108
  killProcess();
106
109
  });
107
- logger.info(`electron server start`);
108
110
  const buildOptions = getBuildOptions(options, innerOpts);
109
111
  for (let i = 0; i < buildOptions.length; i++) {
110
112
  let isFirstBuild = true;
111
113
  const tsOpts = buildOptions[i];
112
- const { onSuccess: _onSuccess, watch, ...tsupOptions } = tsOpts;
113
- logger.info(`electron ${tsOpts.name} process build`);
114
+ const { __NAME__: name, onSuccess: _onSuccess, watch, ...tsupOptions } = tsOpts;
115
+ logger.info(`${name} build`);
114
116
  const onSuccess = async () => {
115
- logger.info(`electron ${tsOpts.name} process build success`);
116
117
  if (typeof _onSuccess === "function") {
117
118
  await _onSuccess();
118
119
  }
119
- logger.success("rebuild succeeded!");
120
120
  if (isFirstBuild) {
121
+ logger.info(`${name} build succeeded`);
121
122
  isFirstBuild = false;
122
123
  return;
123
124
  }
124
- killProcess();
125
- electronProcess = runMainProcess(options, innerOpts);
125
+ logger.success(`${name} rebuild succeeded!`);
126
+ if (name === "main") {
127
+ killProcess();
128
+ mainProcess = runMainProcess(options, innerOpts);
129
+ } else {
130
+ server.ws.send({
131
+ type: "full-reload"
132
+ });
133
+ }
126
134
  };
127
135
  await tsupBuild({ onSuccess, watch: true, ...tsupOptions });
128
136
  }
129
- electronProcess = runMainProcess(options, innerOpts);
137
+ mainProcess = runMainProcess(options, innerOpts);
130
138
  return {
131
139
  kill: killProcess
132
140
  };
@@ -223,7 +231,6 @@ function vitePluginElectron(options) {
223
231
  if (isDev) {
224
232
  opts.main.sourcemap = opts.main.sourcemap ?? true;
225
233
  opts.preload.sourcemap = opts.main.sourcemap ?? true;
226
- opts.inspect = opts.inspect ?? true;
227
234
  } else {
228
235
  opts.main.minify = opts.main.minify ?? true;
229
236
  opts.preload.minify = opts.preload.minify ?? true;
@@ -250,7 +257,7 @@ function vitePluginElectron(options) {
250
257
  }
251
258
  }
252
259
  (_a = process.__tomjs_electron_serve__) == null ? void 0 : _a.kill();
253
- process.__tomjs_electron_serve__ = await runServe(opts, innerOpts);
260
+ process.__tomjs_electron_serve__ = await runServe(opts, innerOpts, server);
254
261
  });
255
262
  },
256
263
  async closeBundle() {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tomjs/vite-plugin-electron",
3
- "version": "1.0.0",
4
- "description": "A simple vite plugin to help electron apps develop",
3
+ "version": "1.1.0",
4
+ "description": "A simple vite plugin for electron, supports esm/cjs.",
5
5
  "keywords": [
6
6
  "vite",
7
7
  "plugin",
@@ -68,6 +68,9 @@
68
68
  "typescript": "~5.2.2",
69
69
  "vite": "^5.0.7"
70
70
  },
71
+ "peerDependencies": {
72
+ "electron": ">=12.0.0"
73
+ },
71
74
  "scripts": {
72
75
  "dev": "tsup --watch",
73
76
  "build": "tsup",