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 相关文章推荐
document.documentElement && document.documentElement.scrollTop
Dec 01 Javascript
10个新的最有前途的JavaScript框架
Mar 12 Javascript
zTree插件之多选下拉菜单实例代码
Nov 06 Javascript
JS+CSS实现的拖动分页效果实例
May 11 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
Jan 20 Javascript
jQuery表单设置值的方法
Jun 30 jQuery
详解Vue结合后台的列表增删改案例
Aug 21 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
Jan 22 Javascript
ES6 Map结构的应用实例分析
Jun 26 Javascript
vue下axios拦截器token刷新机制的实例代码
Jan 17 Javascript
vue 动态添加class,三个以上的条件做判断方式
Nov 02 Javascript
可拖拽组件slider.js使用方法详解
Dec 04 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
yii2超好用的日期组件和时间组件
2016/05/05 PHP
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
文字垂直滚动之javascript代码
2015/07/29 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
2016/12/14 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
Python循环语句中else的用法总结
2016/09/11 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
python使用多进程的实例详解
2018/09/19 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
Django Rest framework频率原理与限制
2019/07/26 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
员工生日会策划方案
2014/06/14 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
给老婆的道歉信
2015/01/20 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
小学班主任自我评价
2015/03/11 职场文书
工作简报怎么写
2015/07/21 职场文书