51

我想知道如何以跨平台的方式将TypeScript转换为 JavaScript。我知道typescript 的节点包管理器的可用性,但是还有其他可以在服务器端使用的替代方案吗?

4

12 回答 12

32

TypeScript 编译器是在 TypeScript 中构建的,因此可以作为 JS 文件 ( tsc.js) 使用,可以使用几乎任何符合 ES3 的 VM 或 JS 实现来运行。

也就是说,编译器当前的文件 I/O 基础结构仅支持 Node 和 Windows Scripting Host 文件 API。如果您想推荐对其他环境的支持,请随时通过我们的GitHub 站点 (原CodePlex)与团队联系

于 2012-10-01T18:36:59.607 回答
24

简短版本:如果可以,请使用 Node。这在当今变得不可避免。

也许这不是你想要的答案,但正如大家所说,编译器是一个 JS 文件,所以,你的选项是执行一个 JS 文件的选项。

在 Windows 中,有两个明显的,Node 和 Windows Script Host。

您已经了解节点,另一个选项是所有版本的 Windows 附带的组件(我认为),您可以这样做:

cscript path/to/tsc.js source-file.ts

您可以通过以下方式查看所有编译器选项:

cscript path/to/tsc.js

在 Linux 上,我假设您应该能够使用(除了节点):

  • V8 独立外壳,替换nodecscript使用v8-shell
  • ExecJS https://github.com/sstephenson/execjs
  • 所选平台上可用的任何其他 JS 运行器(例如,另一个答案提到 Rhino)

更新:另一个答案表明编译器 API 仅与节点和 Windows 脚本主机(cscript 工具)兼容,因此,如果正确,那么在 Linux 上,您将需要 Node 来编译 TypeScript。

如果您正在寻找类似的东西apt get tsc(或任何 Linux/Mac 包管理器),我认为没有。

我记得在某处读到过,I/O 已针对 Node 和 Windows Script Host 进行了优化,因此,如果您在选项方面遇到问题,如果寻求平台独立性,您可能最终会选择 Node。

更新:这里的另一个答案证实了关于兼容性的相同。

于 2012-10-03T03:23:27.003 回答
11

具体来说,在服务器上(假设您的服务器有可用的 Node.js),您只需运行:

node path/to/tsc.js yourFile1.ts yourFile2.ts [etc]

您可以在不输入任何文件名的情况下运行该命令以查看 tsc.js 的命令行帮助。

于 2012-10-01T22:39:10.523 回答
8

从命令行你可以使用 ts-node:

npm install ts-node

然后像这样调用命令:

tsc file.ts --outFile file.js
于 2020-04-02T18:54:26.543 回答
6

我有一个将 Typescript 编译为 Java 中的 Javascript 的项目:

https://github.com/martypitt/typescript4j

正如在其他答案中所讨论的,这使用了 Rhino,因此不依赖于npmor node

这是一个例子:

// Instantiate the compiler:
TypescriptCompiler compiler = new TypescriptCompiler();

// Compile a string:
String output = compiler.compile("class Greeter { greeting: string; }");

// Or, compile and output to a file:
compiler.compile(new File("example.ts"), new File('output.js'));

我在另一个项目中使用它 - 'Bakehouse'在 Spring 环境中执行 typescript 资源的即时编译

于 2013-01-17T07:35:15.777 回答
3

如果您需要以 Java 为目标,那么您可以在构建过程中使用 Rhino 引擎运行 tsc.js。

于 2012-10-02T11:34:14.213 回答
2

编译 ts -> js:node 可用于所有常见平台,所以我不明白为什么在你已经有了 tsc.js 的情况下还想要一个 tsc.java。安装节点没什么大不了的。事实上,它比 Java 更容易。

获得 proj.js 文件后,您可以将其复制到您希望使用的任何部署平台。

在我看来,JavaScript——或者更准确地说是 ECMAScript 是 Java 的替代品。所以我很高兴我不必为使用该工具而争论 JVM 等。但是,如果您更喜欢 Java,那么为什么还要为 JS 烦恼呢?

于 2012-10-02T00:12:37.650 回答
1

我一直在玩这个,并且可以使用以下代码用 javascript 编译 TypeScript:

<script src=typescript.js></script>

<script>

var scriptText = ""
        + "/// <reference path=\"test.ts\"/>" + "\r\n"
        + "class Car {"
        + "     constructor (private name: string) { } "
        + "     getName() { "
        + "         var juice = new Juice();"
        + "         return name; "
        + "     } "
        + "} "
        + "var car = new Car('Subaru Impreza');"
        + "console.log(car.getName());";





var TextWriter = function () { };

TextWriter.prototype = {
collected: '',

Write: function (sc) {
    this.collected += sc;
},
WriteLine: function(sc) {
    this.collected += sc + '\n';
},
toString: function() {
    return this.collected;
}
};

var output = new TextWriter();
var tsc = new TypeScript.TypeScriptCompiler(output);

var script = tsc.addUnit(scriptText, "");

tsc.emit();

console.log(output.toString());

</script>

虽然它并不完全理想。我正在尝试运行某些东西,以便可以在 C# 中将 TypeScript 转换为 JS(使用 Javascript .NET),但是在 ts.addUnit 调用中出现堆栈溢出。

于 2012-10-02T17:48:18.247 回答
1

SublimeText2 技巧 您可以直接从 SublimeText2 将 typescript 转换为 javascript(您需要节点):

使用以下内容创建一个Typescript.sublime-build文件/Sublime Text 2/Packages/User

{
"cmd": ["tsc", "$file"],
"selector" : "source.ts",
"path": "/usr/local/bin:$PATH"
}

然后,现在,您可以使用 ctrl+B 或 cmd+B 转译您的代码

于 2012-10-02T06:46:33.250 回答
1

这对我有用:

首先,安装typescript 节点模块>> npm install -g typescript。这提供了一个命令行实用程序tsc

下一个,tsc gulpfile.ts gulp-config.ts typings/tsd.d.ts

  • transpile这会将gulpfile.tsandgulp-config.ts文件保存到gulpfile.jsand gulp-config.js。我们提供该typings/tsd.d.ts文件作为正确转译的参考。
  • typescript 节点模块涵盖了许多选项>>来tsc -h指定输出目录或文件等

希望这可以帮助。

于 2016-05-23T04:47:42.457 回答
1

您可能不想使用ts-node,因为它很慢,而是按照以下步骤进行快速.ts文件编译(确保已安装节点):

  1. npm i -D @types/node typescript nodemon

  2. npx tsconfig.jsonnode从列表中选择。您可以根据需要自由修改它。

  3. 在项目根目录中创建文件名src/index.ts

  4. 然后在您的 中package.json,添加以下 2 个脚本:

    "scripts": { "watch": "tsc -w", "dev": "nodemon dist/index.js" },

  5. 然后使用:

    npm run watch

    npm run dev

而且,它会自动查找.ts文件的变化,你可以在终端中看到编译后的文件输出!

于 2020-09-21T07:07:35.563 回答
0

如果您使用的是“firebase -tool”,您可以使用

npm run build

在您的函数目录中。

于 2021-05-12T03:26:42.967 回答