如何将多个TypeScript文件编译成单个输出JS文件?


TypeScript是JavaScript的强类型超集,它编译成纯JavaScript。TypeScript向语言添加了静态类型检查、类和接口,使编写和维护大型应用程序更容易。TypeScript文件编译成JavaScript文件,可以在任何支持JavaScript的浏览器或服务器中运行。本文将探讨如何将多个TypeScript文件编译成单个输出js文件。

我们将首先探讨如何使用TypeScript编译器编译多个TypeScript文件,然后学习如何使用Webpack将多个TypeScript文件捆绑到单个JavaScript文件中。

使用`tsc`将多个TS文件编译成单个JS文件

TypeScript编译器是一个命令行工具,可用于将TypeScript代码编译成JavaScript。要安装TypeScript编译器,请打开终端并运行以下命令:

npm install -g typescript

接下来,我们需要在项目根目录中创建一个tsconfig.json文件。tsconfig.json文件包含TypeScript编译器的配置选项。

这是一个示例tsconfig.json文件:

{
   "compilerOptions": {
      "target": "ES2015",
      "outFile": "out/bundle.js",
      "module": "amd",
      "sourceMap": true,
   },
   "include": [
      "src/**/*.ts"
   ]
}

在这个示例配置中,我们使用了TypeScript编译器以及诸如target、outFile、module、sourceMapinclude之类的选项。这些选项指定了ECMAScript版本(设置为ES2015),输出文件名(设置为out/bundle.js),模块系统(我们有两个选项amdsystem,并设置为amd),源映射生成(设置为true)以及要包含在编译中的文件。我们指定了src目录及其子目录中的所有文件都包含在编译中。

要编译我们的TypeScript代码,我们可以在终端中运行以下命令:

tsc

这将把"src"目录及其子目录中的所有TypeScript文件编译成单个JavaScript文件,该文件位于"out/bundle.js"

示例1

对于此示例,我们将创建两个TypeScript文件,即src/index.ts和src/app.ts。按照以下命令创建具有这些名称的空文件:

$ touch src/app.ts src/index.ts
$ touch tsconfig.json

现在,我们将通过设置tsconfig.json来配置TypeScript编译器:

touch tsconfig.json

现在,通过修改outFile值为out/bundle.js,将上述配置选项粘贴到tsconfig.json文件中。

此外,请将以下代码粘贴到相应的文件中:

src/app.ts

export default interface Person {
   firstName: string, 
   lastName: string,
   sayHello(): void, 
}

这声明并导出一个名为Person的接口,它具有两个属性firstNamelastName以及一个方法sayHello

src/index.ts

import Person from "./app"
class Employee implements Person {
   firstName: string 
   lastName: string 

   constructor (firstName: string, lastName: string) {
      this.firstName = firstName,
      this.lastName = lastName
   }
   sayHello() {
      console.log(`Hello, ${this.firstName + this.lastName}`)
   }
}
const obj = new Employee("Aditya", "Singh")
obj.sayHello()

此文件导入导出的Person接口并在其上实现一个类。

现在,要编译所有这些文件(在本例中为两个文件),请运行:

tsc

输出

out/bundle.js

define("app", ["require", "exports"], function (require, exports) {
   "use strict";
   Object.defineProperty(exports, "__esModule", { value: true });
});
define("index", ["require", "exports"], function (require, exports) {
   "use strict";
   Object.defineProperty(exports, "__esModule", { value: true });
   class Employee {
      constructor(firstName, lastName) {
         (this.firstName = firstName), (this.lastName = lastName);
      }
      sayHello() {
         console.log(`Hello, ${this.firstName + " " + this.lastName}`);
      }
   }
   const obj = new Employee("Aditya", "Singh");
   obj.sayHello();
});
//# sourceMappingURL=bundle.js.map

将创建一个名为out/bundle.js的新文件,其中包含单个编译后的JS文件。此编译后的JS文件包含AMD(异步模块定义)模块,要使用Node.js运行这些模块,我们首先必须使用Webpack或Rollup捆绑器将其转换为Node.js可以理解的格式。这是使用tsc将多个TypeScript文件编译成单个TypeScript文件的限制。

使用Webpack将多个TS文件编译成单个JS文件

Webpack是一个流行的现代Web开发构建工具,可用于捆绑和优化JavaScript文件,但它也通过加载器内置支持TypeScript。Webpack在后台使用tsc来转换.ts文件。ts-loader用作webpacktsc之间的粘合剂。因此,您仍然需要您的tsconfig.json文件。

示例2

我们将基于之前的示例,并使用webpack将之前创建的两个TypeScript文件编译成单个JS文件。

要使用webpack将TS文件转换为JS文件,您需要安装必要的依赖项,包括webpack、webpack-clits-loader

npm install webpack webpack-cli ts-loader

安装这些依赖项后,您可以在项目目录中创建一个Webpack配置文件webpack.config.js。这是一个示例配置文件:

配置文件 (webpack.config.js):

const path = require('path');
module.exports = {
   entry: './src/app.ts',
   mode: 'development',
   devtool: 'inline-source-map',
   watch: true,
   output: {
      filename: 'bundle.js',
      path: path.resolve(__dirname, 'dist'),
   },
   resolve: {
      extensions: ['.ts', '.js'],
   },
   module: {
      rules: [
         {
            test: /\.ts$/,
            use: 'ts-loader',
            exclude: /node_modules/,
         },
      ],
   },
};

在此配置文件中,entry属性指定应用程序的入口点,它是一个TypeScript文件(在此示例中为app.ts)。mode属性指定构建模式(在此示例中为development),devtool属性指定源映射类型。output属性指定输出文件名和目录,resolve属性指定要解析的文件扩展名。最后,module属性指定不同文件类型的加载器,包括TS文件的ts-loader

watch选项设置为true指定Webpack在后台运行,并在检测到.ts文件的保存更改时自动编译。

要编译所有.ts文件(在本例中为src/index.ts和src/app.ts),我们只需要运行:

npx webpack

这将创建一个包含单个捆绑.js文件的dist/bundle.js文件。

输出

将创建一个名为dist/bundle.js的新文件,您可以使用以下命令在Node.js环境中运行它:

node dist/bundle.js

您将在终端中获得以下输出:

Hello, Aditya Singh

结论

我们讨论了将多个TypeScript文件编译成单个JavaScript文件的两种方法——使用TypeScript编译器或使用Webpack。TypeScript编译器简单易用,配置要求低,但仅限于AMDsystem模块。同时,webpack生成的JS文件几乎支持所有模块类型,例如commonjs,但配置更复杂。可以根据项目需要选择这两种方法中的任何一种。

更新于:2023年8月21日

4K+ 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告