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 相关文章推荐
JavaScript 版本自动生成文章摘要
Jul 23 Javascript
面向对象的编程思想在javascript中的运用上部
Nov 20 Javascript
通过js动态操作table(新增,删除相关列信息)
May 23 Javascript
jQuery DOM操作实例
Mar 05 Javascript
浅谈javascript面向对象程序设计
Jan 21 Javascript
jQuery实现简洁的导航菜单效果
Nov 23 Javascript
ztree实现权限横向显示功能
May 20 Javascript
深入理解vue.js中的v-if和v-show
Jun 22 Javascript
node使用Koa2搭建web项目的方法
Oct 17 Javascript
如何为你的JavaScript代码日志着色详解
Apr 08 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
Apr 12 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
使用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
杏林同学录(三)
2006/10/09 PHP
PHP 开发环境配置(测试开发环境)
2010/04/28 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
python实现的简单抽奖系统实例
2015/05/22 Python
python实现桌面气泡提示功能
2019/07/29 Python
python学生信息管理系统实现代码
2019/12/17 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
机械专业毕业生自荐信
2013/11/02 职场文书
元旦晚会邀请函
2014/01/27 职场文书
人事专员工作职责
2014/02/22 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
责任担保书范文
2014/05/21 职场文书
十周年庆典策划方案
2014/06/03 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
单位收入证明范本
2015/06/18 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书