我想知道如何以跨平台的方式将TypeScript转换为 JavaScript。我知道typescript 的节点包管理器的可用性,但是还有其他可以在服务器端使用的替代方案吗?
12 回答
简短版本:如果可以,请使用 Node。这在当今变得不可避免。
也许这不是你想要的答案,但正如大家所说,编译器是一个 JS 文件,所以,你的选项是执行一个 JS 文件的选项。
在 Windows 中,有两个明显的,Node 和 Windows Script Host。
您已经了解节点,另一个选项是所有版本的 Windows 附带的组件(我认为),您可以这样做:
cscript path/to/tsc.js source-file.ts
您可以通过以下方式查看所有编译器选项:
cscript path/to/tsc.js
在 Linux 上,我假设您应该能够使用(除了节点):
- V8 独立外壳,替换
node
或cscript
使用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。
更新:这里的另一个答案证实了关于兼容性的相同。
具体来说,在服务器上(假设您的服务器有可用的 Node.js),您只需运行:
node path/to/tsc.js yourFile1.ts yourFile2.ts [etc]
您可以在不输入任何文件名的情况下运行该命令以查看 tsc.js 的命令行帮助。
从命令行你可以使用 ts-node:
npm install ts-node
然后像这样调用命令:
tsc file.ts --outFile file.js
我有一个将 Typescript 编译为 Java 中的 Javascript 的项目:
https://github.com/martypitt/typescript4j
正如在其他答案中所讨论的,这使用了 Rhino,因此不依赖于npm
or 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 资源的即时编译
如果您需要以 Java 为目标,那么您可以在构建过程中使用 Rhino 引擎运行 tsc.js。
编译 ts -> js:node 可用于所有常见平台,所以我不明白为什么在你已经有了 tsc.js 的情况下还想要一个 tsc.java。安装节点没什么大不了的。事实上,它比 Java 更容易。
获得 proj.js 文件后,您可以将其复制到您希望使用的任何部署平台。
在我看来,JavaScript——或者更准确地说是 ECMAScript 是 Java 的替代品。所以我很高兴我不必为使用该工具而争论 JVM 等。但是,如果您更喜欢 Java,那么为什么还要为 JS 烦恼呢?
我一直在玩这个,并且可以使用以下代码用 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 调用中出现堆栈溢出。
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 转译您的代码
这对我有用:
首先,安装typescript
节点模块>> npm install -g typescript
。这提供了一个命令行实用程序tsc
。
下一个,tsc gulpfile.ts gulp-config.ts typings/tsd.d.ts
transpile
这会将gulpfile.ts
andgulp-config.ts
文件保存到gulpfile.js
andgulp-config.js
。我们提供该typings/tsd.d.ts
文件作为正确转译的参考。typescript
节点模块涵盖了许多选项>>来tsc -h
指定输出目录或文件等。
希望这可以帮助。
您可能不想使用ts-node
,因为它很慢,而是按照以下步骤进行快速.ts
文件编译(确保已安装节点):
npm i -D @types/node typescript nodemon
npx tsconfig.json
并node
从列表中选择。您可以根据需要自由修改它。在项目根目录中创建文件名
src/index.ts
。然后在您的 中
package.json
,添加以下 2 个脚本:"scripts": { "watch": "tsc -w", "dev": "nodemon dist/index.js" },
然后使用:
npm run watch
npm run dev
而且,它会自动查找.ts
文件的变化,你可以在终端中看到编译后的文件输出!
如果您使用的是“firebase -tool”,您可以使用
npm run build
在您的函数目录中。