1. 程式人生 > 實用技巧 >webpack模組打包簡易版

webpack模組打包簡易版

webpack基本使用流程(react)

1.安裝webpack腳手架

cnpm install webpack webpack-cli -D

2.安裝處理css的loader

cnpm install style-loader css-loader node-sass sass-loader postcss-loader -D

3.安裝處理js的loader

cnpm install babel-loader @babel/core @babel/preset-env @babel/preset-react -D

tip:react 新增[email protected]/preset-react

4.安裝處理圖片的loader

cnpm install file-loader url-loader -D

5.安裝html-webpack-plugin clean-webpack-plugin

cnpm install html-webpack-plugin clean-webpack-plugin -D

6.自動新增瀏覽器字首

cnpm install autoprefixer -D

7.安裝開發環境中所需要的服務

cnpm install webpack-dev-server -D  //開發環境不需要打包,故使用webpack-dev-server啟動服務,記得在json檔案做配置

8.安裝生產環境抽離css的外掛

cnpm install [email protected] -D  //不抽離css會導致css混入js中,導致程式碼的紊亂以及體積

tip:@next安裝最新版本

啟動檔案

webpack打包的時候預設會找到目錄下webpack.config.js檔案,

合併檔案

安裝webpack配置項

cnpm install webpack-merge -D //開發或者生產模式的時候將使用它作為合併

.babelrc檔案用於bebel處理之後的瀏覽器相容的版本,一般配置相容到瀏覽器最後2個版本

{
"presets": [
[
"@babel/preset-env",
{
"targets":{
"browsers":["last 2 versions"]
//相容到瀏覽器最後2個版本
}
}
]
]
}

postcss.config.js

autoprefixer為不同的瀏覽器自動新增css樣式字首

舉例:由於專案配置了scss,我們用這個示範,可以看的瀏覽器的測試結果已經新增好了字首



module.exports = {
plugins:[
require("autoprefixer")({
overrideBrowserslist:[
"defaults",
"Android 4.1",
"iOS 7.1",
"Chrome>31",
"ff>31",
"ie>=8",
"last 2 versions",
">0%"
]
})
]
}

config檔案用於webpack的配置項,一般為三個檔案,base模式,開發模式,生產模式

此處展示為base檔案,base為開發生產都需要用到的檔案

const path = require('path')
//生成建立html入口檔案,比如單頁面可以生成一個html檔案入口,配置N個html-webpack-plugin可以生成N個頁面入口
const HtmlWebapackPlugin = require('html-webpack-plugin')
//對於每一次生成的dist做更新
const {CleanWebpackPlugin} = require('clean-webpack-plugin') //引入的外掛請務必在plugin中做例項化
//入口檔案出口檔案
const PATH = {
app:path.join(__dirname,"../src/main.js"),
build:path.join(__dirname,"../dist")
} module.exports = {
entry:{
app:PATH.app
},
output:{
filename:process.env.NODE_ENV == "development"?"[name].[hash:8].js":"js/[name].js",
path:PATH.build
},
//使用外掛
plugins:[
new HtmlWebapackPlugin({
filename:"index.html",
template:"./public/index.html"
}),
new CleanWebpackPlugin()
],
//別名配置
resolve:{
extensions:[".jsx",".js",".json"],
alias:{
}
},
//處理模組
module:{
rules:[
//js檔案處理
{
test:/\.(js|jsx)$/,
loader:"babel-loader",
exclude:path.join(__dirname,"../node_modules")
},
//圖片處理
{
test:/\.(png|jpg|gif|svg)$/,
use:{
loader:"url-loader",
options:{
limit:2048,
name:"image/[name].[ext]"
}
}
},
//字型處理
{
test:/\.(woff|svg|woff2|eot|ttf)$/,
use:{
loader:"url-loader",
options:{
name:"iconfont/[name].[ext]"
},
},
exclude:path.join(__dirname,"../node_modules")
}
]
}
}

執行npm run build 成功打包之後