# Node.js
在本教程中,你将学习搭建使用 TypeScript 语言的 Node.js 项目的自动化开发环境。
本教程假设你在系统上已经安装 Node.js 和 tsc 模块。
# 创建目录结构
首先创建一个新的目录 nodets。
接下来,在 nodets 目录下面创建两个子目录,分别是 build 和 src,如下所示:

TypeScript 代码存储在 src 目录下,而编译器的输出文件存储在 build 目录中。
# 配置 TypeScript 编译器
打开 macOS 和 Linux 的终端或者 Windows 上的命令提示符,在 nodets 目录下运行下面的命令,创建 tsconfig.json 文件:
tsc --init
你会看到 nodets 目录下新增了 tsconfig.json 文件:

tsconfig.json 配置指定目录 (nodets) 是 TypeScript 项目的根目录。当你编译 TypeScript 文件的时候,TypeScript 编译器会使用 tsconfig.json 中的配置来编译项目。
现在,你可以打开 tsconfig.json 文件,里面有非常多的选项,在本教程中,主要关注两个选项:
rootdir– 指定 TypeScript 输入文件的根目录outdir- 指定 JavaScript 输出文件的目录
这些选项在默认情况下是被注释掉的,你需要取消它们的注释(删除行首的 //),并改成如下所示的配置:
对于 outDir 选项:
"outDir": "./build"
对于 rootDir 选项:
"rootDir": "./src"
为了验证新的配置是否生效,可以在 ./src 目录下创建一个名为 app.ts 的新文件,敲入如下代码:
console.log('Node.js TypeScript');

接下来运行下面的命令来执行 TypeScript 编译器的编译工作,它会编译所有存储在 src 目录下的文件:
tsc
如果配置是正确有效的,将会看到 ./build 目录下生成了 app.js 文件:

导航到 build 目录并执行下面的命令来运行 app.js 文件:
node app.js
看到下面的输出结果:
Node.js TypeScript
每当你修改了 TypeScript 代码的时候,你需要:
- 构建项目;
- 运行 JavaScript 输出文件。
这样很浪费时间。幸运的是,你可以使用一些 Node.js 模块,自动化执行上面的流程。
# 安装 Node.js 模块
nodemon 模块允许你在修改了 JavaScript 源代码后,重新启动应用程序。
concurrently 模块允许并发运行多个命令。
首先在根目录下执行 npm init 命令:
npm init --yes
接下来,安装 nodemon 和 concurrently 模块:
npm install --g nodemon concurrently
需要花费一点时间来安装它们,安装完成以后我们继续后面的步骤。
注意 --g 标识表示 npm 将会全局安装这两个模块,你可以在其他项目中使用它们。
接下来打开 package.json 文件,在 scripts 选项中会看到下面的代码:
...
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
...
2
3
4
5
把 scripts 修改成如下所示的配置:
...
"scripts": {
"start:build": "tsc -w",
"start:run": "nodemon build/app.js",
"start": "concurrently npm:start:*"
},
...
2
3
4
5
6
7
"start:build": "tsc -w" 会监听 ./src 下的文件的变化,当有文件发生变化的时候,重新编译这些文件。
"start:run": "nodemon build/app.js" 每当有新文件产生的时候,重新运行 ./build 目录下的 app.js 文件。
"start": "concurrently npm:start:*" 运行所有 npm:start:* 开头的命令,它会执行上面的 start:build 和 start:run 命令。
因为 app.js 是 Node.js 程序的入口,还需要把 package.json 文件中的 main 配置修改成 app.js,如下所示:
"main": "index.js"
修改成:
"main": "app.js"
最后,运行下面的命令:
npm start
为了验证配置已经生效,修改一些 app.ts 中的代码,将会在控制台看到一些新的执行结果输出。
← Section 9. 模块 项目进度 →