tree shaking对打包体积优化及作用

什么是Tree Shaking

Tree Shaking 是指在打包过程中,检测出未被引用的代码,并在最终打包结果中将这些未引用的代码(也被称为“未引用代码(dead code)”)移除。Tree Shaking 目的是为了精简打包后的代码和减小文件体积,提升网页加载速度。

在理解 Tree Shaking 之前需要了解几个概念:
- 模块 (Module):为了使 JavaScript 更加规范化,ES6 引入了模块化的概念。
- 导入 (Import):在一个模块中加载另一个模块中的代码。
- 导出 (Export):将一个模块中的代码暴露给其他模块使用。

实现 Tree Shaking

为了让项目能启用 Tree Shaking,需要满足以下要求。

使用ES6模块化

Tree Shaking 只能对 ES6 模块化的代码起作用,因此在项目中应该使用 ES6 模块化。

// ES6 module
import { method } from './module.js'

// CommonJS module
const { method } = require('./module.js')

如果项目中使用的是 CommonJS 或者 AMD 模块化,需要在 webpack.config.js 中打开 webpack 的相关配置以兼容 Tree Shaking,详见官方文档。

production模式打包

Tree Shaking 只会在 production 模式下起作用,开发模式下不会对应用进行代码清理。因此,需要先开启 mode = 'production'

配置Webpack

在 webpack 的配置文件中通过 optimization 开启 Tree Shaking:

module.exports = {
  optimization: {
    usedExports: true
  }
}

在使用 Webpack4.x 及以上版本时,不需要手动添加 usedExports: true 属性,Webpack已默认开启这个属性。

示例一

在源文件中引入 add 方法并应用到代码中,最终在打包的代码中,需要排除未使用的方法。

sum.js 文件:

export function add(a, b) {
  return a + b;
}
export function subtract(a, b) {
  return a - b;
}

index.js 文件:

import { add } from './sum';

console.log(add(1, 2));
console.log('test');

打包后的文件为:

console.log(add(1, 2));
console.log('test');

从打包后的代码可以看到,subtract 方法由于没有被使用,已经被去掉了。

示例二

有时候,JavaScript框架或者工具库自己的函数库和引入的其他库中,可能有相同的名字。而且还可能同样的函数名,会存在多个不同的实现。在这种情况下,需要确保 Tree Shaking 可以识别需要的库,而不会将多余的代码打包进应用中。

lodash.js 模板库:

export function camelCase(str) {
  return str.replace(/[-_]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));
}
export function kebabCase(str) {
  return camelCase(str).replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);
}

App.js 文件:

import { kebabCase } from 'lodash';

console.log(kebabCase('Some-Component'));
console.log('test');

打包后的文件为:

console.log("some-component");
console.log("test");

从打包后的代码可以看到,只有应用使用的 kebabCase 方法被打包进去。camelCase 方法由于没有被使用,已经被去掉了。

总结

Tree Shaking 可以在打包过程中自动删除掉应用中未被使用的代码,大大减少应用体积,加快应用加载速度。需要开启 ES6 模块化,webpack 需要配置,同时也需要开启 production 模式才能生效。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:tree shaking对打包体积优化及作用 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 一篇文章带你吃透JavaScript中的DOM知识及用法

    一篇文章带你吃透JavaScript中的DOM知识及用法 什么是DOM DOM(Document Object Model文档对象模型)是指HTML或XML页面的对象表示方式,通过DOM树来表示一个页面中的所有元素及其属性,以及元素之间的关系。JavaScript通过DOM提供的API来访问和操作页面中的元素及其属性,实现动态更新页面的效果。 DOM的操作方…

    JavaScript 2023年5月28日
    00
  • JS实现给不同元素设置不同的定时器

    实现给不同元素设置不同的定时器主要依赖于JavaScript的定时器函数setInterval()和clearInterval()。下面是实现的步骤和注意事项: 步骤: 首先,为不同的元素设置不同的ID或者Class。 在JavaScript中,使用setInterval()函数来设置定时器,该函数会在一定时间间隔内反复运行一个函数。 定义一个执行函数,用来…

    JavaScript 2023年6月11日
    00
  • uniapp实现横屏签字版

    实现横屏签字版可以利用uniapp中的canvas以及第三方的canvas插件实现。 步骤一:安装canvas插件 在uniapp中使用canvas需要下载并安装canvas插件,下载地址为:https://ext.dcloud.net.cn/plugin?id=127 下载完成后,在uniapp项目的根目录下,打开cmd或者终端并输入如下命令: npm i…

    JavaScript 2023年6月11日
    00
  • JavaScript框架(iframe)操作总结

    JavaScript框架(iframe)操作总结 什么是 iframe? iframe 是 HTML 标签之一,用于在网页中嵌入另一个网页或者文档。它可以允许开发者在其网页中嵌入其他页面,或将整个页面作为框架嵌入到网页中。这个功能通常用于在网站页面中添加广告、视频或其他内容。 实现 iframe 的方式 下面是实现 iframe 的方式: HTML实现: &…

    JavaScript 2023年6月11日
    00
  • js clearInterval()方法的定义和用法

    下面是关于“js clearInterval()方法的定义和用法”的完整攻略: clearInterval()方法的定义和用法 定义 clearInterval()是用于关闭由setInterval()方法设置的定时器的方法,它的语法如下: clearInterval(intervalID) 参数intervalID是通过setInterval()方法返回的…

    JavaScript 2023年6月11日
    00
  • JavaScript类的继承全面示例讲解

    JavaScript中的类继承是面向对象编程中的重要概念,它可以使得类与类之间实现代码的共享、重用以及扩展。在这里我们将详细讲解JavaScript类的继承全面示例讲解。 一、继承的概念 继承是指从已有的类中派生出新的类,新的类能够继承已有类的属性和方法,并且可以在此基础上添加自己的属性和方法。继承的概念可以使代码得到更好的复用性和灵活性。 二、JavaSc…

    JavaScript 2023年5月28日
    00
  • JavaScript中的Reflect对象详解(ES6新特性)

    JavaScript中的Reflect对象详解(ES6新特性) 什么是Reflect对象 Reflect对象是ES6新增的一个内置对象。它提供了一系列操作对象的方法,这些方法的作用与Proxy对象的方法一一对应。 通过Reflect对象,我们可以更加方便和灵活地操作对象,同时提高代码的可读性和可维护性。 Reflect对象提供的方法 Reflect.appl…

    JavaScript 2023年5月27日
    00
  • 深入理解JavaScript中的对象复制(Object Clone)

    深入理解JavaScript中的对象复制(Object Clone) 在JavaScript中,对象复制通常分为两类:浅拷贝和深拷贝。浅拷贝只是在复制对象的值时简单地复制了内存地址,而深拷贝则是创建一个新的对象,并将原对象的所有属性和方法复制到新对象中。本文将详细讲解JavaScript中对象的深拷贝实现方法。 简单的对象复制 首先,我们来创建一个简单的Ja…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部