首页 > 其他分享 >webpack生产环境优化:tree shaking

webpack生产环境优化:tree shaking

时间:2023-08-28 22:36:12浏览次数:42  
标签:tree loader webpack js shaking css

转载请注明 来源:http://www.eword.name/
Author:eword
Email:[email protected]

webpack生产环境优化:tree shaking

  • tree shaking: 去除无用代码
    • 前提:
      • 1.必须使用ES6模块化
      • 2.开启production环境

1一、核心配置

```js
/*
    webpack.config.js webpack的配置文件
    路径: ./webpack.config.js
*/

    // 生产环境下会自动压缩js代码,和启用tree shaking
    mode: 'production',
};

二、验证tree shaking是否生效

2.1、工程文件目录

.
├── src
│   ├── css
│   │   ├── iconfont.css
│   │   ├── index.css
│   │   └── index.less
│   ├── imgs
│   │   ├── img.jpg
│   │   ├── img1.jpg
│   │   ├── img2.jpg
│   │   └── img3.jpg
│   ├── index.html
│   ├── js
│   │   ├── iconfont.js
│   │   ├── index.js          // 引入test.js文件的部分函数
│   │   └── test.js           // 使用ES6模块化的js 文件
│   └── media
│       ├── iconfont.json
│       └── iconfont.ttf
└── webpack.config.js

2.1.1、test.js

//路径:./src/js/test.js

export function mul(x, y) {
    return x * y;
}

export function count(x, y) {
    return x - y;
}

2.1.2、index.js

//入口文件
//路径: ./src/js/indexjs

// 引入 test.js中的  mul 函数
import { mul } from './test';

// eslint-disable-next-line
console.log(mul(2, 3));

2.2、打包

> npx webpack

2.3、验证方法

打开打包生成的js文件,分别查找 乘法和减法,其中乘法可以找到而减法找不到。

三、tree shaking 副作用

某些情况下 tree shaking 可能会误删除。
例如:在packlage.json中配置了sideEffects

{
  "name": "notes_demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "node_modules/.bin/webpack --config webpack.config.js",
    "start": "npx webpack-dev-server --config webpack.config.js --open Chrome.exe"
  },
  "keywords": [],
  "author": "eword <[email protected]> (http://www.eword.name/)",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.14.6",
    "@babel/preset-env": "^7.14.7",
    "babel-loader": "^8.3.0",
    "core-js": "^3.32.1",
    "css-loader": "^3.4.2",
    "eslint": "^7.32.0",
    "eslint-config-airbnb-base": "^15.0.0",
    "eslint-loader": "^4.0.2",
    "eslint-plugin-import": "^2.28.1",
    "file-loader": "^5.0.2",
    "find-cache-dir": "^5.0.0",
    "html-loader": "^0.5.5",
    "html-webpack-plugin": "^4.5.2",
    "install": "^0.13.0",
    "less": "^3.11.1",
    "less-loader": "^5.0.0",
    "mini-css-extract-plugin": "^0.9.0",
    "optimize-css-assets-webpack-plugin": "^5.0.3",
    "postcss-loader": "^3.0.0",
    "postcss-preset-env": "^6.7.0",
    "style-loader": "^1.1.3",
    "uninstall": "0.0.0",
    "url-loader": "^3.0.0",
    "webpack": "^4.41.6",
    "webpack-cli": "^3.3.11",
    "webpack-dev-server": "^3.10.3"
  },
  "browserslist": {
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version",
      "ie 9-12"
    ],
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ]
  },
  "eslintConfig": {
    "extends": "airbnb-base"
  },
  "sideEffects": false
}

核心配置

/所有代码都没有副作用(都可以进行tree shaking)

 "sideEffects": false

问题:可能会把css /@babel/polyfill 等文件干掉(副作用)。

解决方式

修改sideEffects配置

"sideEffects": ["*.css","*.less"]

通过配置css和less文件不会被tree shaking。

标签:tree,loader,webpack,js,shaking,css
From: https://www.cnblogs.com/eword/p/webpack202308261.html

相关文章

  • webpack生产环境优化:code split
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:codesplitcodesplit代码分割,既将打包后的js分割成多份js文件,方便后期实现“并行加载”、“按需加载”等,提高性能。一、核心配置建议使用方式二的单入口模式,并按需使用......
  • webpack生产环境优化:PWA
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:PWAPWA可简称为“离线可访问技术”。一、下载插件PWA:渐进式网络开发应用程序(离线可访问),需要插件workbox-webpack-plugin的支持。workbox--〉workbox-webpack-plugin......
  • webpack生产环境优化:多线程打包
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:多线程打包多线程打包主要用于需要打包的文件较多的情况下提高打包效率,缩短打包时间。注意:开启多进程打包时,进程开启大概需要600ms,进程通信也有开销。建议:只有工作消耗时间......
  • webpack生产环境优化:懒加载和预加载
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:懒加载和预加载一、直接加载浏览器一打开,直接加载了test.js这里使用了直接导入方式。直接导入:import{mul}from'./test';//./src/js/index.js//入口文件console.......
  • webpack生产环境优化:externals
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:externalsexternals配置主要是为了防止某些通过CDN引入的包被打包到输出的bundle中。一、核心配置/*webpack.config.jswebpack的配置文件路径:./webpack.config......
  • webpack生产环境优化:dll
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:dlldll动态链接库目的:单独的将多个指定的第三方库打包成一个chunk。意义:将不同的库分割开来,实现代码分割和避免重复打包,在节省打包时间的同时方便按需加载和预加载的实现......
  • webpack 概念
    webpack概念本质上,webpack是一个用于现代JavaScript应用程序的静态模块打包工具。当webpack处理应用程序时,它会在内部从一个或多个入口点构建一个依赖图(dependencygraph),然后将你项目中所需的每一个模块组合成一个或多个bundles,它们均为静态资源,用于展示你的内容。在......
  • 2023牛客暑期多校练营6 A-Tree 树上背包+并查集
    2023牛客暑期多校练营6A-Tree树上背包+并查集题目链接题意:给出一棵树,节点为黑色或者白色,定义整棵树的贡献为,任意白点到任意黑点所经过路径上的最大边权之和,节点i原本颜色已给出,可以花费c[i]代价翻转节点i的颜色,问最大贡献是多少。做法:首先我们思考怎么处理最大边权的问题......
  • 监督学习算法中梯度提升决策树(Gradient Boosting Decision Trees)
    梯度提升决策树(GradientBoostingDecisionTrees,简称GBDT)是一种监督学习算法,它是以决策树为基础分类器的集成学习方法。GBDT通过迭代地训练多个弱分类器(决策树),每个弱分类器都在前一个弱分类器的残差上进行训练,从而逐步减小残差,最终将多个弱分类器组合成一个强分类器。具体而言,GB......
  • 监督学习算法中决策树(Decision Tree)
    决策树(DecisionTree)是一种常见的监督学习算法,被广泛应用于分类和回归问题中。它通过构建一棵树状结构来对输入数据进行分类或预测。决策树的构建过程基于特征的条件划分,每个内部节点代表一个特征,每个叶子节点代表一个类别或一个数值。决策树的根节点表示整个数据集,通过不断地对数......