/* * @Date: 2023-06-18 10:09:15 * @LastEditors: zhubj * @LastEditTime: 2023-06-19 10:49:41 * @Description: 头部注释 * @FilePath: \own-vue3-vuecli-template\vue.config.js */ 'use strict' const path = require('path') function resolve(dir) { return path.join(__dirname, dir) } const { defineConfig } = require('@vue/cli-service') const name = process.env.VUE_APP_TITLE || '网页标题' // 网页标题 const port = process.env.port || process.env.npm_config_port || 8011 // 端口 // element-plus 按需导入自动导入的插件 const AutoImport = require('unplugin-auto-import/webpack') const Components = require('unplugin-vue-components/webpack') const { ElementPlusResolver } = require('unplugin-vue-components/resolvers') // 实现 gzip 压缩打包 const CompressionPlugin = require('compression-webpack-plugin') // 添加less继承 function addStyleResource(rule) { rule .use("style-resource") .loader("style-resources-loader") .options({ patterns: [resolve("src/assets/styles/common/common.less")], }); } 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); } module.exports = defineConfig({ // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上 // 例如 https://www.my-app.com/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径 // 例如,如果你的应用被部署在 https://www.my-app.com/my-app/,则设置 publicPath 为 /my-app/ publicPath: process.env.NODE_ENV === "production" ? "/" : "/", // 当运行 vue-cli-service build 时生成的生产环境构建文件的目录。注意目标目录的内容在构建之前会被清除 (构建时传入 --no-clean 可关闭该行为)。 outputDir: 'dist', // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录 assetsDir: 'static', // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 productionSourceMap: false, // 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。你可以启用本选项,以避免构建后的代码中出现未转译的第三方依赖(对所有的依赖都进行转译可能会降低构建速度) transpileDependencies: false, // webpack-dev-server 相关配置 devServer: { client: { progress: true, overlay: false }, host: '0.0.0.0', port: port, open: false, proxy: { // detail: https://cli.vuejs.org/config/#devserver-proxy // [process.env.VUE_APP_GENERAT_URL]: { // // target: 'http://123.60.219.66:9002', // target: 'http://192.168.2.12:9002', // changeOrigin: true, //开启代理 // pathRewrite: { // [process.env.VUE_APP_GENERAT_URL]: '' // } // }, // [process.env.VUE_APP_BASE_URL]: { // target: 'http://123.60.219.66:8086', // changeOrigin: true, // pathRewrite: { // [process.env.VUE_APP_BASE_URL]: '' // } // } } }, // 和webpapck属性完全一致,最后会进行合并 configureWebpack: { name: name, resolve: { alias: { '@': resolve('src'), '@tools': resolve('./src/tools'), '@api': resolve('./src/api'), '@com': resolve('./src/components'), '@public': resolve('public'), '@node': resolve('node_modules'), '@assets': resolve('src/assets'), '@store': resolve('src/store'), '@modeConfig': resolve('public/static/config'), // 'cesium': resolve('node_modules/cesium/Source'), }, fallback: { "https": false, "zlib": false, "http": false, "url": false }, mainFiles: ['index', 'Cesium'] }, //配置webpack自动按需引入element-plus plugins: [ AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件 new CompressionPlugin({ test: /\.(js|css|html)?$/i, // 压缩文件格式 filename: '[path][base].gz', // 压缩后的文件名 algorithm: 'gzip', // 使用gzip压缩 threshold: 10240, // 最小文件开启压缩 minRatio: 0.8 // 压缩率小于1才会压缩 }) ], }, chainWebpack(config) { // 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]", }); // svgo 去除svg中无用元素 svgRule .use("svgo-loader") .loader("svgo-loader") .options({ plugins: extendDefaultPlugins([ { name: "removeAttrs", params: { attrs: "fill", }, }, ]), }); } })