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 Dialog(JS 模态窗口,可拖拽的DIV)
Feb 07 Javascript
JavaScript按位运算符的应用简析
Feb 04 Javascript
node-http-proxy修改响应结果实例代码
Jun 06 Javascript
AngularJS中的包含详细介绍及实现示例
Jul 28 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
Sep 14 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
Dec 01 Javascript
JavaScript 中调用 Kotlin 方法实例详解
Jun 09 Javascript
写给小白看的JavaScript异步
Nov 29 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
Sep 03 Javascript
一次让你了解全部JavaScript的作用域
Jun 24 Javascript
vue路由传参页面刷新参数丢失问题解决方案
Oct 08 Javascript
Vue组件为什么data必须是一个函数
Jun 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.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
php验证身份证号码正确性的函数
2016/07/20 PHP
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
利用VS Code开发你的第一个AngularJS 2应用程序
2017/12/15 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
javascript实现计算指定范围内的质数示例
2018/12/29 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
python实现dijkstra最短路由算法
2019/01/17 Python
django rest framework vue 实现用户登录详解
2019/07/29 Python
Django 框架模型操作入门教程
2019/11/05 Python
python使用Geany编辑器配置方法
2020/02/21 Python
python 利用toapi库自动生成api
2020/10/19 Python
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
学习雷锋演讲稿
2014/05/10 职场文书
小学运动会演讲稿
2014/08/25 职场文书
关于环保的活动方案
2014/08/25 职场文书
政协会议宣传标语
2014/10/09 职场文书
销售区域经理岗位职责
2015/04/10 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers