webpack 构建多页面
最后更新于:2022-04-02 03:33:10
[TOC]
> [在github 参考源码](https://github.com/idcpj/vue-mall/tree/master/webpack_demo)
## 目录结构
```
src
├── cart.html
├── index.html
└── js
├── cart.js
├── common.js
└── index.js
```
## 运行
```
npm init
npm install webpack --save-dev
```
## 安装常用插件
### 编译 html
[html-webpack-plugin](https://www.npmjs.com/package/html-webpack-plugin)
```
new HtmlWebpackPlugin({
filename:"cart.html",
template:"./src/cart.html",
chunks:['cart'],
minify:{ //压缩 html 代码
removeComments:true,
collapseWhitespace:true
}
}),
```
### 编译前先删除文件
[clean-webpack-plugin](https://github.com/johnagan/clean-webpack-plugin)
```
new CleanWebpackPlugin(['./dist'],{
root:path.join(__dirname,''),
verbose:true,
dry:false,
}),
```
### css-loader,style-loader
```
npm install --save-dev css-loader style-loader extract-text-webpack-plugin
//需要在页面的 js 中引入 css ,如 index.js
import "../css/index.css";
//webpack.config.js
module: {
rules: [
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
}
]
}
```
### es6
```
npm install -D babel-loader @babel/core @babel/preset-env
//webpack.config.js
rules: [
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
```
### 使用 jquery
[npm 官网](https://www.npmjs.com/package/jquery)
```
npm i jquery
//index.js
define(["jquery"], function($) {
//code
});
```
### uglifyjs-webpack-plugin js 压缩
[npm 官网](https://www.npmjs.com/package/webpack-parallel-uglify-plugin)
```
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
module.exports = {
//...
optimization: {
minimizer: [new UglifyJsPlugin()]
}
};
```
## 技巧
### js 最好以模块形式引入
如
```
//common.js
define("common",function () {
return {
initIndex:function () {
console.log("common init index");
},
initCart:function () {
console.log("common init cart");
}
}
});
//index.js
require(['./common.js'],function (common) {
common.initIndex();
});
```
### webpack.config.js 设置
```
entry: {
index:"./src/js/index.js", //设置多入口
cart:'./src/js/cart.js',
},
devtool:"#source-map" //用于调试
```
';