212 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "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;
 |