当前位置: 首页 > news >正文

16. 编译与构建工具

16. 编译与构建工具

1. 概述

TypeScript 编译和构建工具是将 TypeScript 代码转换为 JavaScript 的关键环节。选择合适的构建工具可以显著提升开发效率和构建性能。

┌─────────────────────────────────────────────────────────────┐ │ TypeScript 构建工具生态 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 官方工具 │ │ ├── tsc:TypeScript 官方编译器 │ │ ├── tsserver:语言服务 │ │ └──TSPlayground:在线体验 │ │ │ │ 打包工具集成 │ │ ├── Webpack:ts-loader、awesome-typescript-loader │ │ ├── Vite:@vitejs/plugin-react-swc、vite-plugin-checker │ │ ├── Rollup:@rollup/plugin-typescript │ │ ├── esbuild:原生支持 TypeScript │ │ └──SWC@swc/core,极速编译 │ │ │ │ 其他工具 │ │ ├── ts-node:直接运行 TypeScript │ │ ├── tsx:快速运行 TypeScript(基于 esbuild) │ │ ├── ts-jest:Jest 的 TypeScript 支持 │ │ └── tsd:类型定义测试 │ │ │ └─────────────────────────────────────────────────────────────┘

2. tsc 命令行工具

2.1 基本命令

# 编译 TypeScript 文件tsc index.ts# 监听模式tsc--watchtsc-w# 指定配置文件tsc-ptsconfig.json tsc--projecttsconfig.json# 生成配置文件tsc--init# 输出版本信息tsc--version# 显示配置tsc--showConfig

2.2 常用参数

# 指定输出目录tsc--outDir./dist# 指定输出文件tsc--outFile./bundle.js# 生成声明文件tsc--declaration# 生成 source maptsc--sourceMap# 移除注释tsc--removeComments# 严格模式tsc--strict# 跳过库检查tsc--skipLibCheck# 增量编译tsc--incremental

2.3 项目引用构建

# 构建项目引用tsc--buildtsc-b# 清理构建tsc--build--clean# 强制重建tsc--build--force# 详细输出tsc--build--verbose

3. Webpack 集成

3.1 使用 ts-loader

npminstall--save-dev typescript ts-loader webpack webpack-cli
// webpack.config.jsconstpath=require('path');module.exports={mode:'development',entry:'./src/index.ts',output:{path:path.resolve(__dirname,'dist'),filename:'bundle.js'},resolve:{extensions:['.ts','.js']},module:{rules:[{test:/\.ts$/,use:'ts-loader',exclude:/node_modules/}]},devtool:'source-map'};

3.2 使用 awesome-typescript-loader

npminstall--save-dev awesome-typescript-loader
// webpack.config.jsmodule.exports={module:{rules:[{test:/\.ts$/,use:'awesome-typescript-loader',exclude:/node_modules/}]}};

3.3 Fork TS Checker

npminstall--save-dev fork-ts-checker-webpack-plugin
// webpack.config.jsconstForkTsCheckerWebpackPlugin=require('fork-ts-checker-webpack-plugin');module.exports={plugins:[newForkTsCheckerWebpackPlugin({typescript:{configFile:'./tsconfig.json'}})]};

4. Vite 集成

4.1 创建 Vite + TypeScript 项目

# 创建项目npmcreate vite@latest my-app ----templatereact-ts# 或 Vue + TypeScriptnpmcreate vite@latest my-app ----templatevue-ts# 安装依赖cdmy-appnpminstall

4.2 Vite 配置

// vite.config.tsimport{defineConfig}from'vite';importreactfrom'@vitejs/plugin-react';// 使用 SWC 加速编译importreactfrom'@vitejs/plugin-react-swc';exportdefaultdefineConfig({plugins:[react()],resolve:{alias:{'@':'/src','@components':'/src/components'}},build:{outDir:'dist',sourcemap:true}});

4.3 类型检查插件

npminstall--save-dev vite-plugin-checker
// vite.config.tsimportcheckerfrom'vite-plugin-checker';exportdefaultdefineConfig({plugins:[checker({typescript:true,eslint:{lintCommand:'eslint "./src/**/*.{ts,tsx}"'}})]});

5. Rollup 集成

5.1 使用 @rollup/plugin-typescript

