vue 2分环境打包以及优化

在项目开发中,我们往往需要区分开发版、测试版、pre版、prod版,如果每次打包前都要去修改API地址就太麻烦了,那么如何根据不同的环境打包呢?


1、安装cross-env

 npm i --save-dev cross-env

2、修改各环境下的参数

1)在config文件夹下新建pre.env.js和test.env.js文件

2)修改prod.env.js文件的内容

'use strict'

module.exports = {   

     NODE_ENV: '"prod"',    

    BASE_URL: '"http://www.aaa.com/prod"'   // 这里写生产环境地址 

 }   

3)修改pre.env.js文件的内容

'use strict'

module.exports = {    

   NODE_ENV: '"pre"',     

  BASE_URL: '"http://www.aaa.com/pre"'   // 这里写预上线环境地址 

 }   

4)修改test.env.js文件内容

'use strict'

module.exports = {     

    NODE_ENV: '"test"',      

    BASE_URL: '"http://www.aaa.com/test"'   // 这里写测试环境地址  

}  

5)修改dev.env.js文件内容,让其去合并测试环境的url

'use strict'

const merge = require('webpack-merge')

const prodEnv = require('./test.env')    // 将此处的./prod.env修改为./test.env 

// 合并测试上的,不用写东西

module.exports = merge(prodEnv, {

     NODE_ENV: '"development"'

})

6)修改webpack.prod.conf.js文件

   将const env = require('../config/prod.env')改为如下:

const nodeEnv = process.env.NODE_ENV

const env = require(`../config/${nodeEnv}.env`)

7)修改build.js文件

    将process.env.NODE_ENV = 'production'改为如下:

const nodeEnv = process.env.NODE_ENV

    将const spinner = ora(‘production’)改为:

let text = ''

switch (nodeEnv) {

case 'prod' :

  text = {

    color: 'green',

    text: '正在为生产环境打包.......'

  }

break;

case 'pre' :

  text = {

    color: 'blue',

    text: '正在为预上线环境打包.......'

  }

break;

case 'test' :

  text = {

    color: 'red',

    text: '正在为测试环境打包.......'

  }

}

const spinner = ora(text)

8)修改 package.json文件

"scripts": {

   "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",

   "start": "npm run dev", "lint": "eslint --ext .js,.vue src",

   "build:prod": "cross-env NODE_ENV=prod node build/build.js",

   "build:dev": "cross-env NODE_ENV=test node build/build.js",

   "build:pre": "cross-env NODE_ENV=pre node build/build.js"

},

到此,执行不同的打包命令可以了。

打包配置好之后,还需要对项目进行进一步的优化,如使用CDN资源和gzip压缩

1.使用CDN资源

使用CDN在index.html文件中引入(我用的是BootCDN

<link href="https://cdn.bootcss.com/element-ui/2.10.1/theme-chalk/index.css" rel="stylesheet">

<script src="https://cdn.bootcss.com/vue/2.5.21/vue.min.js"></script>

<script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>

<script src="https://cdn.bootcss.com/element-ui/2.10.1/index.js"></script>

<script src="https://cdn.bootcss.com/axios/0.19.0-beta.1/axios.min.js"></script>

<script src="https://cdn.bootcss.com/vuex/3.1.1/vuex.min.js"></script>

修改build/webpack.base.conf.js文件

module.exports = {

    // CDN

    externals: { 

        'vue': 'Vue',

         'vue-router': 'VueRouter', 

        'vuex': 'Vuex',

         'element-ui':'ELEMENT', 

        'axios':'axios'

    }

}

最后将main.js文件中的引入注释掉,个人测试了一下,不注释掉的话,打包体积也是会缩小的,因为打包生产环境时,运行的是webpack.base.conf.js这个文件中的配置,所以不会把CDN引入的那些依赖打包进去(如果不注释掉的话,个人觉得应该保证CDN引入的版本和npm安装的版本号一致,以免生产环境中出现问题不好排错)

2.gzip压缩

vue-cli生成的项目会自动配好相关的设置,只需我们开启就可以了,找到config/index.js文件

productionGzip: true, // 默认是false,改为true

如图:

config/index.js

打开build/webpack.prod.conf.js文件,找到如下图代码,发现如果开启gzip压缩,还需要安装compression-webpack-plugin

build/webpack.prod.conf.js

所以我们来安装下compression-webpack-plugin,直接安装可能会出现版本冲突的报错,建议安装低版本的,执行如下命令:

npm i -D compression-webpack-plugin@1.11.2

到此,前端的gzip配置就完成了,当然还得修改服务器的配置

3. 打包之后出现一些map文件,不想要怎么办?

首先介绍下map文件的作用:项目打包后,代码都是经过压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错。

有了map就可以像未加密的代码一样,准确的输出是哪一行哪一列有错。

如果觉得不需要这些map文件,可以找到config/index.js,进行如下修改(看个人项目需要)

productionSourceMap: false    // 默认是true

github地址:Avery_G

(注:每一篇文章都会对应有demo,已上传到个人github)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,176评论 5 469
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,190评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,232评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,953评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,879评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,177评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,626评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,295评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,436评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,365评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,414评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,096评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,685评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,771评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,987评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,438评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,032评论 2 341

推荐阅读更多精彩内容

  • 说明 本文代码中的配置基于vue-cli2 需求 在实际开发中我们可能有测试环境一套请求API 和 正式环境一套A...
    chengfengwang阅读 2,275评论 0 1
  • 最近要把Vue项目部署到服务器上,在测试好的项目中执行npm run build就开始打包了。但是每次只能打包到一...
    赵客缦胡缨v吴钩霜雪明阅读 11,222评论 1 19
  • 我们开发项目的时候,用vue-cli 2.x版本新建的项目,只有dev, pro两种开发环境, 有时需要个test...
    码路芽子阅读 455评论 0 0
  • 一个人的一生,只有一程。前途渺渺,无为不艰辛,途中所识,亦无为不齐放异彩。 这一生,叹命运,过于短暂,叹痛苦,却又...
    不谢的牛阅读 433评论 4 7
  • "吃"一定是春节的重头戏,大年三十年夜饭,朋友圈里北方朋友一定晒的是热气腾腾,各式花样的饺子,南方朋友饭桌上必定晒...
    紫桔梗阅读 281评论 0 1