vue-cli3分环境打包配置

概述

在项目开发过程中一般会分为三种运行环境:开发环境、预览环境、生产环境,不同的环境在配置上的要求会有所不同,最简单的例子就是不同的环境对后端的接口请求地址不同。

打包过程中因需区分不同的运行环境而经常要手动去修改配置,这是一项枯燥且没有技术含量的工作,对于这种能用工具解决的工作就不要去人肉操作了,就算避免不了人肉操作,但也尽量让它来得简单点,比如输入不同命令就自动打不同环境的包。

接下来主要讲解在vue-cli3项目中怎么解放人肉配置打包,利用工程化和自动化提高打包效率。

第一步:创建配置文件

在项目根目录创建3个配置文件
.env.development 开发模式打包(运行命令 npm run serve 默认读取的配置)
.env.production 生产模式打包(运行命令 npm run build 默认读取的配置)
.env.preview 预览模式打包(运行命令 npm run build --mode preview 需要读取的配置)

注:vue-cli3脚手架中内置了.env.development.env.production的默认配置,新增这两个配置文件后打包过程中webpack会合并默认配置和自定义配置的内容

.env.development

NODE_ENV = 'development'
VUE_APP_TITLE = 'development'
VUE_APP_BASE_URL = 'http://development.lihefei.com:8080'
VUE_APP_WEBSOCKET_URL = 'ws://development.lihefei.com:21000'

.env.production

NODE_ENV = 'production'
VUE_APP_TITLE = 'production'
VUE_APP_BASE_URL = 'http://lihefei.com:8080'
VUE_APP_WEBSOCKET_URL = 'ws://lihefei.com:21000'

.env.preview

NODE_ENV = 'production'
VUE_APP_TITLE = 'preview'
VUE_APP_BASE_URL = 'http://alpha.lihefei.com:8080'
VUE_APP_WEBSOCKET_URL = 'ws://alpha.lihefei.com:21000'
outputDir = 'preview'

属性说明:
NODE_ENV = development 开发环境
NODE_ENV = production 生产环境

VUE_APP_TITLE = development 开发模式打包
VUE_APP_TITLE = preview 预览模式打包
VUE_APP_TITLE = production 生产模式打包

VUE_APP_BASE_URL 后端常规业务接口地址(自定义,必选)
VUE_APP_WEBSOCKET_URL 后端websocket推送接口地址(自定义,项目没有需求就不需要添加这一行配置)

outputDir 打包输出目录名称(.env.development.env.production因vue-cli3脚手架中有默认配置可以省略该项)

第二步:修改package.json

在scripts中新增命令:"preview": "vue-cli-service build --mode preview"

"scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "preview": "vue-cli-service build --mode preview"
}

第三步:新建process-env.js获取接口地址

这个文件的作用是获取到process.env自定义的各种参数,然后根据需求自定义输出

export const baseUrl = process.env.VUE_APP_BASE_URL; //后端常规业务接口地址
export const websocketUrl = process.env.VUE_APP_WEBSOCKET_URL; //后端websocket推送接口地址

export default {
    baseUrl,
    websocketUrl
};

第四步:配置axios的baseURL

import { baseUrl } from './process-env'; 
axios.defaults.baseURL = baseUrl;

第五步:编辑vue.config.js配置输出路径

module.exports = {
	outputDir: process.env.outputDir, //根据配置文件输出目录
};

第六步:打包

通过前面的配置后,可以输入不同的命令实现差异化打包

正式生产环境打包

npm run build  

预览环境打包

npm run preview

到这一步已经满足不同打包模式下接口的自动配置,可以愉快的尝试不同环境的打包效果了
如果对打包优化或更多差异化处理感兴趣继续往下看吧

第七步:打包优化及差异化处理

继续编辑vue.config.js配置文件

优化点:
1.生产环境不生成map文件
2.区分开发环境与生产环境静态资源路径
3.正式生产环境删除debugger及console.log

