⑴ webpack設置了壓縮,html也會被壓縮,什麼參數能排除html被壓縮
這里說明了,如果單純使用html-webpack-plugin插件來處理html,那麼在此插件下設置minify為false,就不會壓縮html文件;但是如果使用了loader與html-webpack-plugin一起處理html,那麼html的壓縮還受loader的影響。
從你的描述來看,我估計是受了loader的影響了。
⑵ 為什麼加了webpack自帶的代碼壓縮插件後打包就出問題了
1. 為什麼用 webpack? 他像 Browserify, 但是將你的應用打包為多個文件. 如果你的單頁面應用有多個頁面, 那麼用戶只從下載對應頁面的代碼. 當他么訪問到另一個頁面, 他們不需要重新下載通用的代碼. 他在很多地方能替代 Grunt 跟 Gulp
⑶ 插件 mini-css-extract-plugin 使用的詳解(二)
文接上回,繼續看 webpack 的插件:這里默認你已經搭建出來一個 React 框架。我就是在這個基礎上演示的。
mini-css-extract-plugin作用: 該插件的主要是為了抽離 css 樣式,防止將樣式打包在 js 中文件過大和因為文件大網路請求超時的情況。
extract-text-webpack-plugin 是 mini-css-extract-plugin 的前身,不過前者在 webpack4 算是廢了。
安裝依賴:
然後引入,配置提出 css 樣式,重命名 css 文件。
其中上面的 rules 還可以修改變成這樣:
打包出來的 index.css將會插入 index.html 裡面的 head 標簽裡面。
現在如果使用下面的樣式:
其中 transform: rotate(45deg); 是 css3 的樣式。我們想批量給它增加前綴。這時就得使用 autoprefixer 。但是還的用一個 loader 來處理,這個 loader 就叫 postcss-loader 。
安裝依賴:
配置時 postcss-loader 執行順序必須保證在 css-loader 之前。
完成之後 在webpack.config.js 同級目錄下新建 post.config.js 輸入內如下:
打包之前的 css 樣式為:
經過插件處理之後為:
如果你不想新建一個 post.config.js 文件的話可以這樣配置:
處理的效果是完全和分開寫一樣的。
這里需要注意的是在 HtmlWebpackPlugin 插件裡面的配置壓縮 css 參數只對自己創建的模板有效,所以這里引包的 css 並沒有壓縮。我們還的專門配置 壓縮 css 的插件。它就是 optimize-css-assets-webpack-plugin 。 terser-webpack-plugin 是對打包的 JS 進行壓縮的。
安裝依賴:
注意: 使用 optimize-css-assets-webpack-plugin 插件和 terser-webpack-plugin 插件的時候 webpack 的 mode (模式)一定的是 生產模式(proction) 。
簡單配置就能壓縮 css 和 JS 了。還是很有用的,壓縮完成明顯文件變小了。
友情提示:
⑷ webpack插件:壓縮打包文件
vue打包文件出來的是一個文件夾,發送給其他人的時候需要一個zip壓縮包。這時候就需要使用到插件。當然也可以使用現成的插件對壓縮包進行壓縮。為了對webpack插件的進一步的了解,自己編寫一個插件來完成對打包文件的壓縮
⑸ webpack設置了壓縮,html也會被壓縮,什麼參數能排除html被壓縮
這里說明了,如果單純使用html-webpack-plugin插件來處理html,那麼在此插件下設置minify為false,就不會壓縮html文件;但是如果使用了loader與html-webpack-plugin一起處理html,那麼html的壓縮還受loader的影響。
從你的描述來看,我估計是受了loader的影響了。
⑹ 如何解決webpack打包後,dist文件過大的問題
去除不必要的插件
剛開始用 webpack 的時候,開發環境和生產環境用的是同一個 webpack 配置文件,導致生產環境打包的 JS 文件包含了一大堆沒必要的插件,比如 HotMoleReplacementPlugin, NoErrorsPlugin... 這時候不管用什麼優化方式,都沒多大效果。所以,如果你打包後的文件非常大的話,先檢查下是不是包含了這些插件。
提取第三方庫
像 react 這個庫的核心代碼就有 627 KB,這樣和我們的源代碼放在一起打包,體積肯定會很大。所以可以在 webpack 中設置
{
entry: {
bundle: 'app'
vendor: ['react']
}
plugins: {
new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js')
}
}
這樣打包之後就會多出一個 vendor.js 文件,之後在引入我們自己的代碼之前,都要先引入這個文件。比如在 index.html 中
<script src="/build/vendor.js"></script>
<script src="/build/bundle.js"></script>
除了這種方式之外,還可以通過引用外部文件的方式引入第三方庫,比如像下面的配置
{
externals: {
'react': 'React'
}
}
externals 對象的 key 是給 require 時用的,比如 require('react'),對象的 value 表示的是如何在 global 中訪問到該對象,這里是 window.React。這時候 index.html 就變成下面這樣
<script src="//cdn.bootcss.com/react/0.14.7/react.min.js"></script>
<script src="/build/bundle.js"></script>
當然,個人更推薦第一種方式。
代碼壓縮
webpack 自帶了一個壓縮插件 UglifyJsPlugin,只需要在配置文件中引入即可。
{
plugins: [
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
})
]
}
加入了這個插件之後,編譯的速度會明顯變慢,所以一般只在生產環境啟用。
另外,伺服器端還可以開啟 gzip 壓縮,優化的效果更明顯。
代碼分割
什麼是代碼分割呢?我們知道,一般載入一個網頁都會把全部的 js 代碼都載入下來。但是對於 web app 來說,我們更想要的是只載入當前 UI 的代碼,沒有點擊的部分不載入。
看起來好像挺麻煩,但是通過 webpack 的 code split 以及配合 react router 就可以方便實現。具體的例子可以看下 react router 的官方示例 huge apps。不過這里還是講下之前配置踩過的坑。
code split 是不支持 ES6 的模塊系統的,所以在導入和導出的時候千萬要注意,特別是導出。如果你導出組件的時候用 ES6 的方式,這時候不管導入是用 CommomJs 還是 AMD,都會失敗,而且還不會報錯!
當然會踩到這個坑也是因為我剛剛才用 NodeJS,而且一入門就是用 ES6 的風格。除了這個之外,還有一點也要注意,在生產環境的 webpack 配置文件中,要加上 publicPath
output: {
path: xxx,
publicPath: yyy,
filename: 'bundle.js'
}
不然的話,webpack 在載入 chunk 的時候,路徑會出錯。
設置緩存
開始這個小節之前,可以先看下大神的一篇文章:大公司里怎樣開發和部署前端代碼。
對於靜態文件,第一次獲取之後,文件內容沒改變的話,瀏覽器直接讀取緩存文件即可。那如果緩存設置過長,文件要更新怎麼辦呢?嗯,以文件內容的 MD5 作為文件名就是一個不錯的解決方案。來看下用 webpack 應該怎樣實現
output: {
path: xxx,
publicPath: yyy,
filename: '[name]-[chunkhash:6].js'
}
打包後的文件名加入了 hash 值
const bundler = webpack(config)
bundler.run((err, stats) => {
let assets = stats.toJson().assets
let name
for (let i = 0; i < assets.length; i++) {
if (assets[i].name.startsWith('main')) {
name = assets[i].name
break
}
}
fs.stat(config.buildTemplatePath, (err, stats) => {
if (err) {
fs.mkdirSync(config.buildTemplatePath)
}
writeTemplate(name)
})
})
手動調用 webpack 的 API,獲取打包後的文件名,通過 writeTemplate 更新 html 代碼。完整代碼猛戳 gitst。
⑺ 請教關於webpack壓縮nodejs代碼的問題
webpack 自帶了一個壓縮插件 UglifyJsPlugin,只需要在配置文件中引入即可。
{
plugins: [
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
})
]
}
加入了這個插件之後,編譯的速度會明顯變慢,所以一般只在生產環境啟用。
就OK了。
⑻ webpack 如何打包html,在html中可以壓縮哪些東西如何配置
1. 安裝: html-webpack-plugin 插件完成打包
2. 命令:npm install html-webpack-plugin –save-dev
3. 配置:
引入:const HtmlWebpackPlugin = require('html-webpack-plugin');
mole.exports = {
entry: 'index.js',
output: {
path: __dirname + '/dist',
filename: 'index_bundle.js'
},
plugins: [
new HtmlWebpackPlugin({
title: 'My App',(生成的頁面標題)
filename: 'assets/admin.html',(生成的文件名)
template: 'src/assets/test.html',(原來的index.html)
minify: {
collapseWhitespace: true,
removeComments: true,
removeRendantAttributes: true,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
useShortDoctype: true
}
})
]
} (BY三人行慕課)
⑼ 請教關於webpack壓縮nodejs代碼的問題
webpack 自帶了一個壓縮插件 UglifyJsPlugin,只需要在配置文件中引入即可。 { plugins: [ new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false } }) ] } 加入了這個插件之後,編譯的速度會明顯變慢,所以一般只在生產環境啟