如何使用 npm 命令编译打字稿?

Posted

技术标签:

【中文标题】如何使用 npm 命令编译打字稿?【英文标题】:How to compile typescript using npm command? 【发布时间】:2017-06-10 17:47:40 【问题描述】:

我只是想知道是否有任何命令可以直接编译打字稿代码并获得输出。现在,我正在做的是,每次我对文件进行更改时,我都必须重新运行命令才能编译它

npm start

这会启动浏览器,然后我必须使用 Ctrl+C 停止执行,然后我必须使用 npm 命令运行文件

node filename

查看输出。

所以我想知道的是,是否有任何 npm 命令可以编译 .ts 文件并查看我在使用文件运行文件时对文件所做的更改

node filename

命令

【问题讨论】:

您应该阅读有关任务运行器的信息,或者只需将tsc app.ts 添加到npm start of package.json 【参考方案1】:

您可以使用--watch 参数启动tsc 命令(打字稿编译器)。

这是一个想法:

使用tsconfig.json 文件配置打字稿 运行tsc --watch,因此每次更改.ts 文件时,tsc 都会对其进行编译并生成输出(假设您配置了打字稿以将输出放在./dist 文件夹中) 使用nodemon 观察./dist 中的文件是否已更改以及是否需要重新启动服务器。

这里有一些脚本(放入package.json)可以帮助你做到这一点(你需要安装以下模块npm install --save typescript nodemon npm-run-all rimraf

"scripts": 
    "clean": "rimraf dist",
    "start": "npm-run-all clean --parallel watch:build watch:server --print-label",
    "watch:build": "tsc --watch",
    "watch:server": "nodemon './dist/index.js' --watch './dist'"

那么你只需要在终端中运行npm start

【讨论】:

这对我不起作用,因为nodemon 试图在watch:build 任务完成之前启动服务器。我从 nodemon 收到错误消息:Cannot find module '.../dist/index.js 您可能需要在packages.json中添加nodemon、npm-run-all和rimraf npm i rimraf npm-run-all nodemon --save-dev tsc 是打字稿编译器。当您使用 npm install typescript 安装 typescript 时,它就会出现。您也可以将它与npx tsc 一起使用。您可以找到更多信息here【参考方案2】:

这是基于@ThomasThiebaud 提出的解决方案。在 nodemon 尝试启动服务器之前,我必须对其进行一些修改以确保文件是在 dist/ 中构建的。

"scripts": 
    "clean": "rimraf dist",
    "build": "tsc",
    "watch:build": "tsc --watch",
    "watch:server": "nodemon './dist/index.js' --watch './dist'",
    "start": "npm-run-all clean build --parallel watch:build watch:server --print-label"
  ,

您仍然需要运行 npm start 来启动整个过程。

【讨论】:

【参考方案3】:

这是我的方法,假设您将所有typescript 文件保存在src 文件夹中,并希望在./dist 文件夹中生成输出的javascript 文件。


    "name": "yourProjectName",
    "version": "1.0.0",
    "description": "",
    "main": "./dist/index",
    "types": "./dist/index",
    "scripts": 
        "dev": "tsc --watch & nodemon dist"
    ,
    "author": "Gh111",
    "license": "ISC",
    "devDependencies": 
        "yourdevDependencies": "^1.0.0"
    

和打字稿配置文件tsconfig.json


  "compilerOptions": 
    "target": "es5",       
    "module": "commonjs",  
    "outDir": "./dist",    
  ,
  "include": ["./src/**/*"],
  "exclude": [
    "node_modules"
  ]

好的,这是怎么回事

首先我们应该创建 tsconfig.json 并告诉 typescript 将编译后的文件放入 ./dist 文件夹,同时我们应该排除 node_module 文件夹或我们想要的任何内容,并包含 ["./src/**/*"] 目录中的所有内容。

之后在packages.json文件中我们应该指定我们编译的index.js文件的路径

"main": "./dist/index"

最后我们告诉tsc--watch 任何typescript 的变化,并告诉nodemon./dist 目录内观察,如果有变化nodemon 将重新启动服务器。

"scripts": 
    "dev": "tsc --watch & nodemon dist"
 ,

运行脚本类型npm run dev

【讨论】:

【参考方案4】:

编译 TypeScript

tsc 文件名.ts |节点文件名.js(适用于 windows 用户)。

tsc filename.ts && node filename.js(适用于 Mac 用户)。

【讨论】:

以上是关于如何使用 npm 命令编译打字稿?的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿中将类型本地添加到无类型的 npm 模块?

如何将打字稿定义文件添加到 npm 包中?

无法使用 NPM 更新到最新的打字稿

我应该在部署之前构建一个打字稿 npm 模块吗?

用于构建打字稿的 NPM 脚本不起作用

如何从 git 中排除打字稿编译的文件