Vue項目配置及部署優(yōu)化

1.啟用壓縮樱衷,讓頁面加載更快

在我們開發(fā)的時候,為了方便調(diào)試店溢,我們需要使用源碼進(jìn)行調(diào)試叁熔,但在生產(chǎn)環(huán)境,我們追求的更多的是加載更快床牧,體驗(yàn)更好荣回,這時候我們會將代碼中的空格注釋去掉,對待嗎進(jìn)行混淆壓縮戈咳,只為了讓js,css文件變得更小心软,加載更快革砸。但只是這樣做是不夠的,我們還可以做得更極致糯累。
gzip是Web世界中使用的最為廣泛的文件壓縮算法,當(dāng)前我們使用的大多數(shù)服務(wù)端(比如nginx)和客戶端(比如chrome)都已經(jīng)支持了這個算法册踩,所以如果我們在打包Vue項目的時候泳姐,可以直接將所有的靜態(tài)資源壓縮為gzip,就可以極大的減少靜態(tài)資源的大小,提升瀏覽器加載速度暂吉,那Vue項目如何配置呢胖秒?

1.1.添加vue.config.js 文件

在新建Vue項目中,默認(rèn)是沒有vue.config.js文件的慕的,首先你需要在項目根目錄新建一個vue.config.js文件阎肝,然后在文件中加入以下代碼

module.exports = {

}

本文后面會多次使用到vue.config.js文件,在后面將不再贅述肮街。

1.2.配置compression-webpack-plugin

安裝 compression-webpack-plugin

yarn add compression-webpack-plugin -D

配置
修改vue.config.js文件為以下代碼

const CompressionWebpackPlugin = require('compression-webpack-plugin')
const isProd = process.env.NODE_ENV === 'production'
module.exports = {
  configureWebpack: config => {
    if (isProd) {
      // 配置webpack 壓縮
      config.plugins.push(
        new CompressionWebpackPlugin({
          test: /\.js$|\.html$|\.css$/,
          // 超過4kb壓縮
          threshold: 4096
        })
      )
    }
  }
}

查看壓縮效果
在配置上面的壓縮之后风题,執(zhí)行yarn build命令,會發(fā)現(xiàn)生成的靜態(tài)文件里面新增了后綴為gz的文件


image.png

如果此時將項目部署到已開啟了gzip的服務(wù)器如nginx里面之后嫉父,訪問瀏覽器即可看到瀏覽器下載的是已壓縮的文件


image.png

1.3.讓moment變得更小

使用過moment的同學(xué)一定知道沛硅,moment的locale語言包特別大,但是我們一般的項目只在國內(nèi)用绕辖,也用不到那么多語言摇肌,是不是可以去掉呢?這時候你需要使用到webpack.IgnorePlugin仪际。
在vue.config.js文件围小,你需要添加以下代碼

const webpack = require('webpack')
module.exports = {
  chainWebpack: config => {
    // 優(yōu)化moment 去掉國際化內(nèi)容
    config
    .plugin('ignore')
    // 忽略/moment/locale下的所有文件
    .use(new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/))
  }
}

我們雖然按照上面的方法忽略了包含’./locale/'該字段路徑的文件目錄,但是也使得我們使用的時候不能顯示中文語言了,這時候如果想用某一種語言應(yīng)該怎么辦呢?

import moment from 'moment'
//手動引入所需要的語言包
import 'moment/locale/zh-cn';
// 指定使用的語言
moment.locale('zh-cn');

當(dāng)然更建議在項目中使用更輕量級的day.js代替moment

2.生產(chǎn)環(huán)境刪除console.log

開發(fā)環(huán)境為了調(diào)試树碱,會添加大量的console.log肯适,但如果console.log提交到生產(chǎn)環(huán)境里面,不僅僅會影響到代碼執(zhí)行性能赴恨,而且可能會泄露一些核心數(shù)據(jù)疹娶,所以我們更希望的是在生產(chǎn)環(huán)境,將所有的console.log清除掉伦连,怎么做呢雨饺?
安裝插件
需要安裝babel-plugin-transform-remove-console插件
yarn add babel-plugin-transform-remove-console -D
配置babel.config.js
打開babel.config.js文件,然后在文件內(nèi)添加

