我想知道如何以跨平台的方式将TypeScript转换为JavaScript。我知道node package manager for typescript的可用性,但是还有其他可以在服务器端使用的替代方案吗?
答案 0 :(得分:31)
TypeScript编译器是用TypeScript构建的,因此可以作为JS文件(tsc.js
)使用,可以使用任何ES3兼容的VM或JS实现来运行。
也就是说,编译器的当前文件I / O基础结构仅支持Node和Windows Scripting Host文件API。如果您想建议支持其他环境,请随时通过GitHub site(以前为CodePlex)
与团队联系答案 1 :(得分:17)
简短版本:如果可以,请使用Node。现在它变得不可避免了。
也许这不是你想要的答案,但正如大家所提到的,编译器是一个JS文件,因此,你的选项是执行JS文件的选项。
在Windows中,有两个明显的节点,即Node和Windows Script Host。
您已了解节点,另一个选项是所有Windows版本附带的组件(我认为),您可以这样做:
cscript path/to/tsc.js source-file.ts
您可以通过以下方式查看所有编译器选项:
cscript path/to/tsc.js
在Linux上我假设您应该能够使用(除了节点):
node
或cscript
替换为v8-shell
更新:另一个答案表明编译器API只与节点和Windows脚本宿主(cscript工具)兼容,因此,如果正确,那么在Linux上你需要Node来编译TypeScript。 / p>
如果您正在寻找类似apt get tsc
(或Linux / Mac软件包管理器之类的东西)的东西,我认为没有。
我记得在某处读过I / O针对Node和Windows Script Host进行了优化,因此,如果您遇到选项问题,如果寻求平台独立性,您可能最终会使用Node。
更新:此处的另一个答案确认了相同的兼容性。
答案 2 :(得分:5)
具体来说,在服务器上(假设您的服务器有Node.js可用),您只需运行:
node path/to/tsc.js yourFile1.ts yourFile2.ts [etc]
您可以在没有任何输入文件名的情况下运行该命令,以查看tsc.js的命令行帮助。
答案 3 :(得分:4)
在命令行中,您可以使用ts-node:
npm install ts-node
然后像这样调用命令:
tsc file.ts --outFile file.js
答案 4 :(得分:3)
如果您需要定位Java,那么您可以在构建过程中使用Rhino引擎运行tsc.js。
答案 5 :(得分:3)
我有一个项目,它将Typescript编译成Java中的Javascript:
https://github.com/martypitt/typescript4j
正如其他答案中所讨论的,这会使用Rhino,因此不依赖于npm
或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'));
我在another project - 'Bakehouse'中使用它来在Spring环境中对打字稿资源进行即时编译
答案 6 :(得分:2)
编译ts - > js:node可用于所有常见平台,所以当你已经拥有tsc.js时,我无法理解为什么你想要一个tsc.java。安装节点没什么大不了的。实际上,它比Java更容易。
获得proj.js文件后,可以将其复制到您希望使用的部署平台。
从我的角度来看,JavaScript - 或者更准确地说ECMAScript是Java的替代品。所以我很高兴我不必与JVM等争论使用该工具。但如果您更喜欢Java,那为什么还要打扰JS?
答案 7 :(得分:1)
SublimeText2 Trick 您可以直接从SublimeText2(您需要节点)将短划线转换为javascript:
使用以下内容在Typescript.sublime-build
中创建/Sublime Text 2/Packages/User
文件:
{
"cmd": ["tsc", "$file"],
"selector" : "source.ts",
"path": "/usr/local/bin:$PATH"
}
然后,现在,您可以使用ctrl + B或cmd + B
来转换代码答案 8 :(得分: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调用时遇到堆栈溢出。
答案 9 :(得分:1)
这对我有用:
首先,安装了watermark.evented = false;
节点模块&gt;&gt; typescript
。这提供了命令行实用程序npm install -g typescript
。
接下来,tsc
tsc gulpfile.ts gulp-config.ts typings/tsd.d.ts
transpile
和gulpfile.ts
个文件gulp-config.ts
和gulpfile.js
gulp-config.js
。我们提供typings/tsd.d.ts
文件作为正确转换的参考。 typescript
节点模块涵盖了许多选项&gt;&gt; tsc -h
指定输出目录或文件等。希望这有帮助。
答案 10 :(得分:0)
您可能不想使用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
文件中查找更改,并且您可以在终端中随时查看编译后的文件输出!
答案 11 :(得分:0)
如果您使用的是“firebase -tool”,您可以使用
npm run build
在您的函数目录中。