webpack 能夠看作是模塊打包機, 主要能夠作到以下內容css
目的就是工程化,解放生產力html
npm install webpack webpack-cli -D
複製代碼
const path=require('path');
module.exports={
mode: ''develepment, // 配置打包環境
entry: './src/index.js', // 配置入口
output: { // 配置出口
path: path.resolve(__dirname,'dist'),
filename:'bundle.js'
},
module: {}, // 配置模塊 loaders
plugins: [], // 配置插件
devServer: {}, // 配置開發服務器}
複製代碼
分爲兩個環境,開發環境(develepment)、生產環境(production)node
production 相比 develepment, 會在打包是作不少優化。工做中除上線外都用 develepmentreact
先用最簡單的舉例,單入口單出口webpack
const path = require('path'); //node系統模塊
module.exports={
//入口配置
entry: './src/index.js',
//出口配置
output:{
path:path.resolve(__dirname,'dist'), //path必須是絕對路徑
filename:'bundle.js'
}
};
複製代碼
entry 入口能夠使用相對路徑,可是output.path 必須使用絕對路徑web
entry 能夠是 字符串'./src/index.js'
、數組 ['./src/index.js']
、對象 {a: './src/index.js'}
npm
若是想出口文件名中包含入口文件名的變量,能夠使用 [name].js
數組
多入口文件瀏覽器
const path = require('path');
module.exports = {
entry:['./src/index.js','./src/index2.js'], //按照順一塊兒打包 bundle.js
output:{
path:path.resolve(__dirname, 'dist'),
filename:'bundle.js'
}
};
複製代碼
多入口多出口配置服務器
const path = require('path');
module.exports = {
entry:{
index:'./src/index.js',
index2:'./src/index2.js'
},
output:{
path:path.resolve(__dirname, 'dist'),
filename:'[name].bundle.js'
}
};
複製代碼
安裝
npm i webpack-dev-server –D
複製代碼
配置 webpack.config.js
devServer:{
contentBase:path.resolve(__dirname,'dist'),
host:'localhost', compress:true,
port:8080
}
複製代碼
安裝 html-webpack-plugin 配置模版
npm i html-webpack-plugin -D
複製代碼
引入
const HtmlWebpackPlugin = require('html-webpack-plugin')
複製代碼
使用
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html', // 模版地址
})
],
複製代碼
// 第一種
use:['xxx-loader','xxx-loader']
// 第二種
loader:['xxx-loader','xxx-loader']
// 第三種
use:[{loader:'style-loader'},{loader:'css-loader'}]
複製代碼
安裝使用 style-loader css-loader
npm i style-loader css-loader -D
複製代碼
配置
module:{
rules:[
{
test:/\.css$/,
use:['style-loader','css-loader']
}
]
}
複製代碼
使用 babel 來編譯 js
舉例編輯 react 項目
安裝使用 babel-loader @babel/core @babel/preset-env @babel/preset-react
npm i babel-loader @babel/core @babel/preset-env @babel/preset-react -D
複製代碼
配置
module: {
rules: [
{test: /\.js$/, use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', '@babel/preset-react'],
}
}}
],
},
複製代碼
安裝使用 file-loader url-loader
cnpm i file-loader url-loader -D
複製代碼
配置
{
test:/\.(png|jpg|gif)$/,
use:[{
loader:'url-loader',
options:{
limit:50,
outputPath:'images'
}
}]
}
複製代碼
安裝使用 copy-webpack-plugin
npm i copy-webpack-plugin -D
複製代碼
引入
const CopyWebpackPlugin = require('copy-webpack-plugin');
複製代碼
使用
plugins:[
new CopyWebpackPlugin([{
from:path.resolve(__dirname, 'src/assets'),
to:'./public'
}])
]
複製代碼