// 所有生產(chǎn)環(huán)境
const prodPlugin = []

if (process.env.NODE_ENV === 'production') {
  
// 如果是生產(chǎn)環(huán)境惑淳,則自動清理掉打印的日志额港,但保留error 與 warn
  prodPlugin.push([
    'transform-remove-console',
    {
      exclude: ['error', 'warn']
    }
  ])
}

module.exports = {
   plugins: [
     ...prodPlugin
   ]
}

3.開啟eslint,stylelint

看到這一條,有些同學(xué)就有點(diǎn)受不了想退出了歧焦,配置這個不是自己給自己找不自在嗎移斩?在團(tuán)隊開發(fā)中肚医,配置這些還是很有用的,制約團(tuán)隊中的每個人都按照標(biāo)準(zhǔn)來開發(fā)功能向瓷,這樣至少大家寫的代碼不至于相互看不懂(我深受不規(guī)范代碼的折磨俺μ住)。
https://github.com/snowzijun/vue-vant-base

3.1.安裝依賴

在配置這些lint之前猖任,你需要安裝這些插件
@vue/cli-plugin-eslint
@vue/eslint-config-prettier
babel-eslint
eslint
eslint-plugin-babel
eslint-plugin-prettier
eslint-plugin-vue
husky
lint-staged
prettier
stylelint
stylelint-config-recess-order
stylelint-config-standard
stylelint-prettier
stylelint-scss
同時還需要給vscode以下插件
eslint
stylelint
Prettier - Code formatter

3.2.配置vscode

在vscode的setting文件里面添加以下代碼

"eslint.enable":true,
"eslint.options": {
  "extensions":[
    ".js",
    ".vue",
    ".ts",
    ".tsx"
  ]
 },
  "eslint.validate": [
    "javascript",
    "javascriptreact",
    "typescript",
    "typescriptreact"
  ],
  "css.validate": true,
  "scss.validate": true,
  "less.validate": true,
  "editor.codeActionsOnSave": {
     "source.fixAll": true
  },

3.3.配置eslint

首先在項目根目錄下面添加 .eslintrc.js與.eslintignore文件
在.eslintrc.js文件內(nèi)添加以下內(nèi)容

// 縮略版
module.exports = {
  root: true,
  globals: {
    process: true
  },
  parserOptions: {
    parser: 'babel-eslint',
    sourceType: 'module'
  },
  env: {
    browser: true,
    node: true,
    es6: true
  },
  extends: ['plugin:vue/recommended', 'eslint:recommended'],
  plugins: ['babel', 'prettier'],
  rules:{
    // 校驗(yàn)規(guī)則此處略
 }
}

在.eslintignore文件中添加以下代碼

.DS_Store
node_modules
/dist

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

配置完之后你稚,在package.json的script里面添加

"eslint": "vue-cli-service lint"

然后執(zhí)行yarn eslint就可以對代碼進(jìn)行格式化,當(dāng)然vscode也會在你保存文件的時候校驗(yàn)一次

3.4.配置stylelint

限制js與vue是不夠的朱躺,還需要限制以下style,感覺這是自己給自己無限挖坑的舉措刁赖,但是這東西越用越爽,一起來看看
首先在項目根目錄下面新建.stylelintrc.js與.stylelintignore文件
在.stylelintrc.js文件中添加以下內(nèi)容

module.exports = {
  extends: ["stylelint-config-standard","stylelint-config-recess-order"],
  "plugins": [
    "stylelint-scss"
  ],
  rules: {
    // 校驗(yàn)規(guī)則略
  }
}

.stylelintignore文件內(nèi)容與.eslintignore文件內(nèi)容一致
配置完之后长搀,在package.json的script里面添加

"stylelint": "stylelint src/**/*.{html,vue,css,sass,scss} --fix",

