文章目录

  • 前言:
  • 常用配置项如下:
  • 常用配置项说明:

前言:

注意:
使用 vue-cli 3.x 以上的脚手架创建的 vue 项目不再有 build 文件夹,若需要进行相关配置,需在项目目录下新建文件 vue.config.js ;如下:

常用配置项如下:

注意:baseUrl从 Vue CLI 3.3 起已弃用从而使用publicPath来替代;


/* 引入打包分析插件 */
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
/* 引入压缩插件 但是导致项目启动的比较慢*/
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');let isProduction = process.env.NODE_ENV === 'production'; // 判断是否是生产环境
let isTest = process.env.NODE_ENV === 'test'; // 判断是否是测试环境// 服务端ip  -- Uat环境
const api = 'http://10.1.12.181:26341';
// 自己启动的node服务 代理到本地
const nodeApi = 'http://127.0.0.1:3000';module.exports = {/* 打包后的文件夹名字及路径  根目录下 */outputDir: 'dist/video',/* 生产的项目名   development是开发环境 可以用三元运算符*/publicPath: process.env.NODE_ENV === 'production' ? '/video/' : '/',/* 保存时是否校验 */lintOnSave: false,/* 开发环境跨域情况的代理配置 */devServer: {https: false,   // 链接是否使用https访问 但可能在微信中不能打开(安全性问题) 不写此行配置默认 使用http协议打开port: '31001',  // 指定要监听请求的端口号open: true,     // 是否运行好直接在默认浏览器打开inline: true,   // 用于设置代码保存时是否自动刷新页面。hot: true,      // 用于设置代码保存时是否进行热更新(局部刷新,不刷新整个页面)disableHostCheck: true, //可以被外网访问/* 当出现编译器错误或警告时,在浏览器中显示全屏覆盖层。默认禁用。两种写法*/// overlay: true, // 第一种overlay: {//第二种warnings: false, //是否警告errors: false,},/* 接口代理器设置 可以配置多个*/proxy: {'/backend': {// 实际访问的服务器地址target: nodeApi,// 控制服务器收到的请求头中Host字段的值  host就是主机名加端口号  实际上就是欺骗后端服务器changeOrigin: true,// 是否启用websocketsws: false,// 重写请求路径  开头是/api的替换为 空串// pathRewrite: { '/api': '' },},},},/* css相关设置 */css: {extract: false, // 是否使用css分离插件 ExtractTextPlugin  开启extract后,组件样式以内部样式表的形式加载的, 打包的结果会多出一个 css 文件夹以及css 文件。sourceMap: true, // 开启 CSS source maps?/* 向所有 Sass/Less 样式传入共享的全局变量 */loaderOptions: {//注意:在 sass-loader v8 中,这个选项名是 "prependData"  global.scss这里面定义的是一些全局变量scss: {prependData: '@import "~@/assets/scss/global.scss";',},},},/* webpack相关配置*该对象将会被 webpack-merge 合并入最终的 webpack 配置*/configureWebpack: (config) => {// 生产环境配置if (process.env.NODE_ENV === 'production') {/* js 压缩 */config.plugins.push(new UglifyJsPlugin({uglifyOptions: {uglifyOptions: {compress: {drop_debugger: true,drop_console: true, // 生产环境自动删除console},warnings: false,},sourceMap: false,parallel: true, // 使用多进程并行运行来提高构建速度。默认并发运行数:os.cpus().length - 1。},}));} else {// 测试环境开启打包分析config.plugins.push(new BundleAnalyzerPlugin());}},/* 对内部的 webpack 配置(比如修改、增加Loader选项)(链式操作) */chainWebpack: (config) => {/* 关闭 console.log 生产环境如果为了安全起见,需要在正式环境关闭调试的话,可以在vue.config.js文件里加入以下代码*/config.optimization.minimizer('terser').tap((args) => {// 移除 console*args[0].terserOptions.compress.drop_console = true;// 移除 debuggerargs[0].terserOptions.compress.drop_debugger = true;// 移除 console.logargs[0].terserOptions.compress.pure_funcs = ['console.log'];// 去掉注释 如果需要看chunk-vendors公共部分插件,可以注释掉就可以看到注释了args[0].terserOptions.output = {comments: false,};return args;});// 设置路径别名 config.resolve.alias.set('@', resolve('src')).set('assets', resolve('src/assets')).set('components', resolve('src/components'))// 压缩图片插件config.module.rule('images')/* 注意会报这个错误 Cannot find module 'imagemin-gifsicle' 需要下载cnpm install --save-dev image-webpack-loader 才有效*/.use('image-webpack-loader').loader('image-webpack-loader').options({mozjpeg: { progressive: true, quality: 65 },optipng: { enabled: false },pngquant: { quality: [0.8, 0.9], speed: 4 },gifsicle: { interlaced: false },webp: { quality: 75 },});},/* 第三方插件配置 */pluginOptions: {'process.env': {NODE_ENV: '"development"',},// 我这里用的是 vue-cli-plugin-mock 插件;用来开发前期模拟后端的请求// debug 为true时 vscode的控制台会打印接口日志// mock: { entry: './mock/index.js', debug: false },},
};

常用配置项说明:

1,outputDir

打包后的文件输出路径,比如:dist/video就是默认在根目录下面新建 dist目录和video文件夹(打包好的包)

outputDir: 'dist/video',

2,publicPath

publicPath是部署应用包时的基本 URL;写法上可以使用三元运算符进行判断是否是生产环境和开发环境; 这个配置在项目部署时比较重要;详细介绍见这篇文章:vue中的publicPath讲解

publicPath: process.env.NODE_ENV === 'production' ? '/video/' : '/',

注意:baseUrl从 原先的Vue CLI 3.3版本起被已弃用从而使用publicPath来替代;

3,lintOnSave

设置是否在开发环境下每次保存代码时都启用eslint进行验证。

 /* 保存时是否校验 */lintOnSave: false,

4,devServer模块

此模块也比较重要,涉及到开发时项目的一些基本配置和解决接口的跨域问题( Node代理);

 /* 开发环境跨域情况的代理配置 */devServer: {https: false,   // 链接是否使用https访问 但可能在微信中不能打开(安全性问题) 不写此行配置默认 使用http协议打开port: '31001',  // 指定要监听请求的端口号open: true,     // 是否运行好直接在默认浏览器打开inline: true,   // 用于设置代码保存时是否自动刷新页面。hot: true,      // 用于设置代码保存时是否进行热更新(局部刷新,不刷新整个页面)disableHostCheck: true, //可以被外网访问/* 当出现编译器错误或警告时,在浏览器中显示全屏覆盖层。默认禁用。两种写法*/// overlay: true, // 第一种overlay: {//第二种warnings: false, //是否警告errors: false,},/* 接口代理器设置 可以配置多个*/proxy: {'/backend': {// 实际访问的服务器地址target: nodeApi,// 控制服务器收到的请求头中Host字段的值  host就是主机名加端口号  实际上就是欺骗后端服务器changeOrigin: true,// 是否启用websocketsws: false,// 重写请求路径  开头是/api的替换为 空串// pathRewrite: { '/api': '' },     },},},

proxy中的参数 target是要代理的后端接口ip;changeOrigin:true设置跨域请求; ws: true如果要代理 websockets,配置这个参数;pathRewrite:{ '/api': '' }为重写路径,我这样设置的效果为接口开头是/api的就替换为空,这个要根据实际情况进行变换;

5,css相关设置

 css: {extract: false, // 是否使用css分离插件 ExtractTextPlugin  开启extract后,组件样式以内部样式表的形式加载的, 打包的结果会多出一个 css 文件夹以及css 文件。sourceMap: true, // 开启 CSS source maps?/* 向所有 Sass/Less 样式传入共享的全局变量 */loaderOptions: {//注意:在 sass-loader v8 中,这个选项名是 "prependData"  global.scss这里面定义的是一些全局变量scss: {prependData: '@import "~@/assets/scss/global.scss";',},},},

6,webpack相关配置

webpack配置分为两个配置模块:configureWebpackchainWebpack配置项;

1,配置 configureWebpack有两种写法:

第一种:调整 webpack 配置最简单的方式就是在 vue.config.js 中的 configureWebpack 选项提供一个对象:

// vue.config.js
module.exports = {configureWebpack: {plugins: [new MyAwesomeWebpackPlugin()]}
}

该对象将会被 webpack-merge 合并入最终的 webpack 配置。

第二种:如果你需要基于环境有条件地配置行为,或者想要直接修改配置,那就换成一个函数 (该函数会在环境变量被设置之后懒执行)。该方法的第一个参数会收到已经解析好的配置。在函数内,你可以直接修改配置,或者返回一个将会被合并的对象:

// vue.config.js
module.exports = {configureWebpack: config => {if (process.env.NODE_ENV === 'production') {// 为生产环境修改配置...} else {// 为开发环境修改配置...}}
}

我配置的:我这里使用了第二种的配置写法;判断vue运行环境进行有条件的进行配置;在生产环境中我使用 UglifyJsPlugin插件进行对js代码的压缩;在测试环境下面 我使用了 BundleAnalyzerPlugin打包分析工具,用于分析代码的构成和大小;

configureWebpack: (config) => {// 生产环境配置if (process.env.NODE_ENV === 'production') {/* js 压缩 */config.plugins.push(new UglifyJsPlugin({uglifyOptions: {uglifyOptions: {compress: {drop_debugger: true,drop_console: true, // 生产环境自动删除console},warnings: false,},sourceMap: false,parallel: true, // 使用多进程并行运行来提高构建速度。默认并发运行数:os.cpus().length - 1。},}));} else {// 测试环境开启打包分析config.plugins.push(new BundleAnalyzerPlugin());}},

2,配置 chainWebpack

chainWebpack是可以进行链式操作的,它允许我们更加精确的进行内部配置,在对于一些loader 时非常有用;
如下比较vue的chainWebpack链式配置和webpack中的webpack.config.js文件‘:左侧是vue的右侧是webpack的配置文件:

更加详细的配置说明请见vue-cli官网

下面是我常用的chainWebpack配置: 主要配置了关闭vconsole和配置路径别名以及 使用 image-webpack-loader图片压缩插件;

/* 对内部的 webpack 配置(比如修改、增加Loader选项)(链式操作) */chainWebpack: (config) => {/* 关闭 console.log 生产环境如果为了安全起见,需要在正式环境关闭调试的话,可以在vue.config.js文件里加入以下代码*/config.optimization.minimizer('terser').tap((args) => {// 移除 console*args[0].terserOptions.compress.drop_console = true;// 移除 debuggerargs[0].terserOptions.compress.drop_debugger = true;// 移除 console.logargs[0].terserOptions.compress.pure_funcs = ['console.log'];// 去掉注释 如果需要看chunk-vendors公共部分插件,可以注释掉就可以看到注释了args[0].terserOptions.output = {comments: false,};return args;});// 设置路径别名 config.resolve.alias.set('@', resolve('src')).set('assets', resolve('src/assets')).set('components', resolve('src/components'))// 压缩图片插件config.module.rule('images')/* 注意会报这个错误 Cannot find module 'imagemin-gifsicle' 需要下载cnpm install --save-dev image-webpack-loader 才有效*/.use('image-webpack-loader').loader('image-webpack-loader').options({mozjpeg: { progressive: true, quality: 65 },optipng: { enabled: false },pngquant: { quality: [0.8, 0.9], speed: 4 },gifsicle: { interlaced: false },webp: { quality: 75 },});},

7,pluginOptions(第三方插件配置)

pluginOptions模块是第三方插件配置:我这边配置了 使用vue-cli-plugin-mock 模拟后端的请求数据流程;不想使用此插件的时候直接注释掉即可;

 /* 第三方插件配置 */pluginOptions: {// 我这里用的是 vue-cli-plugin-mock 插件;用来开发前期模拟后端的请求// debug 为true时 vscode的控制台会打印接口日志mock: { entry: './mock/index.js', debug: false },},

vue - vue的配置文件vue.config.js介绍相关推荐

  1. webpack 3 零基础入门教程 #4 - webpack 的配置文件 webpack.config.js

    在命令行中运行 webpack 命令确实可以实现 webpack 的功能,但是我们一般不这么做,我们要用配置文件来处理. 我们把之前学到的知识用 webpack 的配置文件来实现,配置文件的名字叫 w ...

  2. Vue中使用配置文件vue.config.js简化文件夹路径

    一.首先创建vue.config.js(名字不能更改) 二.使用vue.config.js为常用的文件路径进行标识 module.exports = {configureWebpack: {resol ...

  3. webpack 4.0 配置文件 webpack.config.js文件的放置位置

    一般webpack.config.js是默认放在根目录的,不在根目录的时候需要在package.json中制定位置,我的配置文件目录是config/webpack.config.js,在package ...

  4. webpack2教程--1webpack的安装和webpack.config.js介绍

    之前都是gulp之类的,现在都什么时代了!是时候学习webpack,现在都webpack4.x了,没办法,我这种弱鸡就只能webpack2开始. webpack官网文件 前提 安装node,安装成功, ...

  5. webpack配置文件:webpack.config.js(一)

    1.webpack的配置文件webpack.config.js //const HtmlWebpackPlugin = require('html-webpack-plugin'); module.e ...

  6. tailwindcss 官网(六)定制:配置( `tailwind.config.js `、-p、important、核心插件、`resolveConfig`)、主题 `theme` 配置

    tailwindcss 官网(六)定制:配置( tailwind.config.js.-p.important.核心插件.resolveConfig).主题 theme 配置 文章目录 tailwin ...

  7. VUE-CLI可选的配置文件vue.config.js

    VUE-CLI可选的配置文件 vue.config.js 整理自官方文档,仅供博文https://blog.csdn.net/qq_28550263/article/details/120633610 ...

  8. Vue 2 中,使用Vite作为前端构建开发工具,替代webpack(一)——vite.config.js配置文件

    Vue 2 中,使用Vite作为前端构建开发工具,替代webpack(一)--vite.config.js配置文件 当前版本 vite@2.3.7和vite@2.4.4 "vite" ...

  9. (三)01 -Vue项目打包发布移动App——vue.config.js中配置相对路径publicPath为空字符串 在public中添加HBuilderX的打包配置文件manifest.json

    Vue 项目打包发布移动 App--npm run build打包 & vue.config.js文件中配置相对路径publicPath为空字符串 & 在 public中添加HBuil ...

最新文章

  1. 【硬件基础】制作直流电源
  2. jquery.validate不用submit而用js提交的例子
  3. python 爬取道客巴巴文档_Python常用的几个高效率的爬虫框架
  4. Webex远程网络视频会议使用指南
  5. centos 6.7下安装rabbitmq 3.6.6过程
  6. 免费Opengrok-代码阅读工具:Kernel,Optee,ATF,Uboot...
  7. 润乾报表与DERBY数据库的创建连接详解
  8. flink 6-检查点和水位线
  9. 【Linux系统编程】Linux 进程调度浅析
  10. 调试实战 | 通过转储文件分析程序无响应之使用 windbg + IDA 逆向篇
  11. 【渝粤教育】电大中专跨境电子商务理论与实务 (9)作业 题库
  12. Yoast SEO wordpress插件 + 所有扩展
  13. 百度SEO站群404二次元时间倒计时页面源码
  14. ffmpeg函数介绍
  15. 惠普HP DeskJet 2131 打印机驱动
  16. JavaScript 动态生成表格 案例
  17. antdesign 新增页面_ant design pro 新增页面
  18. SecureCRT通过vim打开文件时显示行号
  19. Goldendict 及其词典详述
  20. 第二章:简单古典密码(及其五元组)

热门文章

  1. Arduino融资3200万美元,进军企业市场
  2. 2018年中国互联网企业100强
  3. 【C语言】——C语言实现科赫雪花及科赫曲线
  4. 尚硅谷在线教育六:尚硅谷在线教育课程分类管理开发
  5. 图片分类网络ViT、MobileViT、Swin-Transformer、MobileNetV3、ConvNeXt、EfficientNetV2
  6. 嵌入式系统的开发流程
  7. joystick手柄驱动安卓_Android下如何支持普通USB手柄,或者有相关驱动?
  8. python二级第三方库汇总
  9. 小蛋白泛素(Ub)共价附着降解靶向嵌合体-Ibrutinib/HS-27/Ibrutinib-biotin
  10. 基于开源WebSocket服务器宝贝鱼(CshBBrain)的应用横空出世