使用TypeScript和Gulp构建现代Web应用

在现代Web开发中,构建工具和语言的选择对于提高开发效率和应用性能至关重要。TypeScript作为一种JavaScript的超集,提供了静态类型检查和ES6+的语法特性,而Gulp则是一种基于流的自动化构建工具,可以处理多种开发任务。本文将介绍如何结合使用TypeScript和Gulp来构建一个现代Web应用,并设置环境变量以适应不同的开发和生产环境。

Microsoft的ASP.NET提供了一个强大的优化引擎,用于JavaScript、CSS和其他资源,开发者可以利用它来打包、优化和构建现代Web应用。这个优化引擎基于Visual Studio.NET解决方案的环境设置,并且构建框架内置于Visual Studio.NET的工具中。在开源社区,每个项目都需要开发自己的构建工具和方法来支持各种构建输出。本文将专注于开发和生产环境路径的构建。

Gulp命令行接口

Gulp命令行接口(CLI)支持通过命令行扩展变量输入的能力。将使用YARGS npm包来实现以下命令行语法:

gulp --env prod

由于将使用TypeScript来实现功能,需要记住的是,尽管TypeScript不能与C#或Java等语言的类型系统相比,但它允许在项目中声明类型。TypeScript的类型系统非常灵活,允许编写适合需求的自定义类型定义,或者使用tsd工具来安装开源社区预定义的类型定义。

开始使用代码

要开始,需要克隆本文的基础代码,如下所示:

git clone -b 01-init https://github.com/kdcllc/Angular-TypeScript-Starter.git

如果机器上没有安装Git并且想按照步骤操作,可以在这里下载源代码。项目不包含其依赖项,需要运行以下命令:

npm i tsd install

如所见,需要执行两个不同的命令来下载项目依赖项。如果可以通过运行一个命令来完成呢?实际上有一种方法可以在一个命令中实现。

package.json文件

package.json文件包含有关Node.js执行环境的信息,可以在“scripts”节点下添加以下内容:

"postinstall": "tsd install"

当运行npm install时,tsd工具也会在npm依赖项安装完成后运行,因此是post install操作。

TypeScript和Yargs npm库

根据Microsoft TypeScript文档,编写自定义类型定义文件的最佳方式是使用npm库的文档,而不是库的源代码。以下是库的基本用法:

var argv = require('yargs').argv; if (argv.ships > 3 && argv.distance < 53.5) { console.log('Plunder more riffiwobbles!'); } else { console.log('Retreat from the xupptumblers!'); }

在这种情况下,argv变量有两个属性,ships和distance,用于解析特定逻辑。

自定义类型定义

在案例中,希望有一个名为env的属性,它提供了传递一个字符串的能力,该字符串设置为“dev”或“prod”。以下是使用TypeScript表达此业务需求的方式:

/* Custom file definition to support projects specific inputs */ declare namespace yargs { var argv: InputDef; } interface InputDef { env: string; } declare module 'yargs' { export = yargs; }

将为yargs包添加一个新的类型定义文件,通过在tools/typings/yards.ts中创建一个名为yargs.ts的新文件,并放置上述代码。虽然还有其他的类型定义文件可供这个npm库使用,但更喜欢编写自己的特定于使用库的类型定义。

编译器问题

在本文写作时,发现TypeScript编译器存在一个问题。它在Visual Studio Code IDE中识别自定义类型,但当尝试编译代码时,它会失败加载一个模块。如果想跟踪这个问题,这里是链接。

解决编译器问题

要解决编译器的问题,必须通过在tools/typings/目录中创建custom.d.ts文件来添加类型定义文件引用。放置以下文件引用:

/

据理解,TypeScript编译器正在寻找具有*.d.ts扩展名的文件,以解析类型。这可能不是一个bug,而是一个设计上的未记录功能。

Gulp任务和支持文件的结构

更喜欢在项目中的tools/目录下结构化Gulp任务和支持文件。由于将添加与应用程序相关的功能,创建一个名为application.ts的文件在tools/utils目录下。然后添加以下代码:

import { argv } from 'yargs'; export const ENVIRONMENTS = { DEVELOPMENT: 'dev', PRODUCTION: 'prod' }; /* retreive environment variable that is passed into the system */ export function getEnvironment(): string { if (argv.env != null) { if (argv.env === ENVIRONMENTS.PRODUCTION) { return ENVIRONMENTS.PRODUCTION; } else { // ability to extend more environments from here return ENVIRONMENTS.DEVELOPMENT; } } else { return ENVIRONMENTS.DEVELOPMENT; } }

如所见,选择了export function语法而不是类。这是偏好,尽管不限于使用其中任何一个。这是JavaScript动态特性创造的许多不同方式之一。在这段代码中,导入了“yargs”库,Visual Studio Code将其识别为一个有效的库。但是,如果尝试运行gulp任务,会得到一个错误。这是因为package.json文件中没有“yargs”库的引用。要解决这个问题,请运行以下命令:

npm i --save-dev yargs

此命令将在package.json文件的devDependencies下添加引用,并且还会将“yargs”库下载到node_modules中。

配置文件

为了拥有一个用于未来所有Gulp任务的中央配置文件,让在tools/目录下创建一个文件,并将其命名为“config.ts”,然后粘贴以下内容:

import { getEnvironment } from './utils/application'; export const ENV = getEnvironment();

由于有了检索环境设置的通用功能,现在可以修改默认任务如下:

import * as gulp from 'gulp'; import { ENV } from './tools/config'; gulp.task('default', done => { console.log('Environment is set to:', ENV); });

尝试运行以下命令以查看结果:

gulp gulp --env prod

应该看到环境输出随着命令行开关的变化而变化。

其他信息

Node.js是一个强大的服务器端JavaScript执行引擎,可以在许多不同的操作系统上运行,利用Google Chrome 8 JavaScript执行引擎。因此,这个项目可以在Node.js支持的任何操作系统上工作。

使用Windows 10来开发和测试代码。请随时留下任何缺失的步骤等,用于其他操作系统。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485