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

TypeScript——webpack

webpack

    • 1、webpack
    • 2、实例演示
      • 2.1、添加TypeScript文件
      • 2.2、安装webpack
      • 2.3、配置webpack
      • 2.4、运行webpack

项目中的TypeScript源代码不会全部放在一个文件中,我们会根据组件、模块和功能等将源代码划分到不同的文件。在发布一个项目时,尤其Web前端应用,通常需要使用打包工具对源文件进行打包合并。使用打包工具至少有以下几个原因:

  • 由于运行环境(浏览器)中不支持TypeScript代码中使用的模块格式(ES模块)​,因此会导致无法加载代码。打包工具能够解析模块间的依赖关系并将多个模块文件合并为运行环境能够直接加载的单一文件。
  • 在浏览器环境中减少加载的资源文件数量能够显著提升Web应用的性能。如果使用打包工具将多文件合并为一个文件,那么浏览器只需加载一个文件即可。

1、webpack

webpack是一个流行的JavaScript应用打包器。webpack的主要用途是将多个JavaScript文件打包成一个或多个JavaScript文件。除此之外,webpack还能够打包其他类型的资源文件,如图片和CSS等。

2、实例演示

本节将通过一个简单的例子来演示如何将TypeScript与webpack结合使用。此例中,web-pack负责将多个TypeScript源文件打包合并为一个单独的JavaScript文件,具体如图所示。


与配置Babel的前四步相同,我们需要安装Node.js和TypeScript并且初始化工程。

假设当前工程的目录结构如下:

C:\ts-webpack |-- node_modules | |-- <省略了一部分代码包> | `-- typescript |-- package.json |-- package-lock.json `-- tsconfig.json

package.json文件的内容如下:

{"name":"ts-webpack","version":"1.0.0","devDependencies":{"typescript":"^3.8.2"}}

tsconfig.json文件的内容如下:

{"compilerOptions":{"target":"ES6","strict":true,"outDir":"dist"}}

2.1、添加TypeScript文件

为了演示webpack的打包功能,我们新建两个模块文件。在“C:\ts-webpack”目录下创建一个src文件夹并添加index.ts和utils.ts文件。

当前工程的目录结构如下:

C:\ts-webpack |-- node_modules | |-- <省略了一部分代码包> | `-- typescript |-- src | |-- index.ts | `-- utils.ts |-- package.json |-- package-lock.json `-- tsconfig.json

utils.ts文件的内容如下:

exportfunctionadd(x:number,y:number){returnx+y;}

index.ts使用了utils.ts中导出的add函数,index.ts文件的内容如下:

import{add}from'./utils';consttotal=add(1,2);console.log(total);

2.2、安装webpack

在“C:\ts-webpack”目录下,运行如下命令来安装webpack及相关工具:

npminstall--save-dev webpack webpack-cli ts-loader

此时,​“C:\ts-webpack”目录的结构如下:

C:\ts-webpack |-- node_modules | |-- <省略了一部分代码包> | |-- ts-loader | |-- typescript | |-- webpack | `-- webpack-cli |-- src | |-- index.ts | `-- utils.ts |-- package.json |-- package-lock.json `-- tsconfig.json

2.3、配置webpack

在默认情况下,webpack会使用“webpack.config.js”作为配置文件。在“C:\ts-webpack”目录下创建一个“webpack.config.js”文件,它的内容如下:

constpath=require('path');module.exports={entry:'./src/index.ts',module:{rules:[{test:/\.tsx?$/,use:'ts-loader',exclude:/node_modules/}]},resolve:{extensions:['.tsx','.ts','.js']},output:{filename:'bundle.js',path:path.resolve(__dirname,'dist')}};

在该配置文件中,​“entry”属性用来配置入口的模块文件,webpack将搜索该模块文件直接或间接依赖的其他模块文件,并将此依赖关系保存在一种称作“依赖图”的数据结构中。

“module.rules”属性用来配置文件加载器,文件加载器定义了如何解析一个文件以及如何打包该文件。webpack从“依赖图”中读取要加载的文件,然后根据文件的类型选择对应的文件加载器。webpack内置了JavaScript文件和JSON文件的加载器,若想要打包其他类型的文件,则必须安装和配置使用的加载器。此例中,我们想要让webpack能够打包TypeScript文件,因此必须安装能够处理TypeScript文件加载器。其中:

  • “test”属性定义了在哪些文件上使用“ts-loader”文件加载器。此例中,使用正则表达式匹配了以“.ts”或“.tsx”结尾的文件。
  • “use”属性定义了文件加载器的名字。此例中,使用的是前面安装的“ts-loader”文件加载器。

