webpack是一個前端資源加載/打包工具。他將根據模塊的依賴關係進行靜態分析,而後將這些模塊按照指定的規則生成對應的靜態資源。css
npm install webpack-cli-g
webpack 輸入文件.js -o 輸出文件.js
webpack --mode development 輸入文件.js -o 輸出文件.js
webpack --progress --colors
webpack --watch
//打包單個文件
const path = require ('path')
module.exports = {
entry:'index.js',//入口文件
output:{
path:path.resolve(__dirname,'dist),
filrname:'output.bundle.js'
},//出口文件
mode:'development'//設置開發模式或生產模式
}
//打包多個文件
module.exports = {
entry:{
about:'./about.js',
home:'./home.js',
}
output:{
path:path.resolve(__dirname,'dist'),
filrname:[name].bundle.js
}
}
複製代碼
webpack自己只能處理JavaScript模塊,若是須要處理其餘類型的文件就須要用到loader;loader是用來預處理源文件的,源文件多是ts、less、sass等等。html
//先安裝file-loader和url-loader
npm install file-loader url-loader
//安裝成功後配置webpack,在webpack.config.js文件中,建立module對象,配置rules
const path = require ('path')
module.exports = {
entry:'index.js',//入口文件
output:{
path:path.resolve(__dirname,'dist),
filrname:'output.bundle.js'
},//出口文件
mode:'development'//設置開發模式或生產模式
module:{
rules:[
{
test:/\.(png|gif|jpg)$/i,
use:[
{
loader:'url-loader',
options:{
limit:708192
}
}
]
}
]
}
}
//最後運行打包命令
webpack
複製代碼
npm install css-loader style-loader
//先建立一個css文件;
body{
background:yellow
}
//建立一個js文件,並引入上面的css文件
require(!style-loader!css-loader!./style.css)
//接下來使用命令進行打包
webpack index.js bundle.js
//咱們也能夠根據模型拓展名來自動綁定loader
//引入文件時,正常寫
require('./style.css')
//打包時輸入時,輸入命令
webpack index.js bundle.js --module-bind 'css=!style-loader!css-loader'
複製代碼
npm install babel-loader@8.0.0-beta.0 @babel/core @babel/preset-env webpack
複製代碼
{ test:/.(js|jsx)$/, exclude:/(node_modules|bower_components)/,//排除匹配這些文件 use:{ loader:'babel-loader', options:{ presets:['@babel/preset-env'], plugins: [require('@babel/plugin-transform-object-rest-spread')]//設置規則,若是是react則須要編譯jsx 語法,這裏則寫@babel/plugin-transform-react-jsx } } }前端
- 將less編譯成瀏覽器識別的css
- 安裝命令`npm install style-loader css-loader less-loader`
複製代碼
//先建立一個less文件 body{ color:'#ffffff' } //引入less文件 import cs from './cs.less' //配置文件 { test:'/.less$/, use:[ { loader:'less-loader', }, { loader:'style-loader' }, { loader:'css-loader' } ] } //使用webpack命令進行打包 webapcknode
# 插件
## miniCssExtractPlugin,將所有的css文件打包到一個css文件中,實現js和css的分離。
- 安裝命令`npm install mini-css-extract-plugin`
複製代碼
//引入配置文件 const MiniCssExtractPlugin = require('mini-css-extract-plugin'); //在module的同級文件下建立plugins數組 plugins:[ new MiniCssExtractPlugin({ filename:'[name].css, chunckFilename:'[id].css' }) ] //而後將less裏的配置進行更改 { test:/.less$/, use:[ MiniCssExtractPlugin.loader, "css-loader", "less-loader" ] } //執行webpack命令,dist文件中會生成一個單獨的css文件react
## DefinePlugin,通常用來定義請求的地址的前綴
複製代碼
//配置文件,引入webpack const webpack = reqiure('webpck') //在plugins中建立一個 new webpack.DefinePlugin({ 'SERVICE_URL':'www.sina.com' }) //在home.js文件中更改一下數據 async function sayHello (){ const result = await fetch(SERVICE_URL) console.log(result) } sayHello() //執行一些webpack,去bundle.js查看會發現SERVICE_URL變成了www.sina.comwebpack
## HtmlWebpackPlugin用於生成html文件,webpack主要是用來處理js文件的,當須要生成html文件時須要藉助這個插件。
複製代碼
//首先 安裝html插件 npm install html-webpack-plugin -D //接着 配置文件,在plugins中建立一個 new HtmlWebpackPlugin({ title:'Hello world',//項目標題 template:'template.html',//自定義綁定的html,如若沒有定義會自動在dist文件下生成一個html文件 }) //手動建立一個template.htmlweb
<%= htmlWebpackPlugin.options.title %>//綁定上面設置的標題 //能夠引進其餘的框架連接 //自定義標籤 ``` ## 熱替換 頁面改變webpack自動打包,頁面實時更新 ``` //首先 安裝devServer插件 npm install webpack-dev-server //其次 在entry同級的文件下建立一個devServer對象,並配置 devServer:{ contentBase:path.join(__dirname,'dist'),//熱替換的文件,這裏的參數和entry必須保持一致 compress:true,//是否壓縮 hot:true,//開啓熱替換 port:8080,//熱替換的端口號 }複製代碼