禁止私自转载。运营公众号、社交账号,请坚持原创。勿做知识剽窃者!
# vue-cli4 全面配置(持续更新)
  细致全面的 vue-cli4 配置信息。涵盖了使用 vue-cli 开发过程中大部分配置需求。
  不建议直接拉取此项目作为模板,希望能按照此教程按需配置,或者复制 vue.config.js 增删配置,并自行安装所需依赖。
  vue-cli3 配置见 [vue-cli3 分支](https://github.com/staven630/vue-cli4-config/tree/vue-cli3)。
  <span style="color: red;">Vite 配置见 [vite-config](https://github.com/staven630/vite-config)</span>。
### 其他系列
★ [Blog](https://github.com/staven630/blog)
★ [Nuxt.js 全面配置](https://github.com/staven630/nuxt-config)
<span id="top">目录</span>
- [√ 配置多环境变量](#env)
- [√ 配置基础 vue.config.js](#base)
- [√ 配置 proxy 跨域](#proxy)
- [√ 修复 HMR(热更新)失效](#hmr)
- [√ 修复 Lazy loading routes Error: Cyclic dependency](#lazyloading)
- [√ 添加别名 alias](#alias)
- [√ 压缩图片](#compressimage)
- [√ 自动生成雪碧图](#spritesmith)
- [√ SVG 转 font 字体](#font)
- [√ 使用 SVG 组件](#svg)
- [√ 去除多余无效的 css](#removecss)
- [√ 添加打包分析](#analyze)
- [√ 配置 externals 引入 cdn 资源](#externals)
- [√ 多页面打包 multi-page](#multiple-pages)
- [√ 删除 moment 语言包](#moment)
- [√ 去掉 console.log](#log)
- [√ 利用 splitChunks 单独打包第三方模块](#splitchunks)
- [√ 开启 gzip 压缩](#gzip)
- [√ 开启 stylelint 检测scss, css语法](#stylelint)
- [√ 为 sass 提供全局样式,以及全局变量](#globalscss)
- [√ 为 less 提供全局样式,以及全局变量](#globalless)
- [√ 为 stylus 提供全局变量](#globalstylus)
- [√ 预渲染 prerender-spa-plugin](#prerender)
- [√ 添加 IE 兼容](#ie)
- [√ 静态资源自动打包上传阿里 oss、华为 obs](#alioss)
- [√ 完整依赖](#allconfig)
### <span id="env">✅ 配置多环境变量</span>
  通过在 package.json 里的 scripts 配置项中添加--mode xxx 来选择不同环境
  只有以 VUE_APP 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端侧的包中,代码中可以通过 process.env.VUE_APP_BASE_API 访问
  NODE_ENV 和 BASE_URL 是两个特殊变量,在代码中始终可用
##### 配置
  在项目根目录中新建.env, .env.production, .env.analyz 等文件
- .env
  serve 默认的本地开发环境配置
```javascript
NODE_ENV = "development"
BASE_URL = "./"
VUE_APP_PUBLIC_PATH = "./"
VUE_APP_API = "https://test.staven630.com/api"
```
- .env.production
  build 默认的环境配置(正式服务器)
```javascript
NODE_ENV = "production"
BASE_URL = "https://prod.staven630.com/"
VUE_APP_PUBLIC_PATH = "https://prod.oss.com/staven-blog"
VUE_APP_API = "https://prod.staven630.com/api"
ACCESS_KEY_ID = "xxxxxxxxxxxxx"
ACCESS_KEY_SECRET = "xxxxxxxxxxxxx"
REGION = "oss-cn-hangzhou"
BUCKET = "staven-prod"
PREFIX = "staven-blog"
```
- .env.crm
  自定义 build 环境配置(预发服务器)
```javascript
NODE_ENV = "production"
BASE_URL = "https://crm.staven630.com/"
VUE_APP_PUBLIC_PATH = "https://crm.oss.com/staven-blog"
VUE_APP_API = "https://crm.staven630.com/api"
ACCESS_KEY_ID = "xxxxxxxxxxxxx"
ACCESS_KEY_SECRET = "xxxxxxxxxxxxx"
REGION = "oss-cn-hangzhou"
BUCKET = "staven-crm"
PREFIX = "staven-blog"
IS_ANALYZE = true;
```
  修改 package.json
```javascript
"scripts": {
"build": "vue-cli-service build",
"crm": "vue-cli-service build --mode crm"
}
```
##### 使用环境变量
```javascript
<template>
<div class="home">
<!-- template中使用环境变量 -->
API: {{ api }}
</div>
</template>
<script>
export default {
name: "home",
data() {
return {
api: process.env.VUE_APP_API
};
},
mounted() {
// js代码中使用环境变量
console.log("BASE_URL: ", process.env.BASE_URL);
console.log("VUE_APP_API: ", process.env.VUE_APP_API);
}
};
</script>
```
[▲ 回顶部](#top)
### <span id="base">✅ 配置基础 vue.config.js</span>
```javascript
const IS_PROD = ["production", "prod"].includes(process.env.NODE_ENV);
module.exports = {
publicPath: IS_PROD ? process.env.VUE_APP_PUBLIC_PATH : "./", // 默认'/',部署应用包时的基本 URL
// outputDir: process.env.outputDir || 'dist', // 'dist', 生产环境构建文件的目录
// assetsDir: "", // 相对于outputDir的静态资源(js、css、img、fonts)目录
lintOnSave: false,
runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本
productionSourceMap: !IS_PROD, // 生产环境的 source map
parallel: require("os").cpus().length > 1,
pwa: {}
};
```
[▲ 回顶部](#top)
### <span id="proxy">✅ 配置 proxy 代理解决跨域问题</span>
  假设 mock 接口为https://www.easy-mock.com/mock/5bc75b55dc36971c160cad1b/sheets/1
```javascript
module.exports = {
devServer: {
// overlay: { // 让浏览器 overlay 同时显示警告和错误
// warnings: true,
// errors: true
// },
// open: false, // 是否打开浏览器
// host: "localhost",
// port: "8080", // 代理断就
// https: false,
// hotOnly: false, // 热更新
proxy: {
"/api": {
target:
"https://www.easy-mock.com/mock/5bc75b55dc36971c160cad1b/sheets", // 目标代理接口地址
secure: false,
changeOrigin: true, // 开启代理,在本地创建一个虚拟服务端
// ws: true, // 是否启用websockets
pathRewrite: {
"^/api": "/"
}
}
}
}
};
```
  访问
```javascript
<script>
import axios from "axios";
export default {
mounted() {
axios.get("/api/1").then(res => {
console.log('proxy:', res);
});
}
};
</script>
```
[▲ 回顶部](#top)
### <span id="hmr">✅ 修复 HMR(热更新)失效</span>
  如果热更新失效,如下操作:
```javascript
module.exports = {
chainWebpack: config => {
// 修复HMR
config.resolve.symlinks(true);
}
};
```
[▲ 回顶部](#top)
### <span id="lazyloading">✅ 修复 Lazy loading routes Error: Cyclic dependency</span> [https://github.com/vuejs/vue-cli/issues/1669](https://github.com/vuejs/vue-cli/issues/1669)
```javascript
module.exports = {
chainWebpack: config => {
// 如果使用多页面打包,使用vue inspect --plugins查看html是否在结果数组中
config.plugin("html").tap(args => {
// 修复 Lazy loading routes Error
args[0].chunksSortMode = "none";
return args;
});
}
};
```
[▲ 回顶部](#top)
### <span id="alias">✅ 添加别名 alias</span>
```javascript
const path = require("path");
const resolve = dir => path.join(__dirname, dir);
const IS_PROD = ["production", "prod"].includes(process.env.NODE_ENV);
module.exports = {
chainWebpack: config => {
// 添加别名
config.resolve.alias
.set("vue$", "vue/dist/vue.esm.js")
.set("@", resolve("src"))
.set("@assets", resolve("src/assets"))
.set("@scss", resolve("src/assets/scss"))
.set("@components", resolve("src/components"))
.set("@plugins", resolve("src/plugins"))
.set("@views", resolve("src/views"))
.set("@router", resolve("src/router"))
.set("@store", resolve("src/store"))
.set("@layouts", resolve("src/layouts"))
.set("@static", resolve("src/static"));
}
};
```
[▲ 回顶部](#top)
### <span id="compressimage">✅ 压缩图片</span>
```javascript
npm i -D image-webpack-loader
```
  在某些版本的 OSX 上安装可能会因缺少 libpng 依赖项而引发错误。可以通过安装最新版本的 libpng 来解决。
```javascript
brew install libpng
```
```javascript
module.exports = {
chainWebpack: con
赵闪闪168
- 粉丝: 1726
- 资源: 6942
最新资源
- LabVIEW基于Kvaser USBcan的UDS烧录Hex文件 程序包含 1. 基于ISO14229 UDS通讯,适用于各种服务,如常用的10,22,2E,27,34等服务 2. 解析Hex烧录文
- Comsol54二维旋磁光子晶体单向传输及能带分析 包含二维光子晶体单胞能带求解,超胞能带求解以及单向传输激发
- 大型三菱plcQ系列 四个QD77简易运动模块,通信总线控制 48 轴,程序八万步,写法新颖,思路清晰 读性性和可移植性强,带远程I O 以态网通信,视觉通信,伺服参数设置 程序虽然复杂,但分块编写
- 欧姆龙PLC项目程序NJ系列模切机程序 1、12轴EtherCAT总线伺服运动控制,包含回零、点动、定位、速度控制 2、张力控制PID算法,收放卷径计算, 3、隔膜自动纠偏控制,模拟量数据平均
- k-medoids 聚类方法的MATLAB源代码,导入数据部分和画图部分已经用中文给出了注释 这儿选取一个对象叫做mediod来代替上面的中心 的作用,这样的一个medoid就标识了这个类
- 工业运动控制器,自动追剪,飞剪,旋切 流水线追随工作方式,电子凸轮插补跟踪控制系统,移栽装配机械手,视觉定位功能
- modbus主站源码STM32F103正常使用,读取多个从机功能码通信,写从机寄存器,移植简单,模块化编程,已经过整理,程序流程清晰
- FPGA 以太网 UPD IP 协议实现 fpga 千兆以FPGA 以太网 UPD IP 协议实现 fpga 千兆以FPGA 以太网 UPD IP 协议实现, fpga 千兆以太网接口控制器,FP
- 含分布式电源的三相潮流计算,程序采用前推回代法开展潮流计算,考虑了三相不平衡的情况,通过求解,得到了三相的电压分布和相角分布,同时,还与单相的结果开展对比
- 基于多目标粒子群算法的微电网优化 首先构建了含风光柴储的微电网模型,之后以风光柴储运行成本最低和风光消纳最大为目标,建立了多目标优化模型,模型考虑功率平衡储能SOC等约束通过模型求解得到帕累托前沿 再
- wincc嵌入式excel报表 一、功能介绍 该报表系统能够读取WINCC中历史归档数据,产生出EXCEL报表文件,同时在画面中EXCEL控件实时显示 该报表系统有如下优点: 1、 该报表系统具备日
- 博图WINCC历史数据记录到SQL数据库 将博图WinCC中的变量作为历史数据记录到SQL Server数据库中,并将历史数据记录作为曲线图的方式展示出来,软件采用博图V15.1 Adanced编写
- matlab程序,电力市场,天然气市场出清,主要研究了多方博弈行为及其对市场出清和能源价格的影响 电力市场出清
- 西门子官方飞据例子,定长切断等,1500+v90伺服做的,非常值得学习的资料文件是博图v16.
- 三菱PLC pid程序 三菱触摸屏程序和三菱PLC程序,程序都有注释,用的三菱FX3U系列plc,程序简单仅供入门学习,是入门级三菱PLC电气爱好从业人员学习模板
- Qt数据导入导出(pdf xls)及打印源码 1. 组件同时集成了导出数据到csv、xls、pdf和打印数据 2. 所有操作全部提供静态方法无需new,数据和属性等各种参数设置采用结构体数据,极为方
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