diff --git a/.electron-vue/build.js b/.electron-vue/build.js deleted file mode 100644 index bdfb5af..0000000 --- a/.electron-vue/build.js +++ /dev/null @@ -1,132 +0,0 @@ -'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 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) => { - config.mode = 'production' - 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']) -// webConfig.mode = 'production' -// 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')) - console.log() -} diff --git a/.electron-vue/dev-client.js b/.electron-vue/dev-client.js deleted file mode 100644 index 2913ea4..0000000 --- a/.electron-vue/dev-client.js +++ /dev/null @@ -1,40 +0,0 @@ -const hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') - -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 += ` - - -
- Compiling Main Process... -
- ` - } -}) diff --git a/.electron-vue/dev-runner.js b/.electron-vue/dev-runner.js deleted file mode 100644 index 51633de..0000000 --- a/.electron-vue/dev-runner.js +++ /dev/null @@ -1,190 +0,0 @@ -'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') - -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) - rendererConfig.mode = 'development' - const compiler = webpack(rendererConfig) - hotMiddleware = webpackHotMiddleware(compiler, { - log: false, - heartbeat: 2500 - }) - - compiler.hooks.compilation.tap('compilation', compilation => { - compilation.hooks.htmlWebpackPluginAfterEmit.tapAsync('html-webpack-plugin-after-emit', (data, cb) => { - hotMiddleware.publish({ action: 'reload' }) - cb() - }) - }) - - compiler.hooks.done.tap('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() - }) - } - } - ) - - server.listen(9080) - }) -} - -function startMain () { - return new Promise((resolve, reject) => { - mainConfig.entry.main = [path.join(__dirname, '../src/main/index.dev.js')].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) - - if (electronProcess && electronProcess.kill) { - manualRestart = true - process.kill(electronProcess.pid) - electronProcess = null - startElectron() - - setTimeout(() => { - manualRestart = false - }, 5000) - } - - resolve() - }) - }) -} - -function startElectron () { - var args = [ - '--inspect=5858', - path.join(__dirname, '../dist/electron/main.js') - ] - - // detect yarn or npm and process commandline args accordingly - if (process.env.npm_execpath.endsWith('yarn.js')) { - args = args.concat(process.argv.slice(3)) - } else if (process.env.npm_execpath.endsWith('npm-cli.js')) { - args = args.concat(process.argv.slice(2)) - } - - electronProcess = spawn(electron, args) - - 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() diff --git a/.electron-vue/webpack.docs.config.js b/.electron-vue/webpack.docs.config.js deleted file mode 100644 index 5a7546f..0000000 --- a/.electron-vue/webpack.docs.config.js +++ /dev/null @@ -1,120 +0,0 @@ -const HtmlWebpackPlugin = require('html-webpack-plugin') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const path = require('path') -const { VueLoaderPlugin } = require('vue-loader') -const webpack = require('webpack') - -module.exports = { - mode: 'development', - context: path.resolve(__dirname, '../docs'), - entry: './main.js', - output: { - path: path.resolve(__dirname, '../docs/dist'), - filename: "index.js" - }, - resolve: { - alias: { - 'icons': path.resolve(__dirname, '../build/icons') - } - }, - module: { - rules: [ - { - test: /\.(js|vue)$/, - enforce: 'pre', - exclude: /node_modules/, - use: { - loader: 'eslint-loader', - options: { - formatter: require('eslint-friendly-formatter') - } - } - }, - { - test: /\.styl(us)?$/, - use: [ - 'vue-style-loader', - 'css-loader', - 'stylus-loader' - ] - }, - { - test: /\.pug$/, loader: "pug-plain-loader" - }, - { - test: /\.css$/, - use: ['vue-style-loader', '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', - } - }, - { - test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, - 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]' - } - } - } - ] - }, - plugins: [ - new VueLoaderPlugin(), - new HtmlWebpackPlugin({ - template: path.resolve(__dirname, '../docs/template.html') - }), - new MiniCssExtractPlugin({filename: 'styles.css'}), - ] -} - -if (process.env.NODE_ENV === 'production') { - // module.exports.devtool = '#source-map' - // http://vue-loader.vuejs.org/en/workflow/production.html - module.exports.mode = 'production' - module.exports.plugins = (module.exports.plugins || []).concat([ - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: '"production"' - } - }), - new webpack.LoaderOptionsPlugin({ - minimize: true - }) - ]) -} diff --git a/.electron-vue/webpack.main.config.js b/.electron-vue/webpack.main.config.js deleted file mode 100644 index ad541e4..0000000 --- a/.electron-vue/webpack.main.config.js +++ /dev/null @@ -1,83 +0,0 @@ -'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 mainConfig = { - entry: { - main: path.join(__dirname, '../src/main/index.js') - }, - 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"' - }) - ) -} - -module.exports = mainConfig diff --git a/.electron-vue/webpack.renderer.config.js b/.electron-vue/webpack.renderer.config.js deleted file mode 100644 index dee9bd1..0000000 --- a/.electron-vue/webpack.renderer.config.js +++ /dev/null @@ -1,194 +0,0 @@ -'use strict' - -process.env.BABEL_ENV = 'renderer' - -const path = require('path') -const { dependencies } = require('../package.json') -const webpack = require('webpack') - -const BabiliWebpackPlugin = require('babili-webpack-plugin') -const CopyWebpackPlugin = require('copy-webpack-plugin') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const { VueLoaderPlugin } = require('vue-loader') - -/** - * 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'] - -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: /\.styl(us)?$/, - use: [ - 'vue-style-loader', - 'css-loader', - 'stylus-loader' - ] - }, - { - test: /\.less$/, - use: ['vue-style-loader', 'css-loader', 'less-loader'] - }, - { - test: /\.css$/, - use: ['vue-style-loader', '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', - less: 'vue-style-loader!css-loader!less-loader', - stylus: 'vue-style-loader!css-loader!stylus-loader' - } - } - } - }, - { - test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, - 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]' - } - } - } - ] - }, - node: { - __dirname: process.env.NODE_ENV !== 'production', - __filename: process.env.NODE_ENV !== 'production' - }, - plugins: [ - new VueLoaderPlugin(), - new MiniCssExtractPlugin({filename: 'styles.css'}), - 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', - 'utils': path.join(__dirname, '../src/renderer/utils'), - '~': path.join(__dirname, '../src'), - 'root': path.join(__dirname, '../') - }, - 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 diff --git a/.electron-vue/webpack.web.config.js b/.electron-vue/webpack.web.config.js deleted file mode 100644 index 010883a..0000000 --- a/.electron-vue/webpack.web.config.js +++ /dev/null @@ -1,139 +0,0 @@ -'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