12 changed files with 9000 additions and 5435 deletions
@ -0,0 +1,14 @@ |
|||||
|
{ |
||||
|
"comments": false, |
||||
|
"env": { |
||||
|
"main": { |
||||
|
"presets": [ |
||||
|
["env", { |
||||
|
"targets": { "node": 7 } |
||||
|
}], |
||||
|
"stage-0" |
||||
|
] |
||||
|
} |
||||
|
}, |
||||
|
"plugins": ["@babel/plugin-transform-runtime"] |
||||
|
} |
@ -0,0 +1,7 @@ |
|||||
|
https://www.jianshu.com/p/4699b825d285 |
||||
|
|
||||
|
|
||||
|
// // 指定了就出不来了,官网的解释是:No need to specify which files to include in the app |
||||
|
// "files": [ |
||||
|
// "dist/electron/**/*" |
||||
|
// ], |
@ -0,0 +1,5 @@ |
|||||
|
{ |
||||
|
"name": "my-electron-app", |
||||
|
"version": "1.0.0", |
||||
|
"lockfileVersion": 1 |
||||
|
} |
@ -0,0 +1,12 @@ |
|||||
|
{ |
||||
|
"name": "my-electron-app", |
||||
|
"version": "1.0.0", |
||||
|
"description": "description", |
||||
|
"main": "./electron/entry.js", |
||||
|
"scripts": {}, |
||||
|
"keywords": [], |
||||
|
"author": "TopOne", |
||||
|
"license": "ISC", |
||||
|
"devDependencies": {}, |
||||
|
"dependencies": {} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,146 @@ |
|||||
|
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')
|
||||
|
|
||||
|
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 buildMain () { |
||||
|
return new Promise((resolve, reject) => { |
||||
|
mainConfig.mode = 'production' |
||||
|
webpack(mainConfig, (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 startMain (callback) { |
||||
|
return new Promise((resolve, reject) => { |
||||
|
mainConfig.entry.main = [path.join(__dirname, '../../src/main/index.ts')]//.concat(mainConfig.entry.main)
|
||||
|
mainConfig.mode = 'development' |
||||
|
const compiler = webpack(mainConfig) |
||||
|
|
||||
|
compiler.hooks.watchRun.tapAsync('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) |
||||
|
|
||||
|
callback && callback() |
||||
|
|
||||
|
resolve() |
||||
|
}) |
||||
|
}) |
||||
|
} |
||||
|
module.exports = { |
||||
|
startMain, |
||||
|
buildMain, |
||||
|
} |
||||
|
|
||||
|
|
||||
|
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()
|
||||
|
// startMain()
|
||||
|
// Promise.all([startRenderer(), startMain()])
|
||||
|
// .then(() => {
|
||||
|
// startElectron()
|
||||
|
// })
|
||||
|
// .catch(err => {
|
||||
|
// console.error(err)
|
||||
|
// })
|
||||
|
// }
|
||||
|
|
||||
|
// init()
|
@ -0,0 +1,67 @@ |
|||||
|
'use strict' |
||||
|
|
||||
|
process.env.BABEL_ENV = 'main' |
||||
|
|
||||
|
const path = require('path') |
||||
|
const { dependencies } = require('../../package.json') |
||||
|
const webpack = require('webpack') |
||||
|
|
||||
|
const MinifyPlugin = require("babel-minify-webpack-plugin") |
||||
|
|
||||
|
let mainConfig = { |
||||
|
entry: { |
||||
|
main: path.join(__dirname, '../../src/main/index.ts') |
||||
|
}, |
||||
|
externals: [ |
||||
|
...Object.keys(dependencies || {}) |
||||
|
], |
||||
|
module: { |
||||
|
rules: [ |
||||
|
// { test: /\.ts?$/, loader: "ts-loader", exclude: /node_modules/ },
|
||||
|
{ |
||||
|
test: /\.js$/, |
||||
|
use: ['babel-loader'], |
||||
|
exclude: /node_modules/ |
||||
|
}, |
||||
|
{ |
||||
|
test: /\.node$/, |
||||
|
use: 'node-loader' |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
// https://www.webpackjs.com/configuration/node/
|
||||
|
node: { |
||||
|
// __dirname: process.env.NODE_ENV !== 'production', // 不转化为字符串
|
||||
|
// __filename: process.env.NODE_ENV !== 'production' // 不转化为字符串
|
||||
|
}, |
||||
|
output: { |
||||
|
filename: 'entry.js', // [name]
|
||||
|
libraryTarget: 'commonjs2', |
||||
|
path: path.join(__dirname, '../../dist/electron') |
||||
|
}, |
||||
|
plugins: [ |
||||
|
new webpack.NoEmitOnErrorsPlugin() |
||||
|
], |
||||
|
resolve: { |
||||
|
alias: { |
||||
|
"@": path.join(__dirname, "../../src/render"), |
||||
|
"@render": path.join(__dirname, "../../src/render"), |
||||
|
"@main": path.join(__dirname, "../../src/main"), |
||||
|
"@src": path.join(__dirname, "../../src"), |
||||
|
"@root": path.join(__dirname, "../../"), |
||||
|
}, |
||||
|
extensions: ['.js', '.json', '.node', '.ts'] |
||||
|
}, |
||||
|
target: 'electron-main' |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Adjust mainConfig for production settings |
||||
|
*/ |
||||
|
if (process.env.NODE_ENV === 'production') { |
||||
|
mainConfig.plugins.push( |
||||
|
new MinifyPlugin() |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
module.exports = mainConfig |
Loading…
Reference in new issue