• vue cli3之vue.config.js 文件配置


    'use strict'
    const path = require('path')
    
    function resolve(dir) {
      return path.join(__dirname, dir)
    }
    
    const name = 'vue project' // page title
    // If your port is set to 80,
    // use administrator privileges to execute the command line.
    // For example, Mac: sudo npm run
    const port = 8081 // dev port
    const HtmlWebpackPlugin = require('html-webpack-plugin') // 引入CDN配置插件
    const externals = { // 不打包插件
      // vue: 'Vue',
      // 'vue-router': 'VueRouter',
      // vuex: 'Vuex',
      // axios: 'axios',
      // 'element-ui': 'ElementUI',
      // vconsole:'vConsole', // 生产打包放开
      moment: 'moment',
      echarts: 'echarts'
    }
    const cdn = {
      // 开发环境
      dev: {
        css: [
    
        ],
        js: [
    
        ]
      },
      // 生产环境 配置对应CDN地址
      build: {
        css: [
          // 'https://cdn.bootcdn.net/ajax/libs/element-ui/2.5.4/theme-chalk/index.css'
        ],
        js: [
          // 'https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js',
          // 'https://cdn.bootcss.com/vue-router/3.0.6/vue-router.min.js',
          // 'https://cdn.bootcss.com/vuex/3.1.0/vuex.min.js',
          // 'https://cdn.bootcss.com/axios/0.19.0/axios.min.js',
          'https://cdn.bootcdn.net/ajax/libs/moment.js/2.23.0/moment.min.js',
          'https://cdn.bootcdn.net/ajax/libs/echarts/4.2.1/echarts.min.js'
        ]
      }
    }
    // All configuration item explanations can be find in https://cli.vuejs.org/config/
    module.exports = {
      // 205 || 生产
      // publicPath: '/web/vue/',
      runtimeCompiler: true, // 运行时报错配置
      publicPath: '/',
      outputDir: 'dist',
      assetsDir: 'static',
      // eslint-loader是否在保存的时候检查
      lintOnSave: false,
      // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
      productionSourceMap: false,
      devServer: {
        port: port,
        open: true,
        overlay: {
          warnings: false,
          errors: true
        },
        // 跨域代理
        proxy: {
          "/api": {
            target: 'http://192',
            changeOrigin: true, // 是否改变域名
            ws: true
            // pathRewrite: {
            //   // 路径重写
            //   "/api": "" // 这个意思就是以api开头的,定向到哪里, 如果你的后边还有路径的话, 会自动拼接上
            // }
          }
        }
      },
      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'),
            'assets': resolve('./src/assets'),
            'style': resolve('./src/style')
          }
        },
        externals: process.env.NODE_ENV === 'production' ? externals: {}
      },
      css: {
          loaderOptions: {
              postcss: {
                  plugins: [
                      require('postcss-plugin-px2rem')({
                          rootValue: 46, //换算基数, 默认100  ,这样的话把根标签的字体规定为1rem为50px,这样就可以从设计稿上量出多少个px直接在代码中写多上px了。
                          // unitPrecision: 5, //允许REM单位增长到的十进制数字。
                          //propWhiteList: [],  //默认值是一个空数组,这意味着禁用白名单并启用所有属性。
                          // propBlackList: [], //黑名单
                          exclude: /(node_module)/,  //默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值
                          // selectorBlackList: [], //要忽略并保留为px的选择器
                          // ignoreIdentifier: false,  //(boolean/string)忽略单个属性的方法,启用ignoreidentifier后,replace将自动设置为true。
                          // replace: true, // (布尔值)替换包含REM的规则,而不是添加回退。
                          mediaQuery: false,  //(布尔值)允许在媒体查询中转换px。
                          minPixelValue: 0 //设置要替换的最小像素值(3px会被转rem)。 默认 0
                      }),
                  ]
              }
          }
      },
      chainWebpack: config => {
          // config.entry.app = ['babel-polyfill', './src/main.js'];
          config.plugins.delete("preload"); // TODO: need test
          config.plugins.delete("prefetch"); // TODO: need test
    
          // 对vue-cli内部的 webpack 配置进行更细粒度的修改
          config.plugin('html').tap(args => {
            if (process.env.NODE_ENV === 'production') {
                args[0].cdn = cdn.build
            }
            if (process.env.NODE_ENV === 'development') {
                args[0].cdn = cdn.dev
            }
            return args
        })
    
          // set svg-sprite-loader
          // config.entry('main').add('babel-polyfill');
          config.module
          .rule('iview')
          .test(/iview.src.*?js$/)
          .use('babel')
            .loader('babel-loader')
            .end();
    
          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();
    
          // set preserveWhitespace
          config.module
            .rule("vue")
            .use("vue-loader")
            .loader("vue-loader")
            .tap(options => {
              options.compilerOptions.preserveWhitespace = true;
              return options;
            })
            .end();
    
          config
          // https://webpack.js.org/configuration/devtool/#development
          .when(process.env.NODE_ENV === "development", config =>
            config.devtool("cheap-source-map")
          );
    
          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", // 将elementUI拆分成一个包
                //   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(.*)/ // 以适应cnpm
                // },
                commons: {
                  name: "chunk-commons",
                  test: resolve("src/components"), // 可以自定义规则
                  minChunks: 3, //  minimum common number
                  priority: 5,
                  reuseExistingChunk: true
                }
              }
            });
            config.optimization.runtimeChunk("single");
          });
      }
    }
    

      

  • 相关阅读:
    SDOI Day2
    SDOI Day1
    Codeforces 506E Mr. Kitayuta's Gift (矩阵乘法,动态规划)
    CEOI 2014 wall (最短路)
    BZOJ 3926: [Zjoi20150]诸神眷顾的幻想乡(后缀自动机)
    BZOJ 3925: [Zjoi2015]地震后的幻想乡(概率)
    BZOJ 3924: [Zjoi2015]幻想乡战略游戏(动态点分治)
    Nginx与Lua的开发
    Nginx访问控制
    Nginx模块
  • 原文地址:https://www.cnblogs.com/love314159/p/14804277.html
Copyright © 2020-2023  润新知