玖叶教程网

前端编程开发入门

webpack5之树摇(webpack实战 入门进阶与调优下载)

在多人开发中,代码里有时候会有一些无用的代码,因此在生产环境打包构建的时候就需要去除掉,我们可以使用webpack默认的tree shaking。必须满足以下两个条件:

1,使用ES6模块化导入;

2,mode设置为production;

看以下代码,此时我们在main.js中使用了multiplication,没使用surplus,则surplus不会打包进chunk里。

新建一个treeShaking.js,使用ES6模块导出。

export function multiplication(a, b) {
    return a % b;
}
export function surplus(a, b) {
    return a * b;
}

main.js的代码如下:

//测试HMR
import hotTest from './assets/js/hot.js';
// 测试树摇,使用了multiplication,没使用surplus,则surplus不会打包进chunk里
import { multiplication } from './assets/js/treeShaking.js';
console.log(multiplication);
import './assets/fonts/iconfont.css';
import './assets/style/index.css';
import './assets/style/index.less';
import './assets/style/index.scss';
// babel转换
const aa = function aa() {
  return 1;
};
const bb = new Promise((resolve) => {
  setTimeout(() => {
    resolve();
  }, 2000);
});
console.log(bb);
aa();
// 测试HMR,修改hot.js文件内容只会重新打包hot.js
if (module.hot) {
  module.hot.accept('./assets/js/hot.js', () => {
    hotTest();
  });
}

webpack.prod.js的配置如下:

const { resolve } = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');//打包html
const MiniCssExtractPlugin = require('mini-css-extract-plugin');//分离样式
const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin');//压缩css
const { CleanWebpackPlugin } = require('clean-webpack-plugin');//打包前清理文件夹
const { merge } = require('webpack-merge');
const commonConfig = require('./webpack.base.js');
let prodConfig = {
  entry: './src/main.js',
  output: {
    filename: 'bundle-[name]-[chunkhash].js',
    path: resolve(__dirname, '../dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader']
      },
      {
        test: /\.less$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'less-loader']
      },
      {
        test: /\.scss$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'sass-loader']
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        options: {
          cacheDirectory: true//开启babel缓存
        }
      },
    ]
  },
  plugins: [
    //清理目录
    new CleanWebpackPlugin(),
    // 打包html
    new HtmlWebpackPlugin({
      template: './src/assets/index.html',
      hash: true,
      filename: 'index.html',
      favicon: './src/assets/favicon.ico',
      minify: {
        collapseWhitespace: true,//移除空格
        removeComments: true,//移除注释
      }
    }),
    // 压缩css
    new CssMinimizerWebpackPlugin(),
    // 分离css
    new MiniCssExtractPlugin({
      filename: 'index-[name]-[contenthash].css'
    })
  ],
  mode: 'production',
  target: 'es5',
}
module.exports = merge(commonConfig, prodConfig);

git仓库地址:

https://gitee.com/seimin/xiaoming2qianduan-webpack5/tree/v5.16/

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言