📅  最后修改于: 2023-12-03 15:38:47.214000             🧑  作者: Mango
在 TypeScript 项目中,我们经常需要执行一些命令行脚本,比如编译 TypeScript 代码、启动服务、运行测试用例等。为了简化这些操作,我们可以将这些命令封装到 package.json 的 scripts 字段中,然后通过 npm 命令来调用。
在 package.json 中,scripts 字段是一个对象,可以定义一系列的命令行脚本。每个脚本都有一个名称和一个对应的 shell 命令。
例如,以下是一个简单的 package.json 文件,定义了三个脚本:
{
"name": "my-project",
"version": "1.0.0",
"scripts": {
"build": "tsc",
"start": "nodemon src/index.ts",
"test": "jest"
},
"devDependencies": {
"typescript": "^4.0.0",
"nodemon": "^2.0.4",
"jest": "^26.5.3"
}
}
上面的 scripts
字段定义了三个脚本:
build
: 编译 TypeScript 代码,调用 tsc
命令。start
: 启动服务,调用 nodemon
命令,并自动重启服务。test
: 运行测试用例,调用 jest
命令。这些脚本都可以通过 npm run
命令来调用,例如:
$ npm run build
$ npm run start
$ npm run test
在执行 npm run
命令时,npm 会自动将当前目录下的 node_modules/.bin
目录添加到 PATH 环境变量中,因此可以直接调用 tsc
、nodemon
和 jest
命令。
如果脚本需要传递参数,可以在命令后面加上参数,例如:
{
"scripts": {
"build": "tsc",
"start": "nodemon src/index.ts",
"test": "jest",
"test:watch": "npm run test -- --watchAll"
}
}
以上的 test:watch
脚本调用了 npm run test
命令,并传递了一个参数 --watchAll
。
有时候,需要同时执行多个命令,可以使用 &
连接符将多个命令串行执行,例如:
{
"scripts": {
"build": "tsc",
"start": "nodemon src/index.ts",
"test": "jest",
"test:e2e": "npm run start & npm run test"
}
}
以上的 test:e2e
脚本将同时启动服务和运行测试用例。
如果有多个项目需要执行相同的命令,可以将这些命令定义在一个公共的 package.json 文件中,然后在每个项目的 package.json 文件中继承这些命令。在子项目中,可以通过 npm run <script>
来调用公共脚本。
例如,有一个公共的 package.json 文件,定义了以下脚本:
{
"name": "my-common-scripts",
"version": "1.0.0",
"scripts": {
"build": "tsc",
"test": "jest"
},
"devDependencies": {
"typescript": "^4.0.0",
"jest": "^26.5.3"
}
}
现在,我们需要在一个 TypeScript 项目中使用这些脚本,可以在子项目的 package.json 文件中引入公共的 package.json 文件:
{
"name": "my-project",
"version": "1.0.0",
"scripts": {
"test": "npm run my-common-scripts:test",
"build": "npm run my-common-scripts:build"
},
"devDependencies": {
"my-common-scripts": "^1.0.0"
}
}
以上的 test
和 build
脚本继承了公共的 test
和 build
脚本。
在 TypeScript 项目中,使用 package.json 的 scripts 字段可以简化命令行操作,方便执行常用的命令。可以传递参数、串行执行多个命令,甚至可以继承公共的配置。使用 npm 命令可以轻松调用这些脚本,提高开发效率。