根據文檔的定義:本質上,webpack 是一個現代 JavaScript 應用程序的靜態模塊打包器(module bundler)。當 webpack 處理應用程序時,它會遞歸地構建一個依賴關係圖(dependency graph),其中包含應用程序須要的每一個模塊,而後將全部這些模塊打包成一個或多個 bundle。css
第一種用法
module.exports = {
entry:'index.js'
}
第二種用法
module.exports = {
entry:['index.js','b.js']
}
第三種用法
module.exports = {
entry:{
index:'index.js',
b:'b.js'
}
}
複製代碼
推薦使用使用第三種方法,方便分清各個入口的定義html
module.exports = {
entry:{
index:'index.js',
b:'b.js'
},
output:{
path:path.resolve(__dirname,'dist'),
filename:'[name].min.[hash:5].js'
}
}
複製代碼
在上面的例子中,node
module: {
+ rules:[
+ {
+ test:/\.css$/,
+ use:['style-loader','css-loader'],
+ include:path.join(__dirname,'./src'),
+ exclude:/node_modules/
+ }
+ ]
},
複製代碼
module.exports = {
plugins: [
new UglifyjsWebpackPlugin()
]
}
複製代碼
npm i webpack-dev-server -D
複製代碼
+ devServer:{
+ contentBase:path.resolve(__dirname,'dist'),
+ host:'localhost',
+ compress:true,
+ port:8080
+ }
複製代碼
npm i html-webpack-plugin -D
複製代碼
plugins: [
+ new HtmlWebpackPlugin({
+ minify: {
+ removeAttributeQuotes:true
+ },
+ hash: true,
+ template: './src/index.html',
+ filename:'index.html'
})]
複製代碼
由於CSS的下載和JS能夠並行,當一個html文件很大的時候,咱們能夠把css單獨提取出來react
npm install --save-dev extract-text-webpack-plugin
複製代碼
module: {
+ rules:[
+ {
+ test:/\.css$/,
+ use: ExtractTextWebpackPlugin.extract({
+ use:'css-loader'
+ }),
include:path.join(__dirname,'./src'),
exclude:/node_modules/
+ }
+ ]
},
plugins: [
+ new ExtractTextWebpackPlugin('css/index.css')]
複製代碼
npm i less less-loader -D
npm i node-saas sass-loader -D
複製代碼
const cssExtract=new ExtractTextWebpackPlugin('css.css');
const lessExtract=new ExtractTextWebpackPlugin('less.css');
const sassExtract=new ExtractTextWebpackPlugin('sass.css');
{
test:/\.less$/,
use: lessExtract.extract({
use:['css-loader','less-loader']
}),
include:path.join(__dirname,'./src'),
exclude:/node_modules/
},
{
test:/\.scss$/,
use: sassExtract.extract({
use:['css-loader','sass-loader']
}),
include:path.join(__dirname,'./src'),
exclude:/node_modules/
},
複製代碼
爲了瀏覽器的兼容性,有時候咱們必須加入-webkit,-ms,-o,-moz這些前綴webpack
Trident內核:主要表明爲IE瀏覽器, 前綴爲-msgit
Gecko內核:主要表明爲Firefox, 前綴爲-mozgithub
Presto內核:主要表明爲Opera, 前綴爲-oweb
Webkit內核:產要表明爲Chrome和Safari, 前綴爲-webkit正則表達式
npm i postcss-loader autoprefixer -D
複製代碼
module.exports={
plugins:[require('autoprefixer')]
}
{
test:/\.css$/,
use: cssExtract.extract({
+ use:['css-loader','postcss-loader']
}),
include:path.join(__dirname,'./src'),
exclude:/node_modules/
},
複製代碼
postcss-loader其它用法能夠參考文檔npm
Babel實際上是一個編譯JavaScript的平臺,能夠把ES6/ES7,React的JSX轉義爲ES5
npm i babel-core babel-loader babel-preset-env babel-preset-stage-0 babel-preset-react -D
複製代碼
{
test:/\.jsx?$/,
use: {
loader: 'babel-loader',
options: {
presets: ["env","stage-0","react"]
}
},
include:path.join(__dirname,'./src'),
exclude:/node_modules/
},
複製代碼
webapck經過配置能夠自動給咱們sourcemaps文件,map文件是一種對應編譯文件和源文件的方法
module.exports = {
devtool:'eval-source-map'
}
複製代碼
當代碼發生修改後能夠自動從新編譯
new webpack.BannerPlugin(''),
watch: true,
watchOptions: {
ignored: /node_modules/, //忽略不用監聽變動的目錄
aggregateTimeout: 500, //防止重複保存頻繁從新編譯,500毫米內重複保存不打包
poll:1000 //每秒詢問的文件變動的次數
},
複製代碼
有時項目中沒有引用的文件也須要打包到目標目錄
npm i copy-webpack-plugin -D
複製代碼
new CopyWebpackPlugin([{
from: path.join(__dirname,'public'),//靜態資源目錄源地址
to:'./public' //目標地址,相對於output的path目錄
}]),
複製代碼
npm i clean-webpack-plugin -D
複製代碼
new cleanWebpaclPlugin(path.join(__dirname,'dist'))
複製代碼
壓縮JS可讓輸出的JS文件體積更小、加載更快、流量更省,還有混淆代碼的加密功能 npm i uglifyjs-webpack-plugin -D plugins: [ new UglifyjsWebpackPlugin(),
webpack能夠消除未使用的CSS,好比bootstrap中那些未使用的樣式
npm i -D purifycss-webpack purify-css
npm i bootstrap -S
複製代碼
{
test:/\.css$/,
use: cssExtract.extract({
use: [{
loader: 'css-loader',
+ options:{minimize:true}
},'postcss-loader']
}),
},
複製代碼
+ new PurifyCSSPlugin({
+ //purifycss根據這個路徑配置遍歷你的HTML文件,查找你使用的CSS
+ paths:glob.sync(path.join(__dirname,'src/*.html'))
+ }),
複製代碼
以上是webpack核心概念總結,對概念的理解,有助於整體瞭解下webpack不一樣的做用,遇到相關問題,找對應的模塊。
複製代碼