lilishop-ui/manager/vue.config.js

93 lines
2.2 KiB
JavaScript

const path = require("path");
const CompressionPlugin = require("compression-webpack-plugin");
const resolve = dir => {
return path.join(__dirname, dir);
};
module.exports = {
css: {
loaderOptions: {
// 向 CSS 相关的 loader 传递选项
less: {
lessOptions: {
javascriptEnabled: true
}
}
}
},
devServer: {
port: 10003
},
chainWebpack: config => {
// @ 对应 src目录
config.resolve.alias.set("@", resolve("src"));
},
// 打包时不生成.map文件 避免看到源码
productionSourceMap: false,
// 部署优化
configureWebpack: {
// 使用CDN
externals: {
vue: "Vue",
"vue-i18n": "VueI18n",
axios: "axios",
"vue-router": "VueRouter",
vuex: "Vuex",
"view-design": "iview",
xlsx: "XLSX",
dplayer: "DPlayer",
"print-js": "printJS",
html2canvas: "html2canvas",
"vue-json-pretty": "VueJsonPretty",
"vue-lazyload": "VueLazyload",
gitalk: "Gitalk",
"js-cookie": "Cookies",
wangEditor: "wangEditor",
quill: "Quill",
stompjs: "Stomp",
"sockjs-client": "SockJS",
vuedraggable: "vuedraggable"
},
// GZIP压缩
plugins: [
new CompressionPlugin({
test: /\.js$|\.html$|\.css/, // 匹配文件
threshold: 10240 // 对超过10k文件压缩
})
],
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("@", "")}`;
}
}
}
}
}
},
pluginOptions: {
"style-resources-loader": {
preProcessor: "scss",
patterns: [path.resolve(__dirname, "./src/styles/common.scss")]
}
}
};