const path = require("path");
const resolve = (dir) => path.join(__dirname, dir);
const CopyWebpackPlugin = require("copy-webpack-plugin");
const webpack = require("webpack");
const cesiumSource = "./node_modules/cesium/Source";
const cesiumWorkers = "../Source/Workers";
function extendDefaultPlugins(arr) {
let plug = [
"removeDoctype",
"removeXMLProcInst",
"removeComments",
"removeMetadata",
"removeEditorsNSData",
"cleanupAttrs",
"mergeStyles",
"inlineStyles",
"minifyStyles",
"cleanupIDs",
"removeUselessDefs",
"cleanupNumericValues",
"convertColors",
"removeUnknownsAndDefaults",
"removeNonInheritableGroupAttrs",
"removeUselessStrokeAndFill",
"removeViewBox",
"cleanupEnableBackground",
"removeHiddenElems",
"removeEmptyText",
"convertShapeToPath",
"convertEllipseToCircle",
"moveElemsAttrsToGroup",
"moveGroupAttrsToElems",
"collapseGroups",
"convertPathData",
"convertTransform",
"removeEmptyAttrs",
"removeEmptyContainers",
"mergePaths",
"removeUnusedNS",
"sortDefsChildren",
"removeTitle",
"removeDesc",
];
return plug.concat(arr);
}
// 添加less继承
function addStyleResource(rule) {
rule
.use("style-resource")
.loader("style-resources-loader")
.options({
patterns: [resolve("src/assets/styles/common/common.less")],
});
}
module.exports = {
publicPath: "./", // 默认'/',部署应用包时的基本 URL
indexPath: "index.html", // 相对于打包路径index.html的路径
outputDir: "dist", // 'dist', 生产环境构建文件的目录
assetsDir: "static", // 相对于outputDir的静态资源(js、css、img、fonts)目录
lintOnSave: false, // 是否在开发环境下通过 eslint-loader 在每次保存时 li
runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本
configureWebpack: {
plugins: [
new CopyWebpackPlugin([
{ from: path.join(cesiumSource, cesiumWorkers), to: "Workers" },
]),
new CopyWebpackPlugin([
{ from: path.join(cesiumSource, "Assets"), to: "Assets" },
]),
new CopyWebpackPlugin([
{ from: path.join(cesiumSource, "Widgets"), to: "Widgets" },
]),
new CopyWebpackPlugin([
{
from: path.join(cesiumSource, "ThirdParty/Workers"),
to: "ThirdParty/Workers",
},
]),
new webpack.DefinePlugin({
CESIUM_BASE_URL: JSON.stringify("./"),
}),
],
},
chainWebpack: (config) => {
config.resolve.symlinks(true); // 修复热更新失效
config.plugin("html").tap((args) => {
args[0].title = "发电场站生产实时运营管理平台";
return args;
});
// 路径别名
config.resolve.alias
.set("@", resolve("src"))
.set("@node", resolve("node_modules"))
.set("@com", resolve("src/components"))
.set("@assets", resolve("src/assets"))
.set("@api", resolve("src/api"))
.set("@store", resolve("src/store"))
.set("@modeConfig", resolve("public/static/config"))
.set("@tools", resolve("src/tools"))
.set("cesium", resolve("node_modules/cesium/Source"));
// less 继承
const types = ["vue-modules", "vue", "normal-modules", "normal"];
types.forEach((type) =>
addStyleResource(config.module.rule("less").oneOf(type))
);
const metaLoaderRule = config.module.rule("meta-loader");
metaLoaderRule
.test(/\.js$/)
.use("@open-wc/webpack-import-meta-loader")
.loader("@open-wc/webpack-import-meta-loader");
// svg 雪碧图
config.module // 排除其他svg-loader
.rule("svg")
.exclude.add(resolve("src/assets/icon/svg"))
.end()
.exclude.add(resolve("src/assets/icon/svg_fill"))
.end();
// svg雪碧图
const svgRule = config.module.rule("icons");
svgRule
.test(/\.svg$/)
.include.add(resolve("src/assets/icon/svg"))
.end()
.use("svg-sprite-loader")
.loader("svg-sprite-loader")
.options({
symbolId: "svg-[name]",
// extract: true,
// publicPath: "img/",
// spriteFilename: "svg-sprite-[hash:8].svg",
});
// config
// .plugin("svgsprite")
// .use(SVGSpriteLoaderPlugin, [{
// plainSprite: true
// }]);
// svgo 去除svg中无用元素
svgRule
.use("svgo-loader")
.loader("svgo-loader")
.options({
plugins: extendDefaultPlugins([
{
name: "removeAttrs",
params: {
attrs: "fill",
},
},
]),
});
// svg雪碧图 不去除fill属性
// const svgRuleFill = config.module.rule('icons_fill');
// svgRuleFill.test(/\.svg$/)
// .include.add(resolve('src/assets/icon/svg_fill'))
// .end()
// .use('svg-sprite-loader')
// .loader('svg-sprite-loader')
// .options({
// symbolId: 'fill-[name]',
// // extract: true,
// // publicPath: "img/",
// // spriteFilename: "svg-sprite-[hash:8].svg",
// });
// // config
// // .plugin("svgsprite")
// // .use(SVGSpriteLoaderPlugin, [{
// // plainSprite: true
// // }]);
// // svgo 去除svg中无用元素
// svgRuleFill.use('svgo-loader').loader('svgo-loader').options({
// plugins: extendDefaultPlugins([])
// });
},
devServer: {
//代理配置
proxy: {
"/cbk": {
target: "https://h5.caibeike.com.cn/", // 请求地址
changeOrigin: true, // 在vue-cli3中,默认changeOrigin的值是true,意味着服务器host设置成target,这与vue-cli2不一致,vue-cli2这个默认值是false
// changeOrigin的值是true,target是host, request URL是http://baidu.com
// 如果设置changeOrigin: false,host就是浏览器发送过来的host,也就是localhost:8082。
pathRewrite: {
// 路径重写,eg:把api接口替换为''
"^/cbk": "",
},
},
},
open: false, // 是否打开浏览器
},
};