我怎样才能从.NET编译CoffeeScript?
我想编写一个HttpHandler,它可以即时编译CoffeeScript代码并发送生成的JavaScript代码。 我已经尝试MS [JScript] [1]和IronJS没有成功。 我不想使用[Rhino] [2],因为Java依赖会使分发太困难。
CoffeeScript如何从.NET编译?
CoffeeScript中,DOTNET
用于编译CoffeeScript的命令行工具。 包含一个文件系统监视器,当它们改变时自动重新编译CoffeeScripts。 大致相当于linux / mac的coffee-script节点包。
CoffeeSharp
包括一个类似于CoffeeScript-dotnet的命令行工具,以及一个http处理程序,当从asp.net网站请求时编译CoffeeScripts。
SassAndCoffeeScript
用于Asp.net mvc的库,可根据请求编译sass和coffeescript文件。 还支持缩小和组合。
手动编译IronJS
IronJS是一个.NET JavaScript解释器,可以成功加载CoffeeScript编译器并编译CoffeeScript。
手动编译Node.js
获取节点二进制文件并将bin目录添加到path中。 编写一个node.js脚本来加载CoffeeScript编译器和你的CoffeeScript文件并保存编译后的javascript 。
CoffeeScript现在完全支持Chirpy: http ://chirpy.codeplex.com/
你特别说你想编写一个运行时编译器,所以这可能不是你正在寻找的东西,但如果要点有一个方法来生成JavaScript的结果, Mindscape Web Workbench是有趣的。 它是Visual Studio.NET 2010的免费扩展,可在扩展pipe理器中使用。 它提供了Intellisense,语法高亮,并在编写时编译为JS。 我刚刚开始使用它,但看起来很有希望。 Scott Hanselman 在这里谈论它。 它也支持LESS和Sass。
我已经设法从.NET使用IKVM,jcoffeescript和Rhino编译CoffeeScript。 这很简单,除了没有参数的JCoffeeScriptCompiler构造函数重载不起作用。 它运行一个java.util.Collections.EMPTY_LIST作为参数。
这是我做到的:
- 下载IKVM,jcoffeescript和Rhino。
- 对js.jar运行ikvmc,创buildjs.dll。
- 对jcoffeescript jar运行ikvmc。
- 在Visual Studio中添加对jcoffeescript dll的引用。 可能需要更多的参考,但是你会被警告。
- 在代码中运行新的org.jcoffeescript.JCoffeeScriptCompiler(java.util.Collections.EMPTY_LIST).compile()。
下一步将是创build一个构build任务和/或HTTP处理程序。
查看使用侏儒 JavaScript实现的新的coffeescript-dotnet项目。
由于CoffeeScript编译器现在可以在Internet Explorer上运行了,经过几次最近的调整之后,最好还是使用其他MS版本的JavaScript。 尝试从最新版本中包含extras/coffee-script.js
,并且您应该使用CoffeeScript.compile(code)
。
我尝试通过基于Windows的脚本宿主(或只是wscript)运行捆绑的extras/coffee-script.js
,并没有报告任何问题。 然后我添加了这一行:
WScript.Echo(CoffeeScript.compile('a: 1'));
在文件的末尾再次运行它通过wscript
它正确地打印生成的JavaScript。
你使用COM对象吗? 你能分享一些负责初始化MScript对象引用的代码吗?
Visual Studio 2010中的CoffeeScript
这是Chirpy的叉(chirpy是一个工具,用于混搭,缩小和validationjavascript,样式表和无点文件)
“好的,我想我的工作主要是基于其他人的工作,请查看: http : //chirpy.codeplex.com/SourceControl/network/Forks/Domenic/CoffeeScriptFixes ”
我没有一个直接的答案,(我希望你find一个答案),但也许看看下面看看如何做。
- Jint – .NET的JavaScript解释器
- 使用IKVM编译Rhino将摆脱Java运行时需求。
- jcoffeescript 。 我没有看过jcoffeescript,但我认为这取决于JRuby和Rhino。 你也可以使用IKVM.NET 。
IronJS现在支持CoffeeScript,并且通常比其他.NET JS引擎更快:
我有一篇关于将两者连接在一起的博客文章:
http://otac0n.com/blog/2011/06/29/CoffeeDemo-A-Simple-Demo-Of-IronJS-Using-CoffeeScript.aspx
我的主编是VS 2010,我喜欢WorkBench扩展。 这是很好的它自动编译为js每次你保存在你的.coffee文件,也介绍你到我读过的SASS,但从来没有得到解决。
他们提供了一个付费版本,以自动缩小/ js和css文件,因为your.coffee和.scss是你的源文件。
我鼓励所有的VS用户继续前进,特别是如果你运行VS 2010安装。
唯一的敲门声,有人请纠正我或启发我,是用.coffee语法它没有突出显示的方式说HTML,JS,C#代码是。 这可能是因为我使用http://studiostyl.es/的颜色scheme和logginghttp://studiostyl.es/schemes/coffee-只是分享名称咖啡没有特别的语法高亮支持咖啡脚本,我是意识到。; 但没有理由不开始使用工作台插件今天!
好的工作台网站声称:语法突出显示,也许这是我select的studiostyle.es。
我知道这是旧的,但我来到这里回答了一个非常类似的问题:如何使用Visual Studio 2012 Express来编译我的CoffeeScript? 请注意,免费的Express版本不允许任何扩展,所以我不能继续使用Mindscape Workbench扩展,这已经很好地服务了我一段时间。
事实certificate,这很容易。 只需使用NuGet安装侏罗纪咖啡包,然后离开。
在mindscape工作台上使用这个软件包的一个好处是,你可以直接从HTML中的脚本标签引用你的咖啡。 它缩小和caching编译的JS,所以你只有在所请求的咖啡文件已经改变时才能工作。
<head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script src="home.coffee"></script> </head>
mindscape工作台允许您将不同的coffescript文件捆绑在一起,这对于模块化咖啡脚本非常方便。 您也可以通过使用#= require
语句来包含其他咖啡模块文件来使用侏罗纪咖啡,例如:
#= require Classes\GridWrapper.coffee class UsersGrid constructor:-> @grid = new GridWrapper()
我认为在咖啡文件中使用#= require
staement实际上比mindscape工作台方法更清晰和更清晰,这种方式隐藏了所有这些在他们的界面后面,所以你很容易忘记你有什么依赖。
注意有一个潜在的问题。 Nuget安装程序将在您的web.config中放入一个httphandler条目,这可能与IIS Express集成托pipepipe道模式不兼容。
您可能因此看到以下错误:
已检测到ASP.NET设置不适用于集成pipe理pipe道模式。
要解决这个问题,只需删除下面的处理程序。
<system.web> //other stuff <httpHandlers> <add type="JurassicCoffee.Web.JurassicCoffeeHttpHandler,JurassicCoffee" validate="false" path="*.coffee" verb="*" /> </httpHandlers> </system.web>
你可以简单地写一个C#的端口。 我已经将Jison移植到C#(这是使CoffeeScript运行的基础项目)。 我认为它可能有点不同,但两个Jisonparsing器的工作原理是一样的。
我还没有把它要求回到Jison的主要架构,但会很快做到。
而不是脱壳到CScript,你可以掏出Node.js( 这里是自包含的Windows二进制文件 )
我已经尝试将未经修改的extras / coffee-script.js
文件编译为jsc
,用于.NET的JScript.NET编译器,并且出现了很多错误。 以下是值得注意的一些:
- 'require'是一个新的保留字,不应该被用作标识符
- '确保'是一个新的保留字,不应该被用作标识符
- “全局对象”types的对象没有这样的成员
其他错误是由上述错误造成的。
你也许还想看看jurassic-coffee,它也是一个在侏罗系运行原始编译器的咖啡脚本编译器。
它具有链接样式“#= require file.coffee”或“#= require file.js”,可用于在编译之前保持.coffee文件模块化和组合,以及embedded.js文件。
它带有一个HttpHandler文件监视器,用于.js和.coffee文件,它们跟踪哪些.coffee文件需要重新编译,并通过编译后的* .js文件。
侏儒咖啡也可以作为一个Nuget包
我做了一个使用Windows Script Host的HttpHandler: https : //github.com/duncansmart/LessCoffee ,效果很好(它也编译* .less文件)。
它在NuGet上: http : //nuget.org/List/Packages/LessCoffee
它基于这个简单的包装: https : //github.com/duncansmart/coffeescript-windows
我写了一个使用v8的inteructive shell。
https://github.com/mattn/coffee-script-v8
这工作作为单个可执行文件。 (不要使用外部文件)不能使用require()。 但足够学习咖啡的脚本。