"use strict";
const path = require("path");
const defaultSettings = require("./src/settings.js");
const webpack = require("webpack");
const CompressionPlugin = require("compression-webpack-plugin");
// const zlib = require("zlib");
function resolve(dir) {
	return path.join(__dirname, dir);
}

const name = defaultSettings.title || "vue Admin Template"; // page title

const port = 8888 || process.env.port || process.env.npm_config_port; // dev port

module.exports = {
	publicPath: "./",
	outputDir: "dist",
	assetsDir: "static",
	lintOnSave: process.env.NODE_ENV === "development",

	// lintOnSave: false,
	productionSourceMap: false,
	devServer: {
		// 配置反向代理
		compress: true, // 配置webpack的压缩,但是在package.json中需要配置 --compress
		port: port,
		open: true,
		overlay: {
			warnings: false,
			errors: true,
		},
		proxy: {
			// 地址中有 /api 的时候会触发代理
			"/api_prod": {
				// target: "http://localhost:8001/",
				target: "http://bl7.matripe.com.cn:8001",
				// target: "http://1shoudan.renminshitang.com.cn",
				// target: "https://idaotian.com",
				// target: "https://d.matripe.com.cn",
				ws: true, // proxy websockets
				changeOrigin: true, // 确定是否跨域
				pathRewrite: {
					"^/api_prod": "",
				},
			},
			"/yishoudan": {
				// target: "http://localhost:8001/",
				// target: "http://bl7.matripe.com.cn:8001",
				// target: "http://1shoudan.renminshitang.com.cn",
				target: "https://idaotian.com",
				// target: "https://d.matripe.com.cn",
				ws: true, // proxy websockets
				changeOrigin: true, // 确定是否跨域
				pathRewrite: {
					"^/yishoudan": "/yishoudan",
				},
			},
			//   '/api_prod': {
			//     target: 'http://a.matripe.com.cn',
			//     ws: true,  // proxy websockets
			//     changeOrigin: true,  // needed for virtual hosted sites
			//     pathRewrite: {
			//         '^/api_prod': ''  // rewrite path
			//     }
			// },
			// '/api_dev': {
			//     target: 'http://nb.renminshitang.com.cn:8001',
			//     ws: true,  // proxy websockets
			//     changeOrigin: true,  // needed for virtual hosted sites
			//     pathRewrite: {
			//         '^/api_dev': '/'  // rewrite path
			//     }
			// }
			// ,'/api_test': {
			//     target: 'http://localhost:8003',
			//     ws: true,  // proxy websockets
			//     changeOrigin: true,  // needed for virtual hosted sites
			//     pathRewrite: {
			//         '^/api_test': ''  // rewrite path
			//     }
			// }
		},
		// before: require('./mock/mock-server.js')
	},
	chainWebpack: (config) => {
		// console.dir(config.optimization.minimizer);
		// 开发环境的webpack配置
		config.when(process.env.NODE_ENV === "development", (config) => {
			config.entry("app").clear().add("./src/main-dev.js");
			config.set("externals", {});
		});
		// 生产环境的webpack配置
		config.when(process.env.NODE_ENV === "production", (config) => {
			config.entry("app").clear().add("./src/main-prod.js");
		});
		// if (process.env.NODE_ENV === "production") {
		// 忽略输出 Pass true to discard calls to console.* functions.
		// config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true;
		// }
		config.plugins.delete("fork-ts-checker"), // 禁用fork-ts-checker
			config.plugins.delete("prefetch");
	},

	configureWebpack: {
		// provide the app's title in webpack's name field, so that
		// it can be accessed in index.html to inject the correct title.
		name: name,

		resolve: {
			alias: {
				"@": resolve("src"),
				"@ant-design/icons/lib/dist.$": resolve("src/icons.js"),
			},
		},
		plugins: [
			// new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
			// // 下面两项配置才是 compression-webpack-plugin 压缩配置
			// // 压缩成 .gz 文件
			// new CompressionPlugin({
			// 	algorithm: "gzip",
			// 	test: /\.js$|\.html$|\.css/, //匹配文件名
			// 	threshold: 10240,
			// 	minRatio: 0.8,
			// 	deleteOriginalAssets: false, // 是否删除源文件
			// }),
			// 压缩成 .br 文件，如果 zlib 报错无法解决，可以注释这段使用代码，一般本地没问题，需要注意线上服务器会可能发生找不到 zlib 的情况。
			// new CompressionPlugin({
			//   filename: '[path].br',
			//   algorithm: 'brotliCompress',
			//   test: /\.(js|css|html|svg)$/,
			//   compressionOptions: {
			//     params: {
			//       [zlib.constants.BROTLI_PARAM_QUALITY]: 11
			//     }
			//   },
			//   threshold: 10240,
			//   minRatio: 0.8,
			//   deleteOriginalAssets: true //是否删除原文件
			// })
		],
		// },
		optimization: {
			runtimeChunk: "single",
			splitChunks: {
				chunks: "all",
				maxInitialRequests: Infinity,
				minSize: 20000,
				cacheGroups: {
					vendor: {
						test: /[\\/]node_modules[\\/]/,
						name(module) {
							// get the name. E.g. node_modules/packageName/not/this/part.js
							// or node_modules/packageName
							const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
							// npm package names are URL-safe, but some servers don't like @ symbols
							return `npm.${packageName.replace("@", "")}`;
						},
					},
				},
			},
		},
		// chainWebpack (config) {
		//   // it can improve the speed of the first screen, it is recommended to turn on preload
		//   config.plugin('preload').tap(() => [
		//     {
		//       rel: 'preload',
		//       // to ignore runtime.js
		//       // https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171
		//       fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
		//       include: 'initial'
		//     }
		//   ])

		//   // when there are many pages, it will cause too many meaningless requests
		//   config.plugins.delete('prefetch')

		//   // set svg-sprite-loader
		//   config.module
		//     .rule('svg')
		//     .exclude.add(resolve('src/icons'))
		//     .end()
		//   config.module
		//     .rule('icons')
		//     .test(/\.svg$/)
		//     .include.add(resolve('src/icons'))
		//     .end()
		//     .use('svg-sprite-loader')
		//     .loader('svg-sprite-loader')
		//     .options({
		//       symbolId: 'icon-[name]'
		//     })
		//     .end()

		//   config
		//     .when(process.env.NODE_ENV !== 'development',
		//       config => {
		//         config
		//           .plugin('ScriptExtHtmlWebpackPlugin')
		//           .after('html')
		//           .use('script-ext-html-webpack-plugin', [{
		//           // `runtime` must same as runtimeChunk name. default is `runtime`
		//             inline: /runtime\..*\.js$/
		//           }])
		//           .end()
		//         config
		//           .optimization.splitChunks({
		//             chunks: 'all',
		//             cacheGroups: {
		//               libs: {
		//                 name: 'chunk-libs',
		//                 test: /[\\/]node_modules[\\/]/,
		//                 priority: 10,
		//                 chunks: 'initial' // only package third parties that are initially dependent
		//               },
		//               elementUI: {
		//                 name: 'chunk-elementUI', // split elementUI into a single package
		//                 priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
		//                 test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
		//               },
		//               commons: {
		//                 name: 'chunk-commons',
		//                 test: resolve('src/components'), // can customize your rules
		//                 minChunks: 3, //  minimum common number
		//                 priority: 5,
		//                 reuseExistingChunk: true
		//               }
		//             }
		//           })
		//         // https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk
		//         config.optimization.runtimeChunk('single')
		//       }
		//     )
		// }
	},
};
