summaryrefslogtreecommitdiff
path: root/electron/.electron-vue/webpack.renderer.config.js
diff options
context:
space:
mode:
authorLex Neva <lexelby@users.noreply.github.com>2020-04-28 12:34:05 -0400
committerGitHub <noreply@github.com>2020-04-28 18:34:05 +0200
commitcb2b4e3522cb7f426ba5ad3e68deb9e6ccc581ec (patch)
tree2a2f38823c3c9f0b5439ce2aa7c9040299109292 /electron/.electron-vue/webpack.renderer.config.js
parenteb526927e16954390d06929535d6f5c3766b5f6c (diff)
electron simulator (#531)
Diffstat (limited to 'electron/.electron-vue/webpack.renderer.config.js')
-rw-r--r--electron/.electron-vue/webpack.renderer.config.js173
1 files changed, 173 insertions, 0 deletions
diff --git a/electron/.electron-vue/webpack.renderer.config.js b/electron/.electron-vue/webpack.renderer.config.js
new file mode 100644
index 00000000..82727c04
--- /dev/null
+++ b/electron/.electron-vue/webpack.renderer.config.js
@@ -0,0 +1,173 @@
+'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
+ */
+// 'vue-slider-component' needed here due to this issue:
+// https://github.com/SimulatedGREG/electron-vue/issues/725
+let whiteListedModules = ['vue', 'vue-slider-component']
+
+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: /\.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'
+ }
+ }
+ }
+ },
+ {
+ 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'
+ },
+ 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