Vue CLI4 Vue.config.js标准配置(最全注释)


Posted in Javascript onJune 05, 2020

前言:

Vue.js CLI工具 不知不觉发展到了4.0时代,CLI给人最直白的感受是没有了build文件夹跟config文件夹,所有的配置都在Vue.config.js完成。那么该文件的配置至关重要。现在我们来看一下最新配置是怎么配置的。

安装

npm i -d vue-cli-configjs
// vue.config.js
const path = require('path');
const CompressionWebpackPlugin = require("compression-webpack-plugin"); // 开启gzip压缩, 按需引用
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i; // 开启gzip压缩, 按需写入
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin; // 打包分析
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV);
const resolve = (dir) => path.join(__dirname, dir);
module.exports = {
  publicPath: process.env.NODE_ENV === 'production' ? '/site/vue-demo/' : '/', // 公共路径
  indexPath: 'index.html' , // 相对于打包路径index.html的路径
  outputDir: process.env.outputDir || 'dist', // 'dist', 生产环境构建文件的目录
  assetsDir: 'static', // 相对于outputDir的静态资源(js、css、img、fonts)目录
  lintOnSave: false, // 是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码
  runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本
  productionSourceMap: !IS_PROD, // 生产环境的 source map
  parallel: require("os").cpus().length > 1, // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。
  pwa: {}, // 向 PWA 插件传递选项。
  chainWebpack: config => {
    config.resolve.symlinks(true); // 修复热更新失效
    // 如果使用多页面打包,使用vue inspect --plugins查看html是否在结果数组中
    config.plugin("html").tap(args => {
      // 修复 Lazy loading routes Error
      args[0].chunksSortMode = "none";
      return args;
    });
    config.resolve.alias // 添加别名
      .set('@', resolve('src'))
      .set('@assets', resolve('src/assets'))
      .set('@components', resolve('src/components'))
      .set('@views', resolve('src/views'))
      .set('@store', resolve('src/store'));
    // 压缩图片
    // 需要 npm i -D image-webpack-loader
    config.module
      .rule("images")
      .use("image-webpack-loader")
      .loader("image-webpack-loader")
      .options({
        mozjpeg: { progressive: true, quality: 65 },
        optipng: { enabled: false },
        pngquant: { quality: [0.65, 0.9], speed: 4 },
        gifsicle: { interlaced: false },
        webp: { quality: 75 }
      });
    // 打包分析, 打包之后自动生成一个名叫report.html文件(可忽视)
    if (IS_PROD) {
      config.plugin("webpack-report").use(BundleAnalyzerPlugin, [
        {
          analyzerMode: "static"
        }
      ]);
    }
  },
  configureWebpack: config => {
    // 开启 gzip 压缩
    // 需要 npm i -D compression-webpack-plugin
    const plugins = [];
    if (IS_PROD) {
      plugins.push(
        new CompressionWebpackPlugin({
          filename: "[path].gz[query]",
          algorithm: "gzip",
          test: productionGzipExtensions,
          threshold: 10240,
          minRatio: 0.8
        })
      );
    }
    config.plugins = [...config.plugins, ...plugins];
  },
  css: {
    extract: IS_PROD,
    requireModuleExtension: false,// 去掉文件名中的 .module
    loaderOptions: {
        // 给 less-loader 传递 Less.js 相关选项
        less: {
          // `globalVars` 定义全局对象,可加入全局变量
          globalVars: {
            primary: '#333'
          }
        }
    }
  },
  devServer: {
      overlay: { // 让浏览器 overlay 同时显示警告和错误
       warnings: true,
       errors: true
      },
      host: "localhost",
      port: 8080, // 端口号
      https: false, // https:{type:Boolean}
      open: false, //配置自动启动浏览器
      hotOnly: true, // 热更新
      // proxy: 'http://localhost:8080'  // 配置跨域处理,只有一个代理
      proxy: { //配置多个跨域
        "/api": {
          target: "http://172.11.11.11:7071",
          changeOrigin: true,
          // ws: true,//websocket支持
          secure: false,
          pathRewrite: {
            "^/api": "/"
          }
        },
        "/api2": {
          target: "http://172.12.12.12:2018",
          changeOrigin: true,
          //ws: true,//websocket支持
          secure: false,
          pathRewrite: {
            "^/api2": "/"
          }
        },
      }
    }
}

结语

上述代码可以直接复制,也可以按需引入,一般都用的到,注意里面需要安装的依赖。

cnpm install --save-dev compression-webpack-plugin
cnpm install --save-dev image-webpack-loader

到此这篇关于Vue CLI4 Vue.config.js标准配置(最全注释)的文章就介绍到这了,更多相关Vue.config.js标准配置内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!,希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery autocomplate 自扩展插件、自动完成示例代码
Mar 28 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
Mar 28 Javascript
Bootstrap登陆注册页面开发教程
Jul 12 Javascript
WebPack基础知识详解
Jan 16 Javascript
js简单实现网页换肤功能
Apr 07 Javascript
javascript 缓冲运动框架的实现
Sep 29 Javascript
react-native-video实现视频全屏播放的方法
Mar 19 Javascript
JS实现左边列表移到到右边列表功能
Mar 28 Javascript
利用Blob进行文件上传的完整步骤
Aug 02 Javascript
Vue中的transition封装组件的实现方法
Aug 13 Javascript
解决layer.confirm选择完之后消息框不消失的问题
Sep 16 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
Apr 11 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
Jun 05 #Javascript
Vue路由的模块自动化与统一加载实现
Jun 05 #Javascript
Jquery滑动门/tab切换实现方法完整示例
Jun 05 #jQuery
详解JS函数防抖
Jun 05 #Javascript
Vuex的各个模块封装的实现
Jun 05 #Javascript
js实现表单项的全选、反选及删除操作示例
Jun 05 #Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
Jun 05 #Javascript
You might like
使用php+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
PHP异常处理Exception类
2015/12/11 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
javascript cookies操作集合
2010/04/12 Javascript
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
jQuery实现日历效果
2020/09/11 jQuery
微信小程序实现点击页面出现文字
2020/09/21 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
详解Python多线程
2016/11/14 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
python3.x上post发送json数据
2018/03/04 Python
Python入门学习指南分享
2018/04/11 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
编辑个人求职信范文
2013/09/21 职场文书
淘宝店铺营销方案
2014/02/13 职场文书
交通安全标语
2014/06/06 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
房屋租赁协议书
2014/10/18 职场文书
退货证明模板
2015/06/23 职场文书
医院见习总结
2015/06/24 职场文书