Skip to content

Commit 1cbf863

Browse files
author
chen_feng
committed
temp add
1 parent 8e434cb commit 1cbf863

File tree

3 files changed

+147
-7
lines changed

3 files changed

+147
-7
lines changed

package.json

+16-7
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,19 @@
44
"author": "app",
55
"version": "0.0.1",
66
"scripts": {
7-
"start": "npm run electron:build && npm run dev",
8-
"dev": "concurrently -n=umi,electron -c=blue,green -p=[{name}] \"cross-env APP_ROOT=src/render umi dev\" \"wait-on http://localhost:9090 && electron .\"",
9-
"build:web": "cross-env APP_ROOT=src/render umi build",
7+
"start": "npm run dev",
8+
"dev": "concurrently -n=umi,electron -c=blue,green -p=[{name}] \"cross-env APP_ROOT=src/render umi dev\" ",
9+
"electron:dev": "node scripts/main-build --env=development --watch",
1010
"---- webpack 构建 bundle.js electron-webpack ----": "---- webpack 构建 bundle.js ----",
11-
"electron:build": "cross-env node src/main/script/build",
11+
"electron:build": "node scripts/main-build --env=production",
12+
"---- 辅助命令 ----": "---- DIST=dist 指向根目录 dist ----",
13+
"build:umi": "cross-env DIST=dist APP_ENV=test APP_ROOT=src/render umi build",
14+
"---- close flex routes ----": "---- 开发关闭动态路由,可选 ----",
15+
"flex": "concurrently -n=umi,electron -c=blue,green \"cross-env closeFlexRoute=true APP_ENV=test APP_ROOT=src/render umi dev\" \"npm run electron:dev\"",
1216
"---- 自动根据操作系统平台构建包 electron进程环境变量:APP_ENV=production electron-package ----": "---- 自动根据操作系统平台构建包 ----",
1317
"pack": "npm run electron:build && cross-env APP_ENV=production APP_ROOT=src/render umi build && electron-builder",
14-
"---- 不同接口环境 WEB_ENV=sit ----": "---- 自动根据操作系统平台构建包 ----",
15-
"pack-env-sit": "npm run electron:build && cross-env WEB_ENV=sit APP_ROOT=src/render umi build && electron-builder",
18+
"---- 不同接口环境 APP_ENV=test ----": "---- 自动根据操作系统平台构建包 ----",
19+
"pack-env-test": "npm run electron:build && cross-env APP_ENV=test APP_ROOT=src/render umi build && electron-builder",
1620
"---- 构建三个操作系统平台包 electron-package-all ----": "---- 构建三个操作系统平台包 ----",
1721
"pack-all": "npm run electron:build && cross-env APP_ENV=production APP_ROOT=src/render umi build && electron-builder -mwl",
1822
"---- 构建 mac 操作系统平台包 electron-package-mac ----": "---- 构建 mac 操作系统平台包 ----",
@@ -103,6 +107,11 @@
103107
"eslint-plugin-react": "^7.19.0",
104108
"mockjs": "^1.1.0",
105109
"prettier": "^1.19.1",
106-
"wait-on": "^4.0.2"
110+
"wait-on": "^4.0.2",
111+
"dotenv": "^8.2.0",
112+
"electron-log": "^4.1.1",
113+
"minimist": "^1.2.5",
114+
"node-loader": "^0.6.0",
115+
"ora": "^4.0.4"
107116
}
108117
}