npminstall--save-dev rollup @rollup/plugin-typescript typescript tslib
// rollup.config.jsimporttypescriptfrom'@rollup/plugin-typescript';exportdefault{input:'src/index.ts',output:{dir:'dist',format:'esm',sourcemap:true},plugins:[typescript({tsconfig:'./tsconfig.json',declaration:true,declarationDir:'./dist/types'})]};

5.2 库打包配置

// rollup.config.jsimporttypescriptfrom'@rollup/plugin-typescript';importresolvefrom'@rollup/plugin-node-resolve';importcommonjsfrom'@rollup/plugin-commonjs';exportdefault[// ESM 构建{input:'src/index.ts',output:{file:'dist/index.esm.js',format:'esm',sourcemap:true},plugins:[typescript()],external:['react','react-dom']},// CJS 构建{input:'src/index.ts',output:{file:'dist/index.cjs.js',format:'cjs',sourcemap:true},plugins:[typescript()],external:['react','react-dom']}];

6. esbuild 集成

6.1 直接使用 esbuild

npminstall--save-dev esbuild
// build.jsconstesbuild=require('esbuild');asyncfunctionbuild(){awaitesbuild.build({entryPoints:['src/index.ts'],bundle:true,outfile:'dist/bundle.js',platform:'node',target:'node16',sourcemap:true,minify:true});}build();

6.2 命令行使用

# 基本编译esbuild src/index.ts--outfile=dist/index.js# 打包esbuild src/index.ts--bundle--outfile=dist/bundle.js# 压缩esbuild src/index.ts--minify--outfile=dist/index.js# 监听模式esbuild src/index.ts--watch--outfile=dist/index.js# 生成 source mapesbuild src/index.ts--sourcemap--outfile=dist/index.js

7. SWC(Speedy Web Compiler)

7.1 安装和配置

npminstall--save-dev @swc/cli @swc/core
// .swcrc{"jsc":{"parser":{"syntax":"typescript","tsx":true,"decorators":true},"target":"es2020","transform":{"react":{"runtime":"automatic"}}},"module":{"type":"es6"},"sourceMaps":true,"minify":false}

7.2 使用 SWC 编译

# 编译单个文件npx swc src/index.ts-odist/index.js# 编译整个目录npx swc src-ddist# 监听模式npx swc src-ddist-w

8. ts-node 和 tsx

8.1 ts-node

# 安装npminstall--save-dev ts-node# 运行 TypeScript 文件npx ts-node src/index.ts# 监听模式npx ts-node--watchsrc/index.ts# 跳过类型检查npx ts-node --transpile-only src/index.ts
// ts-node 配置{"ts-node":{"compilerOptions":{"module":"commonjs"},"transpileOnly":true,"files":true}}

8.2 tsx

# 安装npminstall--save-dev tsx# 运行 TypeScript 文件npx tsx src/index.ts# 监听模式npx tsx--watchsrc/index.ts# 生产模式npx tsx--conditions=production src/index.ts

9. Jest 集成

9.1 ts-jest 配置

npminstall--save-dev jest @types/jest ts-jest
// jest.config.jsmodule.exports={preset:'ts-jest',testEnvironment:'node',roots:['<rootDir>/src'],testMatch:['**/*.test.ts'],collectCoverageFrom:['src/**/*.ts'],coverageDirectory:'coverage'};

9.2 使用 SWC 加速

npminstall--save-dev @swc/jest
// jest.config.jsmodule.exports={transform:{'^.+\\.tsx?$':['@swc/jest']},testEnvironment:'node'};

10. 性能对比

工具编译速度特性支持生态集成适用场景
tsc⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐类型检查、声明生成
Webpack + ts-loader⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐复杂应用打包
Vite⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐现代前端开发
esbuild⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐快速构建、工具链
SWC⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐Rust 生态、极速编译
ts-node⭐⭐⭐⭐⭐⭐⭐⭐⭐开发调试
tsx⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐快速运行脚本

11. 完整示例:多环境构建配置

// scripts/build.jsconstesbuild=require('esbuild');constfs=require('fs');constpath=require('path');constisDev=process.env.NODE_ENV==='development';constisProd=process.env.NODE_ENV==='production';asyncfunctionbuild(){constconfig={entryPoints:['src/index.ts'],bundle:true,sourcemap:isDev,minify:isProd,target:'es2020',platform:'node',outfile:'dist/index.js',external:['express','react','react-dom'],define:{'process.env.NODE_ENV':JSON.stringify(process.env.NODE_ENV),'__DEV__':isDev,'__PROD__':isProd}};if(isDev){// 开发模式:监听文件变化constcontext=awaitesbuild.context(config);awaitcontext.watch();console.log('Watching for changes...');}else{// 生产模式:一次构建awaitesbuild.build(config);console.log('Build completed!');}}build().catch(console.error);
// package.json{"scripts":{"dev":"NODE_ENV=development node scripts/build.js","build":"NODE_ENV=production node scripts/build.js","start":"node dist/index.js","type-check":"tsc --noEmit","test":"jest"}}

