创建新仓库
This commit is contained in:
141
.electron-vue/build.js
Normal file
141
.electron-vue/build.js
Normal file
@ -0,0 +1,141 @@
|
||||
"use strict";
|
||||
|
||||
process.env.NODE_ENV = "production";
|
||||
|
||||
const { say } = require("cfonts");
|
||||
const chalk = require("chalk");
|
||||
const del = require("del");
|
||||
const { spawn } = require("child_process");
|
||||
const webpack = require("webpack");
|
||||
const Multispinner = require("multispinner");
|
||||
const { mains } = require("./setVersion");
|
||||
mains();
|
||||
|
||||
const mainConfig = require("./webpack.main.config");
|
||||
const rendererConfig = require("./webpack.renderer.config");
|
||||
const webConfig = require("./webpack.web.config");
|
||||
|
||||
const doneLog = chalk.bgGreen.white(" DONE ") + " ";
|
||||
const errorLog = chalk.bgRed.white(" ERROR ") + " ";
|
||||
const okayLog = chalk.bgBlue.white(" OKAY ") + " ";
|
||||
const isCI = process.env.CI || false;
|
||||
|
||||
if (process.env.BUILD_TARGET === "clean") clean();
|
||||
else if (process.env.BUILD_TARGET === "web") web();
|
||||
else build();
|
||||
|
||||
function clean() {
|
||||
del.sync(["build/*", "!build/icons", "!build/icons/icon.*"]);
|
||||
console.log(`\n${doneLog}\n`);
|
||||
process.exit();
|
||||
}
|
||||
|
||||
function build() {
|
||||
greeting();
|
||||
|
||||
del.sync(["dist/electron/*", "!.gitkeep"]);
|
||||
|
||||
const tasks = ["main", "renderer"];
|
||||
const m = new Multispinner(tasks, {
|
||||
preText: "building",
|
||||
postText: "process"
|
||||
});
|
||||
|
||||
let results = "";
|
||||
|
||||
m.on("success", () => {
|
||||
process.stdout.write("\x1B[2J\x1B[0f");
|
||||
console.log(`\n\n${results}`);
|
||||
console.log(
|
||||
`${okayLog}take it away ${chalk.yellow("`electron-builder`")}\n`
|
||||
);
|
||||
process.exit();
|
||||
});
|
||||
|
||||
pack(mainConfig)
|
||||
.then(result => {
|
||||
results += result + "\n\n";
|
||||
m.success("main");
|
||||
})
|
||||
.catch(err => {
|
||||
m.error("main");
|
||||
console.log(`\n ${errorLog}failed to build main process`);
|
||||
console.error(`\n${err}\n`);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
pack(rendererConfig)
|
||||
.then(result => {
|
||||
results += result + "\n\n";
|
||||
m.success("renderer");
|
||||
})
|
||||
.catch(err => {
|
||||
m.error("renderer");
|
||||
console.log(`\n ${errorLog}failed to build renderer process`);
|
||||
console.error(`\n${err}\n`);
|
||||
process.exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
function pack(config) {
|
||||
return new Promise((resolve, reject) => {
|
||||
webpack(config, (err, stats) => {
|
||||
if (err) reject(err.stack || err);
|
||||
else if (stats.hasErrors()) {
|
||||
let err = "";
|
||||
|
||||
stats
|
||||
.toString({
|
||||
chunks: false,
|
||||
colors: true
|
||||
})
|
||||
.split(/\r?\n/)
|
||||
.forEach(line => {
|
||||
err += ` ${line}\n`;
|
||||
});
|
||||
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(
|
||||
stats.toString({
|
||||
chunks: false,
|
||||
colors: true
|
||||
})
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function web() {
|
||||
del.sync(["dist/web/*", "!.gitkeep"]);
|
||||
webpack(webConfig, (err, stats) => {
|
||||
if (err || stats.hasErrors()) console.log(err);
|
||||
|
||||
console.log(
|
||||
stats.toString({
|
||||
chunks: false,
|
||||
colors: true
|
||||
})
|
||||
);
|
||||
|
||||
process.exit();
|
||||
});
|
||||
}
|
||||
|
||||
function greeting() {
|
||||
const cols = process.stdout.columns;
|
||||
let text = "";
|
||||
|
||||
if (cols > 85) text = "lets-build";
|
||||
else if (cols > 60) text = "lets-|build";
|
||||
else text = false;
|
||||
|
||||
if (text && !isCI) {
|
||||
say(text, {
|
||||
colors: ["yellow"],
|
||||
font: "simple3d",
|
||||
space: false
|
||||
});
|
||||
} else console.log(chalk.yellow.bold("\n lets-build"));
|
||||
}
|
41
.electron-vue/dev-client.js
Normal file
41
.electron-vue/dev-client.js
Normal file
@ -0,0 +1,41 @@
|
||||
const hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')
|
||||
import 'polyfill-object.fromentries';
|
||||
|
||||
hotClient.subscribe(event => {
|
||||
/**
|
||||
* Reload browser when HTMLWebpackPlugin emits a new index.html
|
||||
*
|
||||
* Currently disabled until jantimon/html-webpack-plugin#680 is resolved.
|
||||
* https://github.com/SimulatedGREG/electron-vue/issues/437
|
||||
* https://github.com/jantimon/html-webpack-plugin/issues/680
|
||||
*/
|
||||
// if (event.action === 'reload') {
|
||||
// window.location.reload()
|
||||
// }
|
||||
|
||||
/**
|
||||
* Notify `mainWindow` when `main` process is compiling,
|
||||
* giving notice for an expected reload of the `electron` process
|
||||
*/
|
||||
if (event.action === 'compiling') {
|
||||
document.body.innerHTML += `
|
||||
<style>
|
||||
#dev-client {
|
||||
background: #4fc08d;
|
||||
border-radius: 4px;
|
||||
bottom: 20px;
|
||||
box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3);
|
||||
color: #fff;
|
||||
font-family: 'Source Sans Pro', sans-serif;
|
||||
left: 20px;
|
||||
padding: 8px 12px;
|
||||
position: absolute;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="dev-client">
|
||||
Compiling Main Process...
|
||||
</div>
|
||||
`
|
||||
}
|
||||
})
|
205
.electron-vue/dev-runner.js
Normal file
205
.electron-vue/dev-runner.js
Normal file
@ -0,0 +1,205 @@
|
||||
"use strict";
|
||||
|
||||
const chalk = require("chalk");
|
||||
const electron = require("electron");
|
||||
const path = require("path");
|
||||
const { say } = require("cfonts");
|
||||
const { spawn } = require("child_process");
|
||||
const webpack = require("webpack");
|
||||
const WebpackDevServer = require("webpack-dev-server");
|
||||
const webpackHotMiddleware = require("webpack-hot-middleware");
|
||||
|
||||
const mainConfig = require("./webpack.main.config");
|
||||
const rendererConfig = require("./webpack.renderer.config");
|
||||
const config = require("../config");
|
||||
const { setEnvior } = require("./setVersion");
|
||||
|
||||
let electronProcess = null;
|
||||
let manualRestart = false;
|
||||
let hotMiddleware;
|
||||
|
||||
function logStats(proc, data) {
|
||||
let log = "";
|
||||
|
||||
log += chalk.yellow.bold(
|
||||
`┏ ${proc} Process ${new Array(19 - proc.length + 1).join("-")}`
|
||||
);
|
||||
log += "\n\n";
|
||||
|
||||
if (typeof data === "object") {
|
||||
data
|
||||
.toString({
|
||||
colors: true,
|
||||
chunks: false
|
||||
})
|
||||
.split(/\r?\n/)
|
||||
.forEach(line => {
|
||||
log += " " + line + "\n";
|
||||
});
|
||||
} else {
|
||||
log += ` ${data}\n`;
|
||||
}
|
||||
|
||||
log += "\n" + chalk.yellow.bold(`┗ ${new Array(28 + 1).join("-")}`) + "\n";
|
||||
|
||||
console.log(log);
|
||||
}
|
||||
|
||||
function startRenderer() {
|
||||
return new Promise((resolve, reject) => {
|
||||
rendererConfig.entry.renderer = [path.join(__dirname, "dev-client")].concat(
|
||||
rendererConfig.entry.renderer
|
||||
);
|
||||
|
||||
const compiler = webpack(rendererConfig);
|
||||
hotMiddleware = webpackHotMiddleware(compiler, {
|
||||
log: false,
|
||||
heartbeat: 2500
|
||||
});
|
||||
|
||||
compiler.plugin("compilation", compilation => {
|
||||
compilation.plugin("html-webpack-plugin-after-emit", (data, cb) => {
|
||||
hotMiddleware.publish({ action: "reload" });
|
||||
cb();
|
||||
});
|
||||
});
|
||||
|
||||
compiler.plugin("done", stats => {
|
||||
logStats("Renderer", stats);
|
||||
});
|
||||
|
||||
const server = new WebpackDevServer(compiler, {
|
||||
contentBase: path.join(__dirname, "../"),
|
||||
quiet: true,
|
||||
before(app, ctx) {
|
||||
app.use(hotMiddleware);
|
||||
ctx.middleware.waitUntilValid(() => {
|
||||
resolve();
|
||||
});
|
||||
},
|
||||
proxy:{
|
||||
"/airApi": {
|
||||
//测试服务接口地址
|
||||
target: "http://120.46.149.189:9136",
|
||||
changeOrigin: true, // 允许跨域
|
||||
pathRewrite: {
|
||||
"^/airApi": "/"
|
||||
},
|
||||
headers: {referer: ''}
|
||||
}
|
||||
}
|
||||
});
|
||||
server.listen(config.AppConfig.PORT);
|
||||
});
|
||||
}
|
||||
|
||||
function startMain() {
|
||||
return new Promise((resolve, reject) => {
|
||||
mainConfig.entry.main = [
|
||||
path.join(__dirname, "../src/main/index.dev.js")
|
||||
].concat(mainConfig.entry.main);
|
||||
|
||||
const compiler = webpack(mainConfig);
|
||||
|
||||
compiler.plugin("watch-run", (compilation, done) => {
|
||||
logStats("Main", chalk.white.bold("compiling..."));
|
||||
hotMiddleware.publish({ action: "compiling" });
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
compiler.watch({}, (err, stats) => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
return;
|
||||
}
|
||||
|
||||
logStats("Main", stats);
|
||||
|
||||
if (electronProcess && electronProcess.kill) {
|
||||
manualRestart = true;
|
||||
process.kill(electronProcess.pid);
|
||||
electronProcess = null;
|
||||
startElectron();
|
||||
|
||||
setTimeout(() => {
|
||||
manualRestart = false;
|
||||
}, 5000);
|
||||
}
|
||||
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function startElectron() {
|
||||
|
||||
electronProcess = spawn(electron, [
|
||||
"--inspect=5858",
|
||||
path.join(__dirname, "../dist/electron/main.js")
|
||||
]);
|
||||
electronProcess.on('spawn', () => {
|
||||
console.log('子进程已启动');
|
||||
setEnvior()
|
||||
});
|
||||
// setEnvior();
|
||||
electronProcess.stdout.on("data", data => {
|
||||
electronLog(data, "blue");
|
||||
});
|
||||
electronProcess.stderr.on("data", data => {
|
||||
electronLog(data, "red");
|
||||
});
|
||||
|
||||
electronProcess.on("close", () => {
|
||||
if (!manualRestart) process.exit();
|
||||
});
|
||||
}
|
||||
|
||||
function electronLog(data, color) {
|
||||
let log = "";
|
||||
data = data.toString().split(/\r?\n/);
|
||||
data.forEach(line => {
|
||||
log += ` ${line}\n`;
|
||||
});
|
||||
if (/[0-9A-z]+/.test(log)) {
|
||||
console.log(
|
||||
chalk[color].bold("┏ Electron -------------------") +
|
||||
"\n\n" +
|
||||
log +
|
||||
chalk[color].bold("┗ ----------------------------") +
|
||||
"\n"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function greeting() {
|
||||
const cols = process.stdout.columns;
|
||||
let text = "";
|
||||
|
||||
if (cols > 104) text = "electron-vue";
|
||||
else if (cols > 76) text = "electron-|vue";
|
||||
else text = false;
|
||||
|
||||
if (text) {
|
||||
say(text, {
|
||||
colors: ["yellow"],
|
||||
font: "simple3d",
|
||||
space: false
|
||||
});
|
||||
} else console.log(chalk.yellow.bold("\n electron-vue"));
|
||||
console.log(chalk.blue(" getting ready...") + "\n");
|
||||
}
|
||||
|
||||
function init() {
|
||||
greeting();
|
||||
|
||||
Promise.all([startRenderer(), startMain()])
|
||||
.then(() => {
|
||||
startElectron();
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
});
|
||||
}
|
||||
|
||||
init();
|
65
.electron-vue/setVersion.js
Normal file
65
.electron-vue/setVersion.js
Normal file
@ -0,0 +1,65 @@
|
||||
const fs = require("fs");
|
||||
const obj = require("../config/app_config");
|
||||
// 获取当前工作目录路径
|
||||
const currentDirPath = process.cwd();
|
||||
// 定义需要更改的 package.json 文件路径
|
||||
const packageJsonFilePath = `${currentDirPath}/package.json`;
|
||||
const installerFilePath = `${currentDirPath}/installer.nsh`;
|
||||
const installText = `${currentDirPath}/install.txt`;
|
||||
|
||||
/*function setEnvior() {}*/
|
||||
|
||||
let Factory = (function() {
|
||||
return {
|
||||
mains: function() {
|
||||
// 读取原始的 package.json 内容
|
||||
let packageData;
|
||||
let y;
|
||||
try {
|
||||
const str = String(fs.readFileSync(installText));
|
||||
y = str.replace(/installurl/g, obj.installUrl);
|
||||
const rawData = fs.readFileSync(packageJsonFilePath);
|
||||
packageData = JSON.parse(rawData);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
console.log(`无法读取 ${packageJsonFilePath}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// 根据自定义逻辑修改 package.json 中的 name 字段(这里示意性地将其设置为 "new_app")
|
||||
for (const objKey in obj) {
|
||||
if (objKey.indexOf("_") > -1) {
|
||||
let keyArr = [];
|
||||
keyArr = objKey.split("_");
|
||||
//[win,icon]=>["win"]["icon"]
|
||||
let str = '["' + keyArr.join('"]["') + '"]';
|
||||
console.log(str);
|
||||
try {
|
||||
eval(`packageData${str} = obj[objKey]`);
|
||||
} catch (e) {}
|
||||
} else {
|
||||
if (packageData.hasOwnProperty(objKey)) {
|
||||
packageData[objKey] = obj[objKey];
|
||||
}
|
||||
if(objKey=="isSetDefaultLayer"){
|
||||
localStorage.setItem("isSetDefaultLayer",obj[objKey])
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
console.log(packageData);
|
||||
// 写入修改后的 package.json 数据
|
||||
fs.writeFileSync(packageJsonFilePath, JSON.stringify(packageData));
|
||||
fs.writeFileSync(installerFilePath, y);
|
||||
},
|
||||
setEnvior: function() {
|
||||
// console.log("*********************", obj.head);
|
||||
if(obj.hasOwnProperty('isSetDefaultLayer')){
|
||||
// localStorage.setItem("isSetDefaultLayer",obj[objKey])
|
||||
}
|
||||
// process.env.Head = obj.head;
|
||||
return obj.head;
|
||||
}
|
||||
};
|
||||
})();
|
||||
module.exports = Factory;
|
56
.electron-vue/setVersion1.js
Normal file
56
.electron-vue/setVersion1.js
Normal file
@ -0,0 +1,56 @@
|
||||
const fs = require("fs");
|
||||
const obj = require("../config/app_config");
|
||||
// 获取当前工作目录路径
|
||||
const currentDirPath = process.cwd();
|
||||
// 定义需要更改的 package.json 文件路径
|
||||
const packageJsonFilePath = `${currentDirPath}/package.json`;
|
||||
const installerFilePath = `${currentDirPath}/installer.nsh`;
|
||||
|
||||
/*function setEnvior() {}*/
|
||||
|
||||
let Factory = (function() {
|
||||
return {
|
||||
mains: function() {
|
||||
// 读取原始的 package.json 内容
|
||||
let packageData;
|
||||
let y;
|
||||
try {
|
||||
const str = String(fs.readFileSync(installerFilePath));
|
||||
y = str.replace(/urlHKLM/g, obj.installUrl);
|
||||
const rawData = fs.readFileSync(packageJsonFilePath);
|
||||
packageData = JSON.parse(rawData);
|
||||
} catch (error) {
|
||||
console.log(`无法读取 ${packageJsonFilePath}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// 根据自定义逻辑修改 package.json 中的 name 字段(这里示意性地将其设置为 "new_app")
|
||||
for (const objKey in obj) {
|
||||
if (objKey.indexOf("_") > -1) {
|
||||
let keyArr = [];
|
||||
keyArr = objKey.split("_");
|
||||
//[win,icon]=>["win"]["icon"]
|
||||
let str = '["' + keyArr.join('"]["') + '"]';
|
||||
console.log(str);
|
||||
try {
|
||||
eval(`packageData${str} = obj[objKey]`);
|
||||
} catch (e) {}
|
||||
} else {
|
||||
if (packageData.hasOwnProperty(objKey)) {
|
||||
packageData[objKey] = obj[objKey];
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log(packageData);
|
||||
// 写入修改后的 package.json 数据
|
||||
fs.writeFileSync(packageJsonFilePath, JSON.stringify(packageData));
|
||||
fs.writeFileSync(installerFilePath, y);
|
||||
},
|
||||
setEnvior: function() {
|
||||
console.log("*********************", obj.head);
|
||||
// process.env.Head = obj.head;
|
||||
return obj.head;
|
||||
}
|
||||
};
|
||||
})();
|
||||
module.exports = Factory;
|
85
.electron-vue/webpack.main.config.js
Normal file
85
.electron-vue/webpack.main.config.js
Normal file
@ -0,0 +1,85 @@
|
||||
"use strict";
|
||||
|
||||
process.env.BABEL_ENV = "main";
|
||||
|
||||
const path = require("path");
|
||||
const { dependencies } = require("../package.json");
|
||||
const webpack = require("webpack");
|
||||
|
||||
const BabiliWebpackPlugin = require("babili-webpack-plugin");
|
||||
let whiteListedModules = ["fs", "path", "net", "electron", "child_process"];
|
||||
let mainConfig = {
|
||||
entry: {
|
||||
main: path.join(__dirname, "../src/main/index.js")
|
||||
},
|
||||
/*externals: [
|
||||
...Object.keys(dependencies || {}).filter(
|
||||
d => !whiteListedModules.includes(d)
|
||||
)
|
||||
],*/
|
||||
externals: [...Object.keys(dependencies || {})],
|
||||
module: {
|
||||
rules: [
|
||||
/* {
|
||||
test: /\.(js)$/,
|
||||
enforce: 'pre',
|
||||
exclude: /node_modules/,
|
||||
use: {
|
||||
loader: 'eslint-loader',
|
||||
options: {
|
||||
formatter: require('eslint-friendly-formatter')
|
||||
}
|
||||
}
|
||||
},*/
|
||||
{
|
||||
test: /\.js$/,
|
||||
use: "babel-loader",
|
||||
exclude: /node_modules/
|
||||
},
|
||||
{
|
||||
test: /\.node$/,
|
||||
use: "node-loader"
|
||||
}
|
||||
]
|
||||
},
|
||||
node: {
|
||||
__dirname: process.env.NODE_ENV !== "production",
|
||||
__filename: process.env.NODE_ENV !== "production"
|
||||
},
|
||||
output: {
|
||||
filename: "[name].js",
|
||||
libraryTarget: "commonjs2",
|
||||
path: path.join(__dirname, "../dist/electron")
|
||||
},
|
||||
plugins: [new webpack.NoEmitOnErrorsPlugin()],
|
||||
resolve: {
|
||||
extensions: [".js", ".json", ".node"]
|
||||
},
|
||||
target: "electron-main"
|
||||
};
|
||||
|
||||
/**
|
||||
* Adjust mainConfig for development settings
|
||||
*/
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
mainConfig.plugins.push(
|
||||
new webpack.DefinePlugin({
|
||||
__static: `"${path.join(__dirname, "../static").replace(/\\/g, "\\\\")}"`
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adjust mainConfig for production settings
|
||||
*/
|
||||
if (process.env.NODE_ENV === "production") {
|
||||
mainConfig.plugins.push(
|
||||
new BabiliWebpackPlugin(),
|
||||
new webpack.DefinePlugin({
|
||||
"process.env.NODE_ENV": '"production"'
|
||||
})
|
||||
);
|
||||
}
|
||||
// console.log(mainConfig);
|
||||
|
||||
module.exports = mainConfig;
|
211
.electron-vue/webpack.renderer.config.js
Normal file
211
.electron-vue/webpack.renderer.config.js
Normal file
@ -0,0 +1,211 @@
|
||||
"use strict";
|
||||
|
||||
process.env.BABEL_ENV = "renderer";
|
||||
|
||||
const path = require("path");
|
||||
const { dependencies } = require("../package.json");
|
||||
const webpack = require("webpack");
|
||||
const config = require("../config/index.js");
|
||||
const BabiliWebpackPlugin = require("babili-webpack-plugin");
|
||||
const CopyWebpackPlugin = require("copy-webpack-plugin");
|
||||
const ExtractTextPlugin = require("extract-text-webpack-plugin");
|
||||
const HtmlWebpackPlugin = require("html-webpack-plugin");
|
||||
const { setEnvior } = require("./setVersion");
|
||||
/**
|
||||
* List of node_modules to include in webpack bundle
|
||||
*
|
||||
* Required for specific packages like Vue UI libraries
|
||||
* that provide pure *.vue files that need compiling
|
||||
* https://simulatedgreg.gitbooks.io/electron-vue/content/en/webpack-configurations.html#white-listing-externals
|
||||
*/
|
||||
let whiteListedModules = ["vue", "elementUI", "element-ui", "avue"];
|
||||
let objd =
|
||||
process.env.NODE_ENV === "production" ? config.build.env : config.dev.env;
|
||||
// let env = {
|
||||
// "process.env": { Head: `"${setEnvior()}"`, ...objd }
|
||||
// };
|
||||
let rendererConfig = {
|
||||
devtool: "#cheap-module-eval-source-map",
|
||||
|
||||
entry: {
|
||||
renderer: path.join(__dirname, "../src/renderer/main.js"),
|
||||
},
|
||||
externals: [
|
||||
...Object.keys(dependencies || {}).filter(
|
||||
(d) => !whiteListedModules.includes(d)
|
||||
),
|
||||
],
|
||||
module: {
|
||||
rules: [
|
||||
/* {
|
||||
test: /\.(js|vue)$/,
|
||||
enforce: 'pre',
|
||||
exclude: /node_modules/,
|
||||
use: {
|
||||
loader: 'eslint-loader',
|
||||
options: {
|
||||
formatter: require('eslint-friendly-formatter')
|
||||
}
|
||||
}
|
||||
},*/
|
||||
{
|
||||
test: /\.css$/,
|
||||
use: ExtractTextPlugin.extract({
|
||||
fallback: "style-loader",
|
||||
use: "css-loader",
|
||||
}),
|
||||
},
|
||||
{
|
||||
test: /\.html$/,
|
||||
use: "vue-html-loader",
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
use: "babel-loader",
|
||||
exclude: /node_modules/,
|
||||
},
|
||||
{
|
||||
test: /\.node$/,
|
||||
use: "node-loader",
|
||||
},
|
||||
{
|
||||
test: /\.vue$/,
|
||||
use: {
|
||||
loader: "vue-loader",
|
||||
options: {
|
||||
extractCSS: process.env.NODE_ENV === "production",
|
||||
loaders: {
|
||||
sass: "vue-style-loader!css-loader!sass-loader?indentedSyntax=1",
|
||||
scss:
|
||||
'vue-style-loader!css-loader!sass-loader?data=@import "./src/renderer/assets/styles/computed.scss";',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
test: /\.svg$/,
|
||||
loader: "svg-sprite-loader",
|
||||
include: [path.join(__dirname, "../src/renderer/icons")],
|
||||
options: {
|
||||
symbolId: "icon-[name]",
|
||||
},
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
||||
exclude: [path.join(__dirname, "../src/renderer/icons")],
|
||||
use: {
|
||||
loader: "url-loader",
|
||||
query: {
|
||||
limit: 10000,
|
||||
name: "imgs/[name]--[folder].[ext]",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
|
||||
loader: "url-loader",
|
||||
options: {
|
||||
limit: 10000,
|
||||
name: "media/[name]--[folder].[ext]",
|
||||
},
|
||||
},
|
||||
{
|
||||
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
||||
use: {
|
||||
loader: "url-loader",
|
||||
query: {
|
||||
limit: 10000,
|
||||
name: "fonts/[name]--[folder].[ext]",
|
||||
},
|
||||
},
|
||||
},
|
||||
/*{
|
||||
use: {
|
||||
loader: 'svgo-loader',
|
||||
query: {
|
||||
limit: 10000,
|
||||
name: 'fonts/[name]--[folder].[ext]'
|
||||
}
|
||||
}
|
||||
}*/
|
||||
],
|
||||
},
|
||||
node: {
|
||||
__dirname: process.env.NODE_ENV !== "production",
|
||||
__filename: process.env.NODE_ENV !== "production",
|
||||
},
|
||||
plugins: [
|
||||
new ExtractTextPlugin("styles.css"),
|
||||
new webpack.DefinePlugin({
|
||||
"process.env":
|
||||
process.env.NODE_ENV === "production"
|
||||
? config.build.env
|
||||
: config.dev.env,
|
||||
}),
|
||||
new HtmlWebpackPlugin({
|
||||
filename: "index.html",
|
||||
template: path.resolve(__dirname, "../src/index.ejs"),
|
||||
minify: {
|
||||
collapseWhitespace: true,
|
||||
removeAttributeQuotes: true,
|
||||
removeComments: true,
|
||||
},
|
||||
nodeModules:
|
||||
process.env.NODE_ENV !== "production"
|
||||
? path.resolve(__dirname, "../node_modules")
|
||||
: false,
|
||||
}),
|
||||
new webpack.HotModuleReplacementPlugin(),
|
||||
new webpack.NoEmitOnErrorsPlugin(),
|
||||
],
|
||||
output: {
|
||||
filename: "[name].js",
|
||||
libraryTarget: "commonjs2",
|
||||
path: path.join(__dirname, "../dist/electron"),
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
"@": path.join(__dirname, "../src/renderer"),
|
||||
vue$: "vue/dist/vue.esm.js",
|
||||
},
|
||||
extensions: [".js", ".vue", ".json", ".css", ".node"],
|
||||
},
|
||||
target: "electron-renderer",
|
||||
};
|
||||
|
||||
/**
|
||||
* Adjust rendererConfig for development settings
|
||||
*/
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
rendererConfig.plugins.push(
|
||||
new webpack.DefinePlugin({
|
||||
__static: `"${path.join(__dirname, "../static").replace(/\\/g, "\\\\")}"`,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adjust rendererConfig for production settings
|
||||
*/
|
||||
if (process.env.NODE_ENV === "production") {
|
||||
rendererConfig.devtool = "";
|
||||
|
||||
rendererConfig.plugins.push(
|
||||
new BabiliWebpackPlugin(),
|
||||
new CopyWebpackPlugin([
|
||||
{
|
||||
from: path.join(__dirname, "../static"),
|
||||
to: path.join(__dirname, "../dist/electron/static"),
|
||||
ignore: [".*"],
|
||||
},
|
||||
]),
|
||||
new webpack.DefinePlugin({
|
||||
"process.env.NODE_ENV": '"production"',
|
||||
}),
|
||||
new webpack.LoaderOptionsPlugin({
|
||||
minimize: true,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = rendererConfig;
|
140
.electron-vue/webpack.web.config.js
Normal file
140
.electron-vue/webpack.web.config.js
Normal file
@ -0,0 +1,140 @@
|
||||
'use strict'
|
||||
|
||||
process.env.BABEL_ENV = 'web'
|
||||
|
||||
const path = require('path')
|
||||
const webpack = require('webpack')
|
||||
|
||||
const BabiliWebpackPlugin = require('babili-webpack-plugin')
|
||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||
const ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||
|
||||
let webConfig = {
|
||||
devtool: '#cheap-module-eval-source-map',
|
||||
|
||||
entry: {
|
||||
web: path.join(__dirname, '../src/renderer/main.js')
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
/* {
|
||||
test: /\.(js|vue)$/,
|
||||
enforce: 'pre',
|
||||
exclude: /node_modules/,
|
||||
use: {
|
||||
loader: 'eslint-loader',
|
||||
options: {
|
||||
formatter: require('eslint-friendly-formatter')
|
||||
}
|
||||
}
|
||||
},*/
|
||||
{
|
||||
test: /\.css$/,
|
||||
use: ExtractTextPlugin.extract({
|
||||
fallback: 'style-loader',
|
||||
use: 'css-loader'
|
||||
})
|
||||
},
|
||||
{
|
||||
test: /\.html$/,
|
||||
use: 'vue-html-loader'
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
use: 'babel-loader',
|
||||
include: [path.resolve(__dirname, '../src/renderer')],
|
||||
exclude: /node_modules/
|
||||
},
|
||||
{
|
||||
test: /\.vue$/,
|
||||
use: {
|
||||
loader: 'vue-loader',
|
||||
options: {
|
||||
extractCSS: true,
|
||||
loaders: {
|
||||
sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1',
|
||||
scss: 'vue-style-loader!css-loader!sass-loader'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
||||
use: {
|
||||
loader: 'url-loader',
|
||||
query: {
|
||||
limit: 10000,
|
||||
name: 'imgs/[name].[ext]'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
||||
use: {
|
||||
loader: 'url-loader',
|
||||
query: {
|
||||
limit: 10000,
|
||||
name: 'fonts/[name].[ext]'
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
plugins: [
|
||||
new ExtractTextPlugin('styles.css'),
|
||||
new HtmlWebpackPlugin({
|
||||
filename: 'index.html',
|
||||
template: path.resolve(__dirname, '../src/index.ejs'),
|
||||
minify: {
|
||||
collapseWhitespace: true,
|
||||
removeAttributeQuotes: true,
|
||||
removeComments: true
|
||||
},
|
||||
nodeModules: false,
|
||||
}),
|
||||
new webpack.DefinePlugin({
|
||||
'process.env.IS_WEB': 'true'
|
||||
}),
|
||||
new webpack.HotModuleReplacementPlugin(),
|
||||
new webpack.NoEmitOnErrorsPlugin()
|
||||
],
|
||||
output: {
|
||||
filename: '[name].js',
|
||||
path: path.join(__dirname, '../dist/web')
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': path.join(__dirname, '../src/renderer'),
|
||||
'vue$': 'vue/dist/vue.esm.js'
|
||||
},
|
||||
extensions: ['.js', '.vue', '.json', '.css']
|
||||
},
|
||||
target: 'web'
|
||||
}
|
||||
|
||||
/**
|
||||
* Adjust webConfig for production settings
|
||||
*/
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
webConfig.devtool = ''
|
||||
|
||||
webConfig.plugins.push(
|
||||
new BabiliWebpackPlugin(),
|
||||
new CopyWebpackPlugin([
|
||||
{
|
||||
from: path.join(__dirname, '../static'),
|
||||
to: path.join(__dirname, '../dist/web/static'),
|
||||
ignore: ['.*']
|
||||
}
|
||||
]),
|
||||
new webpack.DefinePlugin({
|
||||
'process.env.NODE_ENV': '"production"'
|
||||
}),
|
||||
new webpack.LoaderOptionsPlugin({
|
||||
minimize: true
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
module.exports = webConfig
|
Reference in New Issue
Block a user