webpack4.x 配置下載第三方庫,分離js成單個檔案引入HTML 第十節
阿新 • • 發佈:2019-02-19
使用第三庫:
1. 直接npm下載,然後引入(完全可以使用,但是我個人不是很推薦)
cnpm i jquery -S
import $ from 'jquery'
$(xxxx).on()
$(xxx).css()
-
ProvidePlugin (個人推薦此方式)
const webpack = require('webpack'); 在plugins裡面使用: plugins:[ new Webpack.HotModuleReplacementPlugin(), new HtmlWebpackPlugin({ title:'Hello World', template: './src/index.html' //模板地址 }),
通過ProvidePlugin和 import直接引入區別:
1. import $...,引入之後,無論你在程式碼中是否使用jquery,打包後,都會打進去,這樣其實產生大量的冗餘js
2. Provideplugin, 只有你在使用到此庫,才會打包
提取第三方庫(或者想單獨提出來的)js庫,增加一個optimization配置,和plugins同級
在webpack3.x版本之前:使用new webpack.optimize.CommonsChunkPlugin現在已經不支援 new webpack.optimize.CommonsChunkPlugin({ name:'jquery' })
-
在webpack4.x以後提取第三方庫或js單獨引入html使用如下方法
1.配置入口檔案
entry:{
entry: jsonConfig.entry,
jquery:'jquery',
angular:'angular'
},
2.下載庫
plugins:[
// Uglify是壓縮js,現在已經不需要了,只需要在script裡面寫成
// "build": "webpack --mode production", 就自動壓縮額
//new Uglify(),
new Webpack.HotModuleReplacementPlugin(),
new HtmlWebpackPlugin({
title:'Hello World',
template: './src/index.html' //模板地址
}),
new ExtractTextPlugin('css/index.css'), //都提到dist目錄下的css目錄中,檔名是index.css裡面
new PurifyCssWebpack({ //消除冗餘程式碼
// 首先保證找路徑不是非同步的,所以這裡用同步的方法
// path.join()也是path裡面的方法,主要用來合併路徑的
// 'src/*.html' 表示掃描每個html的css
paths:glob.sync(path.join(__dirname,'src/*.html'))
}),
new CopyWebpackPlugin([ //支援輸入一個數組
{
from: path.resolve(__dirname, 'src/assets'), //將src/assets下的檔案
to: './public' // 複製到publiv
}
]),
new Webpack.ProvidePlugin({
$:'jquery', //下載Jquery
A:'angular' // 下載Angular
})
],
3.分離單獨JS,注意:optimization和Plugins是同級,而不是在Plugins內
plugins:[
// Uglify是壓縮js,現在已經不需要了,只需要在script裡面寫成
// "build": "webpack --mode production", 就自動壓縮額
//new Uglify(),
new Webpack.HotModuleReplacementPlugin(),
new HtmlWebpackPlugin({
title:'Hello World',
template: './src/index.html' //模板地址
}),
new ExtractTextPlugin('css/index.css'), //都提到dist目錄下的css目錄中,檔名是index.css裡面
new PurifyCssWebpack({ //消除冗餘程式碼
// 首先保證找路徑不是非同步的,所以這裡用同步的方法
// path.join()也是path裡面的方法,主要用來合併路徑的
// 'src/*.html' 表示掃描每個html的css
paths:glob.sync(path.join(__dirname,'src/*.html'))
}),
new CopyWebpackPlugin([ //支援輸入一個數組
{
from: path.resolve(__dirname, 'src/assets'), //將src/assets下的檔案
to: './public' // 複製到publiv
}
]),
new Webpack.ProvidePlugin({
$:'jquery',
A:'angular'
})
],
optimization:{
splitChunks:{
cacheGroups:{ // 單獨提取JS檔案引入html
aaa:{ // 鍵值可以自定義
chunks:'initial', //
name:'jquery', // 入口的entry的key
enforce:true // 強制
},
bbb:{
chunks:'initial',
name:'angular',
enforce:true
}
}
}
}