首页 > 解决方案 > 如何将 TypeScript 代码编译成单个 .js 文件,可通过“node mycode.js”执行?

问题描述

我希望能够在没有 webpack、gulp 等的情况下做到这一点,只需“tsc [args] mycode.ts”。这甚至可能吗?

在我的 package.json 中,我有一个这样的构建命令:

    "build:mycode": "tsc --allowSyntheticDefaultImports --lib es2018 --lib dom -m amd -t es2018 --moduleResolution node --outFile ./mycode.js ./mycode.ts",

(上述所有配置都是使用tsc命令行参数完成的,而不是在 中设置的tsconfig.json原因是我正在生成一个与我的主项目不同的构建脚本,它确实使用tsconfig.json了 、webpack 等)

我尝试使用-m commonjs,但不允许使用--outFile,仅amdsystem

问题是,以这种方式生成的代码在调用时会产生此错误node

ReferenceError: define is not defined

我不知道如何定义define. 该命令是否有node提供必要定义的参数?到目前为止,我在谷歌上搜索到的所有内容都调用了我宁愿避免使用的额外工具,或者针对我们兄弟wser 而不是创建一个命令行工具。

注意:任何涉及<scr ipt>标签的解决方案都不适用。

标签: javascriptnode.jstypescript

解决方案


无法使用tsc's--outFile参数将 CommonJS 模块连接到单个文件。有关讨论,请参阅https://github.com/microsoft/TypeScript/issues/7252

您将需要使用捆绑器(例如 webpack)来实现您的目标。


原答案:

使用 编译单个文件时,不需要tsc该参数。--outFile此外,该--lib选项接受一个 arg 或一个(逗号分隔的)列表。这是您的示例的修改版本:

tsc \
  --allowSyntheticDefaultImports \
  --lib es2018,dom \
  --module commonjs \
  --target es2018 \
  --moduleResolution node \
  ./script.ts

这不会捆绑您的脚本,而只是将其转换为 JavaScript。它仍将依赖任何外部进口。


推荐阅读