esBuild + SWC 构建 TS 项目

2023-12-20 18:30
文章标签 构建 项目 ts swc esbuild

本文主要是介绍esBuild + SWC 构建 TS 项目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. esBuild 介绍

esbuild 的官方介绍中打包 threejs 只需要 0.37 秒
Esbuild 是一个非常新的模块打包工具,它提供了与 WebpackRollupParcel 等工具「相似」的资源打包能力,却有着高的离谱的性能优势:

在这里插入图片描述

esbuild 是 go 语言编写的并且是多线程执行,性能是 js 的好几十倍,所以很快。

  • 无需缓存即可实现基础打包
  • 支持 ES6 跟 CommonJS 模块
  • 支持 ES 6 Tree Shaking
  • 体积小
  • 插件化
  • 其他
  • 内置支持编译 jsx

2.SWC 介绍

swc 是用 rust 写的,所实现的功能跟 babel 一样,es6 语法转 es5,但是速度比 babel 更快,前端基建工具使用 rust 的是越来越多了,未来可能还会有一个替代 postCss

在这里插入图片描述

那如果把 esbuild + swc 结合起来构建那不是要起飞?

3. 需要安装的依赖

  1. npm install @swc/core 是 swc 的核心包,用于编译 JavaScript 和 TypeScript 代码

  2. npm install esbuild 是一个快速的 JavaScript 和 TypeScript 构建工具

  3. npm install ts-node 用来编译打包运行 ts-node-esm 命令

4. 搭建基础项目结构

在这里插入图片描述

  1. 使用 tsc --init 命令 生成 tsconfig.json 配置文件
    • 需要修改这三个命令,不让等会的 config.ts 配置打包的文件会语法报错 "target": "ESNext","module": "ESNext","moduleResolution": "Node",
  2. 使用 npm init 命令 生成 package.json 配置文件
    • 运行后会让你填写一些基础信息,直接yes跳过默认就行
    • 需要添加修改 "type": "module", 配置
  3. 配置基础打包命令,在 package.json 文件下的 scripts 添加运行指令 dev-esm:开发环境 后面我们会配置 config.ts 打包文件
"scripts": {"dev-esm": "npx ts-node-esm ./config.ts"
},
  1. 编写一个测试的 ts 语法文件;在 src 文件夹中新增 main.ts 文件,编写一些 ts 语法文件
export const a: number = 1;
export const b: string = "ikun";
let x = 1;
let fn = () => 123;
console.log(x, fn);

5. esBuild+SWC 基础配置

  1. 在根目录新建 config.js 文件 (这是最基本的)
import esbuild from "esbuild"; //打包工具
import swc from "@swc/core"; //类似于babel es6 转 es5
import fs from "node:fs";
await esbuild.build({entryPoints: ["./src/main.ts"], //入口文件bundle: true, //模块单独打包loader: {".js": "js",".ts": "ts",".jsx": "jsx",".tsx": "tsx",},treeShaking: true,define: {"process.env.NODE_ENV": '"production"',},plugins: [{//实现自定义loadername: "swc-loader",setup(build) {build.onLoad({ filter: /\.(js|ts|tsx|jsx)/ }, (args) => {// console.log(args);const content = fs.readFileSync(args.path, "utf-8");const { code } = swc.transformSync(content, {filename: args.path,});return {contents: code,};});},},],outdir: "dist",
});

6. 运行打包

  1. 执行 npm run dev-esm 运行即可,可以看到已经编译完成,并且通过 swc 转换为了 es5 语法文件

在这里插入图片描述

7. esBuild+SWC 高级用法

除了上述基本用法之外,swc 和 esbuild 还提供了许多高级用法,可以更好地满足我们的构建需求。具体使用可以去官网看着配置试下吧

1. 插件系统

swc 和 esbuild 都提供了插件系统,可以通过插件来扩展其功能。例如,swc 的插件可以用于优化代码,提高性能。esbuild 的插件则可以用于处理特定类型的文件,或自定义转换规则。

2. 缓存系统

swc 和 esbuild 都提供了缓存系统,可以减少重复编译时间。当文件内容没有发生变化时,swc 和 esbuild 会从缓存中读取已编译的代码,以提高构建速度。

3. Watch 模式

swc 和 esbuild 都支持 Watch 模式,可以在文件发生变化时自动重新编译代码。Watch 模式可以减少手动运行构建命令的频率,提高开发效率。

4. 自定义插件

最后,我们可以通过编写自定义插件来扩展 swc 和 esbuild 的功能。例如,可以编写一个插件来自动引入 CSS 文件,或者优化 JavaScript 代码。自定义插件可以根据实际需求进行编写,以更好地满足项目的构建需求。

5. 总结

本文介绍了如何使用 swc 和 esbuild 来构建一个简单的 TypeScript 应用程序,并讨论了一些高级用法。swc 和 esbuild 都是现代前端构建工具中的代表,它们都提供了快速编译、代码压缩等功能,可以有效提高应用程序的性能。通过学习 swc 和 esbuild 的使用方法,我们可以更好地进行前端工程化开发,提高开发效率和代码质量。

这篇关于esBuild + SWC 构建 TS 项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/517033

相关文章

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

使用Python和python-pptx构建Markdown到PowerPoint转换器

《使用Python和python-pptx构建Markdown到PowerPoint转换器》在这篇博客中,我们将深入分析一个使用Python开发的应用程序,该程序可以将Markdown文件转换为Pow... 目录引言应用概述代码结构与分析1. 类定义与初始化2. 事件处理3. Markdown 处理4. 转

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带