const isProduction = process.env.NODE_ENV === 'production'; //是否是生产环境
const isPreview = process.env.VUE_APP_TITLE === 'preview'; //是否是预览环境
const TerserPlugin = require('terser-webpack-plugin');  //压缩js的插件(需npm安装)
module.exports = {
	outputDir: process.env.outputDir, //根据配置文件输出目录
    productionSourceMap: !isProduction, //非生产环境才生成map文件
    publicPath: isProduction ? './' : '/', //打包时区分开发环境与生产环境静态资源路径
    
    configureWebpack: config => {
    	if (isProduction && !isPreview) {
    		//生产环境删除debugger及console.log
    		config.plugins.push(
                new TerserPlugin({
                    terserOptions: {
                        ecma: undefined,
                        warnings: false,
                        parse: {},
                        compress: {
                            drop_console: true,
                            drop_debugger: true, //删除debugger
                            pure_funcs: ['console.log'] // 移除console
                        }
                    }
                })
            );
    	}
    },
    chainWebpack: config => {
        if (isProduction && isPreview) {
            config.optimization.minimize(false); // 预览环境不压缩js代码
        }
    }
};

配置完这些赶紧去尝试打包体验下优化效果吧,over~~

<think>好的,用户想了解如何通过vue-cli-service build控制打包路径和内容。我需要结合提供的引用内容,特别是引用[3]、[5]关于BASE_URL和publicPath的信息,以及引用[5]中的环境变量配置。 首先,用户的问题涉及到打包路径,这通常指的是输出目录和静态资源的路径。根据引用[3],BASE_URL对应vue.config.js中的publicPath,所以需要指导用户如何配置publicPath。另外,引用[5]提到VUE_APP_publicPath作为环境变量,可能需要在.env文件中设置。 然后,关于打包内容,可能需要修改输出目录,这可以通过vue.config.js中的outputDir来设置。同时,引用[4]提到使用Electron-Builder打包,但用户的问题可能更关注常规的Vue打包配置,所以重点放在vue.config.js的配置上。 还要注意环境变量的使用,不同模式对应不同的配置,如production模式对应vue-cli-service build。需要说明如何通过不同.env文件(如.env.production)来设置变量,并引用[2]中的模式说明。 最后,确保回答结构清晰,步骤说明配置方法,并给出示例代码,比如修改vue.config.js和使用环境变量。同时,根据用户需求生成相关问题,比如多环境配置、静态资源路径修改等。</think>### 如何通过 `vue-cli-service build` 自定义打包路径和内容? #### 1. **控制打包路径** 打包路径主要通过以下两个配置实现: - **`publicPath`**:控制静态资源(JS/CSS/图片等)的访问路径 在 `vue.config.js` 中配置: ```javascript module.exports = { publicPath: process.env.VUE_APP_PUBLICPATH || "/" // 优先级:环境变量 > 默认值 }; ``` 可通过 `.env` 文件定义环境变量(例如 `.env.production`): ```bash VUE_APP_PUBLICPATH=/sub-directory/ ``` 最终生成的静态资源路径会变为 `https://domain.com/sub-directory/js/app.js`[^3][^5]。 - **`outputDir`**:控制打包文件的输出目录 ```javascript module.exports = { outputDir: "dist_custom" // 默认是 "dist" }; ``` #### 2. **控制打包内容** - **选择性打包文件** 使用 `chainWebpack` 或 `configureWebpack` 修改 Webpack 配置: ```javascript module.exports = { chainWebpack: config => { if (process.env.NODE_ENV === "production") { config.plugin("define").tap(args => { args[0]["process.env"].EXCLUDE_MODULE = "true"; return args; }); } } }; ``` - **动态注入环境变量** 在 `.env.[mode]` 文件中定义变量(如 `.env.staging`): ```bash VUE_APP_API_URL=https://api.staging.com ``` 代码中通过 `process.env.VUE_APP_API_URL` 访问[^2][^5]。 #### 3. **多环境配置示例** 1. 创建 `.env.staging` 文件: ```bash NODE_ENV=production VUE_APP_PUBLICPATH=/staging/ VUE_APP_API_URL=https://staging.api.com ``` 2. 执行打包命令: ```bash vue-cli-service build --mode staging ``` 此时会使用 `staging` 模式下的配置[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值