“resolve.extensions”属性定义了在文件名相同但文件扩展名不同时选择文件的优先级,第一个数组元素的优先级最高。例如,若同时存在utils.ts和utils.js文件,将优先使用index.ts文件。

“output”属性定义了打包生成的文件名及存放的位置。此例中,将打包生成的“bundle.js”存放在“C:\ts-webpack\dist”目录下。

现在,​“C:\ts-webpack”目录的结构如下:

C:\ts-webpack |-- node_modules | |-- <省略了一部分代码包> | |-- ts-loader | |-- typescript | |-- webpack | `-- webpack-cli |-- src | |-- index.ts | `-- utils.ts |-- package.json |-- package-lock.json |-- tsconfig.json `-- webpack.config.js

2.4、运行webpack

在“C:\ts-webpack”目录下运行webpack命令来打包文件,示例如下:

npx webpack

运行webpack命令会在“C:\ts-webpack\dist”目录下生成打包后的文件,示例如下:

C:\ts-webpack |-- dist | `-- bundle.js |-- node_modules | |-- <省略了一部分代码包> | |-- ts-loader | |-- typescript | |-- webpack | `-- webpack-cli |-- package.json |-- package-lock.json |-- src | |-- index.ts | `-- utils.ts |-- tsconfig.json `-- webpack.config.js

运行打包后的“bundle.js”文件能够输出数字3,因为我们在index.ts中使用了utils.ts提供的add函数来计算并打印“1+2”的值。示例如下:

nodedist/bundle.js

最后,我们将webpack命令添加为npm脚本。在package.json文件的“scripts”属性中定义一个“bundle”脚本,示例如下:

{"name":"ts-webpack","version":"1.0.0","scripts":{"bundle":"webpack"},"devDependencies":{"ts-loader":"^6.2.1","typescript":"^3.8.2","webpack":"^4.41.6","webpack-cli":"^3.3.11"}}

现在可以通过“npm run”命令来运行该脚本,示例如下:

npmrun bundle
http://www.jsqmd.com/news/557422/

相关文章:

  • Lean 4:形式化验证技术在高可靠系统开发中的革命性应用
  • 安路PH1A180 FPGA实战:用米联客FDMA IP搞定DDR视频缓存,附源码调试心得
  • RabbitMQ MQTT插件实战:5分钟搞定物联网设备消息通信(含WebSocket配置)
  • Bongo-Cat-Mver:实时键盘动画工具的创新应用与实践指南
  • 极简自动化设计:OpenClaw+Qwen3.5-9B三行指令管理桌面文件
  • SpringBoot 过滤器(Filter)与请求链路梳理
  • MS5803-14BA I²C驱动开发:嵌入式压力传感器实战指南
  • 从MVS到NeRF的桥梁:手把手拆解MVSNeRF中的代价体与神经编码体
  • 嵌入式ADC过采样驱动文档规范与实践
  • 部署OpenClaw有哪些成本?附OpenClaw低成本部署指南
  • LLVM指令调度实战:如何用llvm-mca优化AArch64代码性能(附TSV110配置示例)
  • java面试中项目开发难题解析怎么写?
  • 3个秘诀让你轻松获取全网无损音乐:洛雪音乐音源使用指南
  • 基于python框架的高校实验室耗材管理系统vue
  • Linux下Conda+R+RStudio环境配置全攻略:从零搭建高效数据分析平台
  • TrollInstallerX终极指南:iOS 14-16.6.1系统TrollStore一键部署深度解析
  • Python 官方网站(python.org)上 Python 3.12.9 版本的 Windows 下载选项说明
  • Fun-Rec:推荐系统学习与实践的一站式解决方案
  • OpenClaw压力测试指南:GLM-4.7-Flash并发调用优化
  • 大数据领域数据架构的关键技术与应用
  • Azure IoT Hub Arduino库技术解析与迁移指南
  • Windows驱动管理工具与驱动仓库清理技术完全指南
  • 2026辽宁诚信企业法律顾问律师推荐指南:辽宁行政诉讼律师、辽宁金融纠纷律师、辽宁交通事故律师、辽宁仲裁执行律师选择指南 - 优质品牌商家
  • Eclipse反编译插件Decompiler安装与配置全攻略(附JD-Core设置技巧)
  • Open Application Model应用范围实战指南:如何组织和管理分布式应用边界
  • 为什么加了索引还慢?MySQL 索引失效 12 个排查点
  • 文件驱动的智能体通信:构建高可靠分布式协作系统的架构解析与实践指南
  • 如何用TensorFlow的DeepLabV3+实现Cityscapes街景分割?完整训练+验证+可视化流程
  • FastAPI热重载卡顿?降级uvicorn到0.20.0可能是最快解决方案(附原因分析)
  • Nacos 2.4.1 连接人大金仓踩坑记:除了改驱动,这个函数也得动!