12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import rollup, { OutputOptions } from 'rollup';
- import chalk from 'chalk';
- import ora from 'ora';
- import waitOn from 'wait-on';
- import net from 'net';
- import { URL } from 'url';
- import minimist from 'minimist';
- import electronConnect from 'electron-connect';
- import { getRollupOptions } from '../config/rollupElectronConfig';
- const argv = minimist(process.argv.slice(2));
- const TAG = '[compiler-electron]';
- export function startCompilerElectron(port = 80) {
- // 因为 vite 不会重定向到 index.html,所以直接写 index.html 路由。
- const ELECTRON_URL = `https://localhost:${port}/index.html`;
- const spinner = ora(`${TAG} Electron build...`);
- const electron = electronConnect.server.create({ stopOnClose: true });
- const rollupOptions = getRollupOptions();
- function watchFunc() {
- // once here, all resources are available
- const watcher = rollup.watch(rollupOptions);
- watcher.on('change', (filename) => {
- const log = chalk.green(`change -- ${filename}`);
- console.log(TAG, log);
- });
- watcher.on('event', (ev) => {
- if (ev.code === 'END') {
- // init-未启动、started-第一次启动、restarted-重新启动
- electron.electronState === 'init' ? electron.start() : electron.restart();
- } else if (ev.code === 'ERROR') {
- console.log(ev.error);
- }
- });
- }
- if (argv.watch) {
- waitOn(
- {
- resources: [ELECTRON_URL],
- timeout: 5000,
- },
- (err) => {
- if (err) {
- const { hostname } = new URL(ELECTRON_URL);
- const serverSocket = net.connect(port, hostname, () => {
- watchFunc();
- });
- serverSocket.on('error', (e) => {
- console.log(err);
- console.log(e);
- process.exit(1);
- });
- } else {
- watchFunc();
- }
- }
- );
- } else {
- spinner.start();
- rollup
- .rollup(rollupOptions)
- .then((build) => {
- spinner.stop();
- console.log(TAG, chalk.green('Electron build successed.'));
- build.write(rollupOptions.output as OutputOptions);
- })
- .catch((error) => {
- spinner.stop();
- console.log(`\n${TAG} ${chalk.red('构建报错')}\n`, error, '\n');
- });
- }
- }
|