12. 总结

场景推荐工具理由
类型检查tsc官方工具,最完整
声明生成tsc唯一支持
前端应用Vite开发体验好
库打包Rollup输出干净
快速构建esbuild/SWC速度快
Node.js 开发tsx简单快速
复杂应用Webpack生态丰富

13. 第三部分总结

恭喜你完成了第三部分:模块与工程化

你已掌握:

  1. ✅ 模块系统(导入/导出、动态导入)
  2. ✅ 声明文件(编写、发布、扩展)
  3. ✅ tsconfig 配置(编译选项、严格模式、项目引用)
  4. ✅ 编译与构建工具(tsc、Webpack、Vite、Rollup、esbuild、SWC)

http://www.jsqmd.com/news/861234/

相关文章:

  • 2026电镀镍标牌技术全解析:镍标牌厂家/镍标牌定制/镍转印标/不锈钢标牌/家电标牌/枪瞄标牌/电动车标牌/电铸镍标牌/选择指南 - 优质品牌商家
  • Python微服务架构:从单体到分布式的演进
  • UVa 253 Cube Painting
  • 小数据下防止过拟合的四大策略,深度学习模型训练与开发
  • 带标注的螺丝、螺栓、垫圈缺陷识别数据集,包含缺陷里包含生锈和划痕,1291张图,支持yolo,coco json,voc xml,文末有模型训练代码。
  • 2026年5月新发布:量化评估天津别墅装修源头公司,诺亚方舟装饰集团实力解析 - 2026年企业推荐榜
  • VS Code 响应式网站手机界面预览全【简易】指南
  • 2026年空压机出租报价核心维度拆解与实操参考:空压机出租报价/进口空压机出租/长臂锚固钻机出租/低噪音空压机出租/选择指南 - 优质品牌商家
  • Python事件驱动架构:设计模式与实战
  • 受够了网盘限速?2026年更顺手的不限速同步盘选择
  • 超宽自锚式悬索桥模型修正与抗震可靠度分析【附仿真】
  • 2026年山地车定制厂家综合:途锐达凭何成为口碑之选? - 2026年企业推荐榜
  • 2026年4月超纯水设备企业推荐,10吨双级高纯水设备/高纯水设备/超纯水设备/软化水设备,超纯水设备采购渠道怎么选择 - 品牌推荐师
  • 图解人工智能(31)深度学习前沿
  • Python API网关:架构设计与实战
  • 国内靠谱5吨软化水设备怎么选?认准诚信老牌厂家不踩坑,中水回用设备/5吨软化水设备,软化水设备品牌哪家可靠 - 品牌推荐师
  • GanttProject终极指南:免费开源的项目管理工具完全攻略
  • 建筑数据驱动预测控制方法【附模型】
  • 2026年AI面试助手深度测评:鹅来面 OfferGoose如何革新你的求职体验?
  • 2026会议复印机租赁标杆名录:公司复印机租赁/办公室打印机租赁/单位复印机租赁/单位打印机租赁/品牌复印机租赁/选择指南 - 优质品牌商家
  • 图解人工智能(32)深度学习前沿
  • SMA驱动的空间杆系结构地震响应控制模型试验与理论分析【附代码】
  • 2025-2026年国内天津国际高中推荐:五大排行专业评测解决择校迷茫痛点 - 品牌推荐
  • Python缓存策略:从理论到实践
  • 2026企业网盘选型对比:坚果云领衔,5款主流产品优劣与场景建议
  • 如何在5分钟内掌握DistroAV网络视频传输:新手完整指南
  • 3步打造智能字幕系统:MaxSubtitle插件深度解析
  • 专业级图片去重神器:彻底告别重复照片的数字困扰
  • 2026年当前宁波钢结构采购指南:聚焦余姚昌荣钢结构的核心优势 - 2026年企业推荐榜
  • 远程协同结构拟动力试验方法与技术【附代码】