然后執(zhí)行yarn stylelint就可以對樣式進(jìn)行格式化宇弛,當(dāng)然vscode也會在你保存文件的時候校驗(yàn)一次

3.5.配置husky

上面配置完之后,寫代碼時候vscode會自動校驗(yàn)格式化代碼源请, 但就怕有人用其他編輯器沒有配置插件枪芒,將未校驗(yàn)的代碼提交到倉庫里面,導(dǎo)致所有人的代碼都爆紅巢钓,這時候就需要使用husky在提交代碼時候進(jìn)行校驗(yàn)病苗。
在git提交代碼時候,會觸發(fā)一系列hook鉤子函數(shù)症汹,而husky就是一個Git hooks工具硫朦。lint-staged是一個在git暫存文件上運(yùn)行l(wèi)inters的工具,為什么要用這個工具呢,因?yàn)槲覀冊谔峤淮a的時候背镇,只需要對已經(jīng)修改過的文件進(jìn)行校驗(yàn)咬展,不然檢查所有文件,比較浪費(fèi)時間瞒斩。那我們改怎么配置呢破婆?
你只需要在package.json文件里面添加以下代碼

  "husky": {
    "hooks": {
      "pre-commit": "lint-staged",
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  },
  "lint-staged": {
    "*.{js,vue}": [
      "vue-cli-service lint",
      "git add -A"
    ],
    "*.{html,vue,css,sass,scss}": [
      "yarn stylelint"
    ]
  }

這時候你如果執(zhí)行g(shù)it commit -m '提交描述'的時候,會發(fā)現(xiàn)提交之前會調(diào)用eslint與stylelint進(jìn)行代碼校驗(yàn)胸囱,校驗(yàn)失敗無法提交

vue項目部署的最佳實(shí)踐

http://mp.weixin.qq.com/s?__biz=MzIxNjgwMDIzMA==&mid=2247487622&idx=1&sn=efc8715711f26c71b75a9fd6f346fe47&chksm=9782de0fa0f55719da46e7bf7abaf42d3d1f5a418304e9e34d4a2c87d622769da60283ddcdbf&mpshare=1&scene=24&srcid=0725idfoBvNwPppoA1RRG0WR&sharer_sharetime=1595678294399&sharer_shareid=7ecb79d72854b17d5ce259e809244970#rd

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末祷舀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子烹笔,更是在濱河造成了極大的恐慌裳扯,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谤职,死亡現(xiàn)場離奇詭異饰豺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)允蜈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門冤吨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒿柳,“玉大人,你說我怎么就攤上這事漩蟆±萏剑” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵怠李,是天一觀的道長叛复。 經(jīng)常有香客問我,道長扔仓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任咖耘,我火速辦了婚禮翘簇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘儿倒。我一直安慰自己版保,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布夫否。 她就那樣靜靜地躺著彻犁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凰慈。 梳的紋絲不亂的頭發(fā)上汞幢,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音微谓,去河邊找鬼森篷。 笑死,一個胖子當(dāng)著我的面吹牛豺型,可吹牛的內(nèi)容都是我干的仲智。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼姻氨,長吁一口氣:“原來是場噩夢啊……” “哼钓辆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肴焊,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤前联,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后抖韩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛀恩,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年茂浮,在試婚紗的時候發(fā)現(xiàn)自己被綠了双谆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壳咕。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖顽馋,靈堂內(nèi)的尸體忽然破棺而出谓厘,到底是詐尸還是另有隱情,我是刑警寧澤寸谜,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布竟稳,位于F島的核電站,受9級特大地震影響熊痴,放射性物質(zhì)發(fā)生泄漏他爸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一果善、第九天 我趴在偏房一處隱蔽的房頂上張望诊笤。 院中可真熱鬧,春花似錦巾陕、人聲如沸讨跟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晾匠。三九已至,卻和暖如春梯刚,著一層夾襖步出監(jiān)牢的瞬間凉馆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工亡资, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留句喜,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓沟于,卻偏偏與公主長得像咳胃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子旷太,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353