| 
									
										
										
										
											2017-05-17 00:00:56 +09:00
										 |  |  | /** | 
					
						
							|  |  |  |  * webpack configuration | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-22 05:05:19 +09:00
										 |  |  | import * as fs from 'fs'; | 
					
						
							| 
									
										
										
										
											2018-03-15 05:26:24 +09:00
										 |  |  | import * as webpack from 'webpack'; | 
					
						
							|  |  |  | import chalk from 'chalk'; | 
					
						
							| 
									
										
										
										
											2018-04-27 19:12:15 +09:00
										 |  |  | const { VueLoaderPlugin } = require('vue-loader'); | 
					
						
							| 
									
										
										
										
											2018-03-15 05:26:24 +09:00
										 |  |  | const WebpackOnBuildPlugin = require('on-build-webpack'); | 
					
						
							| 
									
										
										
										
											2018-03-15 15:11:05 +09:00
										 |  |  | //const HardSourceWebpackPlugin = require('hard-source-webpack-plugin');
 | 
					
						
							| 
									
										
										
										
											2018-03-15 05:26:24 +09:00
										 |  |  | const ProgressBarPlugin = require('progress-bar-webpack-plugin'); | 
					
						
							| 
									
										
										
										
											2018-11-13 23:10:51 +09:00
										 |  |  | const TerserPlugin = require('terser-webpack-plugin'); | 
					
						
							| 
									
										
										
										
											2018-03-15 05:27:53 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-15 05:26:24 +09:00
										 |  |  | const constants = require('./src/const.json'); | 
					
						
							| 
									
										
										
										
											2018-02-16 03:23:10 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-06 12:17:38 +09:00
										 |  |  | const locales = require('./locales'); | 
					
						
							| 
									
										
										
										
											2018-03-15 05:26:24 +09:00
										 |  |  | const meta = require('./package.json'); | 
					
						
							| 
									
										
										
										
											2018-09-25 21:28:06 +09:00
										 |  |  | const version = meta.clientVersion; | 
					
						
							| 
									
										
										
										
											2018-03-29 14:48:47 +09:00
										 |  |  | const codename = meta.codename; | 
					
						
							| 
									
										
										
										
											2017-05-17 00:00:56 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | const isProduction = process.env.NODE_ENV == 'production'; | 
					
						
							| 
									
										
										
										
											2018-03-15 12:56:50 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-12 04:09:02 +09:00
										 |  |  | const postcss = { | 
					
						
							|  |  |  | 	loader: 'postcss-loader', | 
					
						
							|  |  |  | 	options: { | 
					
						
							|  |  |  | 		plugins: [ | 
					
						
							|  |  |  | 			require('cssnano')({ | 
					
						
							|  |  |  | 				preset: 'default' | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 		] | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-05-17 00:00:56 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-12 05:03:12 +09:00
										 |  |  | module.exports = { | 
					
						
							| 
									
										
										
										
											2018-11-12 04:09:02 +09:00
										 |  |  | 	entry: { | 
					
						
							|  |  |  | 		desktop: './src/client/app/desktop/script.ts', | 
					
						
							|  |  |  | 		mobile: './src/client/app/mobile/script.ts', | 
					
						
							|  |  |  | 		dev: './src/client/app/dev/script.ts', | 
					
						
							|  |  |  | 		auth: './src/client/app/auth/script.ts', | 
					
						
							|  |  |  | 		admin: './src/client/app/admin/script.ts', | 
					
						
							|  |  |  | 		sw: './src/client/app/sw.js' | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | 	module: { | 
					
						
							|  |  |  | 		rules: [{ | 
					
						
							|  |  |  | 			test: /\.vue$/, | 
					
						
							|  |  |  | 			exclude: /node_modules/, | 
					
						
							|  |  |  | 			use: [{ | 
					
						
							|  |  |  | 				loader: 'vue-loader', | 
					
						
							|  |  |  | 				options: { | 
					
						
							|  |  |  | 					cssSourceMap: false, | 
					
						
							|  |  |  | 					compilerOptions: { | 
					
						
							|  |  |  | 						preserveWhitespace: false | 
					
						
							| 
									
										
										
										
											2018-02-18 15:27:06 +09:00
										 |  |  | 					} | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2018-09-28 00:48:17 +09:00
										 |  |  | 			}, { | 
					
						
							|  |  |  | 				loader: 'vue-svg-inline-loader' | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | 			}] | 
					
						
							|  |  |  | 		}, { | 
					
						
							|  |  |  | 			test: /\.styl(us)?$/, | 
					
						
							|  |  |  | 			exclude: /node_modules/, | 
					
						
							|  |  |  | 			oneOf: [{ | 
					
						
							|  |  |  | 				resourceQuery: /module/, | 
					
						
							| 
									
										
										
										
											2018-03-02 06:26:31 +09:00
										 |  |  | 				use: [{ | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | 					loader: 'vue-style-loader' | 
					
						
							| 
									
										
										
										
											2018-03-02 06:26:31 +09:00
										 |  |  | 				}, { | 
					
						
							| 
									
										
										
										
											2018-03-03 13:47:55 +09:00
										 |  |  | 					loader: 'css-loader', | 
					
						
							|  |  |  | 					options: { | 
					
						
							| 
									
										
										
										
											2018-11-12 04:09:02 +09:00
										 |  |  | 						modules: true | 
					
						
							| 
									
										
										
										
											2018-03-03 13:47:55 +09:00
										 |  |  | 					} | 
					
						
							| 
									
										
										
										
											2018-11-12 04:09:02 +09:00
										 |  |  | 				}, postcss, { | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | 					loader: 'stylus-loader' | 
					
						
							| 
									
										
										
										
											2018-03-02 06:26:31 +09:00
										 |  |  | 				}] | 
					
						
							| 
									
										
										
										
											2018-02-21 05:55:19 +09:00
										 |  |  | 			}, { | 
					
						
							| 
									
										
										
										
											2018-03-03 13:47:55 +09:00
										 |  |  | 				use: [{ | 
					
						
							| 
									
										
										
										
											2018-04-27 19:12:15 +09:00
										 |  |  | 					loader: 'vue-style-loader' | 
					
						
							| 
									
										
										
										
											2018-03-03 13:47:55 +09:00
										 |  |  | 				}, { | 
					
						
							| 
									
										
										
										
											2018-11-12 04:09:02 +09:00
										 |  |  | 					loader: 'css-loader' | 
					
						
							|  |  |  | 				}, postcss, { | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | 					loader: 'stylus-loader' | 
					
						
							| 
									
										
										
										
											2018-03-03 13:47:55 +09:00
										 |  |  | 				}] | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | 			}] | 
					
						
							|  |  |  | 		}, { | 
					
						
							|  |  |  | 			test: /\.css$/, | 
					
						
							|  |  |  | 			use: [{ | 
					
						
							|  |  |  | 				loader: 'vue-style-loader' | 
					
						
							|  |  |  | 			}, { | 
					
						
							| 
									
										
										
										
											2018-11-12 04:09:02 +09:00
										 |  |  | 				loader: 'css-loader' | 
					
						
							|  |  |  | 			}, postcss] | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | 		}, { | 
					
						
							|  |  |  | 			test: /\.(eot|woff|woff2|svg|ttf)([\?]?.*)$/, | 
					
						
							|  |  |  | 			loader: 'url-loader' | 
					
						
							| 
									
										
										
										
											2018-10-02 16:04:31 +09:00
										 |  |  | 		}, { | 
					
						
							|  |  |  | 			test: /\.json5$/, | 
					
						
							|  |  |  | 			loader: 'json5-loader' | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | 		}, { | 
					
						
							|  |  |  | 			test: /\.ts$/, | 
					
						
							|  |  |  | 			exclude: /node_modules/, | 
					
						
							|  |  |  | 			use: [{ | 
					
						
							|  |  |  | 				loader: 'ts-loader', | 
					
						
							|  |  |  | 				options: { | 
					
						
							|  |  |  | 					happyPackMode: true, | 
					
						
							|  |  |  | 					configFile: __dirname + '/src/client/app/tsconfig.json', | 
					
						
							|  |  |  | 					appendTsSuffixTo: [/\.vue$/] | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}] | 
					
						
							|  |  |  | 		}] | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2018-11-12 04:09:02 +09:00
										 |  |  | 	plugins: [ | 
					
						
							|  |  |  | 		//new HardSourceWebpackPlugin(),
 | 
					
						
							|  |  |  | 		new ProgressBarPlugin({ | 
					
						
							|  |  |  | 			format: chalk`  {cyan.bold yes we can} {bold [}:bar{bold ]} {green.bold :percent} {gray (:current/:total)} :elapseds`, | 
					
						
							|  |  |  | 			clear: false | 
					
						
							|  |  |  | 		}), | 
					
						
							|  |  |  | 		new webpack.DefinePlugin({ | 
					
						
							|  |  |  | 			_THEME_COLOR_: JSON.stringify(constants.themeColor), | 
					
						
							|  |  |  | 			_COPYRIGHT_: JSON.stringify(constants.copyright), | 
					
						
							|  |  |  | 			_VERSION_: JSON.stringify(meta.version), | 
					
						
							|  |  |  | 			_CLIENT_VERSION_: JSON.stringify(version), | 
					
						
							|  |  |  | 			_CODENAME_: JSON.stringify(codename), | 
					
						
							|  |  |  | 			_LANGS_: JSON.stringify(Object.keys(locales).map(l => [l, locales[l].meta.lang])), | 
					
						
							|  |  |  | 			_ENV_: JSON.stringify(process.env.NODE_ENV) | 
					
						
							|  |  |  | 		}), | 
					
						
							|  |  |  | 		new webpack.DefinePlugin({ | 
					
						
							|  |  |  | 			'process.env.NODE_ENV': JSON.stringify(isProduction ? 'production' : 'development') | 
					
						
							|  |  |  | 		}), | 
					
						
							|  |  |  | 		new WebpackOnBuildPlugin((stats: any) => { | 
					
						
							|  |  |  | 			fs.writeFileSync('./built/client/meta.json', JSON.stringify({ | 
					
						
							|  |  |  | 				version | 
					
						
							|  |  |  | 			}), 'utf-8'); | 
					
						
							|  |  |  | 		}), | 
					
						
							|  |  |  | 		new VueLoaderPlugin(), | 
					
						
							|  |  |  | 		new webpack.optimize.ModuleConcatenationPlugin() | 
					
						
							|  |  |  | 	], | 
					
						
							|  |  |  | 	output: { | 
					
						
							|  |  |  | 		path: __dirname + '/built/client/assets', | 
					
						
							| 
									
										
										
										
											2018-11-12 05:03:12 +09:00
										 |  |  | 		filename: `[name].${version}.js`, | 
					
						
							| 
									
										
										
										
											2018-11-12 04:09:02 +09:00
										 |  |  | 		publicPath: `/assets/` | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | 	resolve: { | 
					
						
							|  |  |  | 		extensions: [ | 
					
						
							|  |  |  | 			'.js', '.ts', '.json' | 
					
						
							|  |  |  | 		], | 
					
						
							|  |  |  | 		alias: { | 
					
						
							|  |  |  | 			'const.styl': __dirname + '/src/client/const.styl' | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	resolveLoader: { | 
					
						
							| 
									
										
										
										
											2018-11-09 04:02:12 +09:00
										 |  |  | 		modules: ['node_modules'] | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2018-11-13 23:10:51 +09:00
										 |  |  | 	optimization: { | 
					
						
							|  |  |  | 		minimizer: [new TerserPlugin()] | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2018-05-17 09:28:31 +09:00
										 |  |  | 	cache: true, | 
					
						
							|  |  |  | 	devtool: false, //'source-map',
 | 
					
						
							|  |  |  | 	mode: isProduction ? 'production' : 'development' | 
					
						
							| 
									
										
										
										
											2018-11-12 05:03:12 +09:00
										 |  |  | }; |