淺談webpack打包之后的文件過大的解決方法
以前一直使用 create-react-app 這個(gè)腳手架進(jìn)行 react 開發(fā),后面因?yàn)橐恍┳远x的配置,轉(zhuǎn)而使用 webpack 搭建一套自己的腳手架。但是在使用 webpack 打包之后發(fā)現(xiàn),納尼?怎么文件這么大??? 于是研究了一下如何處理 webpack 打包之后文件太大的情況,簡(jiǎn)單記錄下來。
首先配置全局變量
首先,通過指定環(huán)境,告訴 webpack 我們當(dāng)前處于 production 環(huán)境中,要按照 production 的方式去打包。
//指定環(huán)境,將process.env.NODE_ENV環(huán)境與library關(guān)聯(lián)
new Webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('production'),
}),
優(yōu)化 devtool 中的 source-map .
dev-tool 提供了很多種選項(xiàng),用來增強(qiáng)我們 debug 的能力,我們熟知的有: source-map , inline-source-map , cheap-source-map 等等。詳細(xì)的用法可以參考Devtool官方文檔,Devtool配置對(duì)比 , webpack sourcemap 選項(xiàng)多種模式的一些解釋 , https://webpack.github.io/docs/configuration.html#devtool 如果你的文件在打包之后突然變成好幾M,那么不用想,肯定是因?yàn)?source-map 的原因。 source-map 在開發(fā)階段確實(shí)很好用,調(diào)試起來很方便,但是在生產(chǎn)環(huán)境下就沒必要部署了。 建議在 prod 環(huán)境下關(guān)閉 source-map 。
剝離css文件,單獨(dú)打包
安裝 webpack 插件 extract-text-webpack-plugin 。 npm install extract-text-webpack-plugin --save-dev 。 使用方法:
plugins:[
new ExtractTextPlugin('static/css/styles.[contenthash].css'),
]
這里使用了 contenthash , webpack 會(huì)根據(jù)內(nèi)容去生成 hash 值。
使用 UglifyJSPlugin 壓縮。
通過 UglifyJSPlugin 可以壓縮我們的 *.js 文件。 安裝方法: npm install uglifyjs-webpack-plugin --save-dev 。 用法: UglifyJSPlugin詳細(xì)用法
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
module.exports = {
plugins: [
new UglifyJSPlugin({
parallel: 4,
uglifyOptions: {
output: {
comments: false,
beautify: false,
},
compress: {
warnings: false
},
},
cache: true,
}),
]
}
提取公共依賴
使用 CommonsChunkPlugin 插件,將多個(gè) js 文件進(jìn)行提取,建立一個(gè)獨(dú)立的文件。這個(gè)文件包含一些共用模塊,瀏這樣覽器只在剛開始的時(shí)候加載一次,便緩存起來供后續(xù)使用。而不用每次訪問一個(gè)新界面時(shí),再去加載一個(gè)更大的文件。
entry:{
app:'./entry',
vendor:['react','other-lib'],
},
plugins:[
new Webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
}),
]
開啟gzip壓縮
我們使用 compression-webpack-plugin 插件進(jìn)行壓縮。 安裝: npm install compression-webpack-plugin --save-dev 。 compression-webpack-plugin 詳細(xì)用法 使用:
const CompressionPlugin = require("compression-webpack-plugin");
plugins:[
new CompressionPlugin({
asset: '[path].gz[query]', //目標(biāo)資源名稱。[file] 會(huì)被替換成原資源。[path] 會(huì)被替換成原資源路徑,[query] 替換成原查詢字符串
algorithm: 'gzip',//算法
test: new RegExp(
'\\.(js|css)$' //壓縮 js 與 css
),
threshold: 10240,//只處理比這個(gè)值大的資源。按字節(jié)計(jì)算
minRatio: 0.8//只有壓縮率比這個(gè)值小的資源才會(huì)被處理
})
]
壓縮結(jié)果:


開啟html壓縮,自動(dòng)添加上面生成的靜態(tài)資源
添加插件 html-webpack-plugin
安裝: npm install html-webpack-plugin --save-dev 用法:
plugins:[
new HtmlWebpackPlugin({
title: '',
template: __dirname + '/../public/index.html',
minify: {
removeComments: true,
collapseWhitespace: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
},
chunksSortMode:'dependency'
}),
]
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解如何優(yōu)雅迭代JavaScript字面對(duì)象
迭代是訪問集合元素的一種方法,可以被迭代的對(duì)象稱為可迭代對(duì)象,下面這篇文章主要給大家介紹了關(guān)于如何優(yōu)雅迭代JavaScript字面對(duì)象的相關(guān)資料,需要的朋友可以參考下2022-05-05
momentjs實(shí)現(xiàn)DatePicker時(shí)間禁用的項(xiàng)目實(shí)踐
momentjs是一個(gè)處理時(shí)間的js庫(kù),簡(jiǎn)潔易用,本文來介紹一下momentjs實(shí)現(xiàn)DatePicker時(shí)間禁用,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
javascript打印大全(打印頁面設(shè)置/打印預(yù)覽代碼)
打印頁面設(shè)置,打印頁面預(yù)覽在打印過程中經(jīng)常會(huì)遇到,網(wǎng)上搜集整理了一些實(shí)用的打印方法與大家分享,感興趣的朋友可以了解下哈2013-03-03
使用layui日期控件laydate對(duì)開始和結(jié)束時(shí)間進(jìn)行聯(lián)動(dòng)控制的方法
今天小編就為大家分享一篇使用layui日期控件laydate對(duì)開始和結(jié)束時(shí)間進(jìn)行聯(lián)動(dòng)控制的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09
JS 中document.write()的用法和清空的原因淺析
這篇文章主要介紹了JS 中document.write()的用法和清空的原因淺析,需要的朋友可以參考下2017-12-12
JavaScript中關(guān)于iframe滾動(dòng)條的去除和保留
在開發(fā)中經(jīng)常遇到去掉全部的滾動(dòng)條,去掉右邊的滾動(dòng)條且保留底下的滾動(dòng)條,去掉底下的滾動(dòng)條且保留右邊的滾動(dòng)條,大家基于js是怎么實(shí)現(xiàn)的呢?下面小編通過本文給大家詳細(xì)介紹下,對(duì)js iframe滾動(dòng)條相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-11-11
javascript運(yùn)動(dòng)框架用法實(shí)例分析(實(shí)現(xiàn)放大與縮小效果)
這篇文章主要介紹了javascript運(yùn)動(dòng)框架用法,結(jié)合實(shí)例形式分析了javascript運(yùn)動(dòng)框架的實(shí)現(xiàn)與使用技巧,可實(shí)現(xiàn)div塊的放大與縮小功能,需要的朋友可以參考下2016-01-01