scripts/main-build.js

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/* eslint-disable @typescript-eslint/camelcase */
2+
/**
3+
* 主进程 webpack 构建
4+
* electron 启动交给 electron-connect
5+
*/
6+
const path = require('path');
7+
const child_process = require('child_process');
8+
const electron = require('electron');
9+
const webpack = require('webpack');
10+
const chalk = require('chalk');
11+
const ora = require('ora');
12+
const wait_on = require('wait-on');
13+
const argv = require('minimist')(process.argv.slice(2));
14+
const config_factory = require('./webpack.main');
15+
require('dotenv').config({ path: path.join(__dirname, '../src/render/.env') });
16+
17+
const root = path.join(__dirname, '..');
18+
const main = process.env['npm_package_main'];
19+
const { env, port = process.env.PORT, watch } = argv;
20+
const spinner = ora('Electron webpack build...');
21+
const TAG = 'scripts/main-build.js';
22+
let watching = null;
23+
let child = null;
24+
25+
const compiler = webpack(config_factory(env));
26+
compiler.hooks.afterCompile.tap(TAG, () => {
27+
spinner.stop();
28+
if (watch) { // 开发模式
29+
if (child) { process.kill(child.pid, 'SIGINT'); }
30+
child = child_process.spawn(
31+
electron,
32+
[path.join(root, main)],
33+
{ stdio: 'inherit', }
34+
);
35+
}
36+
});
37+
compiler.hooks.beforeCompile.tap(TAG, () => {
38+
spinner.start();
39+
});
40+
41+
function compileHandle(err, stats) {
42+
if (err) {
43+
// err 对象将只包含与webpack相关的问题,例如错误配置等
44+
console.log(TAG, chalk.red('💥 Electron webpack 相关报错'));
45+
console.log(err);
46+
47+
// 关闭 wepback 监听
48+
watching && watching.close(() => console.log(TAG, 'Watching Ended.'));
49+
process.exit(1);
50+
} else if (stats.hasErrors()) {
51+
// webpack 编译报错
52+
const json = stats.toJson('errors-only');
53+
console.log(TAG, json.errors);
54+
console.log(TAG, chalk.red('💥 Electron 构建报错'));
55+
} else {
56+
console.log(TAG, chalk.green('Electron webpack 构建完成'));
57+
}
58+
}
59+
60+
if (watch) { // 开发模式
61+
const opts = {
62+
resources: [`http://localhost:${port}`], // PORT === port
63+
interval: 900, // poll interval in ms, default 250ms
64+
log: false,
65+
};
66+
67+
// 等待 webpack-dev-server 启动后启动 electron
68+
wait_on(opts, function (err) {
69+
if (err) {
70+
console.log(err);
71+
process.exit(1);
72+
}
73+
// once here, all resources are available
74+
watching = compiler.watch({
75+
ignored: /bundle\.js(\.map)?/,
76+
}, compileHandle);
77+
});
78+
} else { // 构建模式
79+
compiler.run(compileHandle);
80+
}

scripts/webpack.main.js

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* 主进程 webpack 配置
3+
*/
4+
const path = require('path');
5+
6+
const resolve = (dir = '') => path.join(__dirname, '../src/main', dir) // 指向 src/main
7+
8+
module.exports = function (env) {
9+
process.env.NODE_ENV = env;
10+
const isDev = env === 'development';
11+
12+
return {
13+
mode: isDev ? 'development' : 'production',
14+
devtool: isDev ? undefined : 'cheap-module-source-map',
15+
target: 'electron-main',
16+
entry: resolve('index.js'),
17+
output: {
18+
path: resolve(),
19+
filename: 'bundle.js',
20+
},
21+
node: {
22+
__dirname: false,
23+
__filename: false
24+
},
25+
resolve: {
26+
extensions: ['.js', '.json', '.ts'],
27+
alias: {
28+
'@root': path.join(__dirname, '..'),
29+
},
30+
},
31+
module: {
32+
rules: [
33+
{
34+
test: /\.(js|ts)$/,
35+
exclude: /node-modules/,
36+
loader: 'babel-loader',
37+
options: {
38+
plugins: ["@babel/plugin-transform-typescript"],
39+
},
40+
},
41+
{
42+
test: /\.node$/,
43+
loader: isDev ? 'node-loader' : 'relative-loader',
44+
options: isDev ? undefined : {
45+
relativePath: '/aclas-addons/'
46+
}
47+
},
48+
]
49+
}
50+
};
51+
};

0 commit comments

Comments
 (0)