"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;