如何从.NET编译CoffeeScript?

时间:2010-05-21 03:30:37

标签: javascript .net coffeescript

我想编写一个HttpHandler,它可以即时编译CoffeeScript代码并发送生成的JavaScript代码。我尝试过MS [JScript] [1]和IronJS但没有成功。我不想使用[Rhino] [2],因为Java依赖会使分发太难。

如何从.NET编译CoffeeScript?

18 个答案:

答案 0 :(得分:36)

CoffeeScript-dotnet

用于编译CoffeeScript的命令行工具。包括一个文件系统观察程序,可在更改时自动重新编译CoffeeScripts。大致相当于linux / mac的coffee-script节点包。

CoffeeSharp

包含一个类似于CoffeeScript-dotnet的命令行工具,以及一个在asp.net站点请求时编译CoffeeScripts的http处理程序。

SassAndCoffeeScript

Asp.net mvc库,可根据要求编译sass和coffeescript文件。还支持缩小和组合。

Manually Compile With IronJS

IronJS是一个.NET javascript解释器,可以成功加载CoffeeScript编译器并编译CoffeeScript。

使用Node.js手动编译

获取node binaries并将bin目录添加到路径中。写一个node.js script to load the CoffeeScript compiler and your CoffeeScript files and save the compiled javascript

答案 1 :(得分:32)

Chirpy现在完全支持CoffeeScript: http://chirpy.codeplex.com/

答案 2 :(得分:8)

你明确表示你想要编写一个运行时编译器,所以这可能不是你想要的,但如果要点是要有一种生成javascript结果的方法,Mindscape Web Workbench是有趣。它是Visual Studio.NET 2010的免费扩展,可在Extension Manager中使用。它提供了Intellisense,语法高亮,并在编写时编译JS。我刚刚开始使用它,但看起来很有希望。斯科特汉塞尔曼谈到它here。它还支持LESS和Sass。

答案 3 :(得分:4)

我已经设法使用IKVM,jcoffeescript和Rhino从.NET编译CoffeeScript。它很简单,只是没有参数的JCoffeeScriptCompiler构造函数重载不起作用。它以java.util.Collections.EMPTY_LIST作为参数运行正常。

我就这样做了:

  1. 下载IKVM,jcoffeescript和Rhino。
  2. 针对js.jar运行ikvmc,创建js.dll。
  3. 针对jcoffeescript jar运行ikvmc。
  4. 在Visual Studio中添加对jcoffeescript dll的引用。可能需要更多参考资料,但您会收到警告。
  5. 在您的代码中运行新的org.jcoffeescript.JCoffeeScriptCompiler(java.util.Collections.EMPTY_LIST).compile()。
  6. 下一步是创建构建任务和/或HTTP处理程序。

答案 4 :(得分:4)

查看新的coffeescript-dotnet项目,该项目使用Jurassic JavaScript实施。

答案 5 :(得分:3)

由于CoffeeScript编译器现在可以在Internet Explorer上运行,经过几次最近的调整后,最好也可以使用其他MS口味的JavaScript。尝试从最新版本中加入extras/coffee-script.js,您应该选择CoffeeScript.compile(code)

答案 6 :(得分:1)

Visual Studio 2010中的CoffeeScript

这是Chirpy的分叉(chirpy是一种用于混搭,修剪和验证javascript,样式表和无点文件的工具)

“好吧,我认为我的工作主要依赖于其他人的工作。检查出来: http://chirpy.codeplex.com/SourceControl/network/Forks/Domenic/CoffeeScriptFixes

来自http://chirpy.codeplex.com/workitem/48

答案 7 :(得分:1)

我尝试通过基于Windows的脚本主机(或仅仅是wscript)运行捆绑的extras/coffee-script.js,但它没有报告任何问题。然后我添加了这一行:

WScript.Echo(CoffeeScript.compile('a: 1'));

在文件的末尾,再次通过wscript运行,并正确打印生成的JavaScript。

您使用的是COM对象吗?你能分享一些负责初始化MScript对象引用的代码吗?

答案 8 :(得分:1)

IronJS现在支持CoffeeScript,并且通常比其他.NET JS引擎更快:

我有一篇关于将两者连接在一起的博客文章:
http://otac0n.com/blog/2011/06/29/CoffeeDemo-A-Simple-Demo-Of-IronJS-Using-CoffeeScript.aspx

答案 9 :(得分:1)

我没有直接答案,(我希望你找到一个答案),但也许可以看看以下内容,看看它是如何完成的。

答案 10 :(得分:1)

我的主编是VS 2010,我喜欢WorkBench扩展。它很好,每当你点击你的.coffee文件时自动编译为js,还会向你介绍我读过但从未到过的SASS。

他们提供的付费版本也会自动缩小/缩小你的js和css文件,因为你的.coffee和.scss无论如何都是你的源文件。

我鼓励所有VS用户继续安装,尤其是在运行VS 2010时。

唯一的敲门声,有人请你纠正我或赐教,是用.coffee语法,它没有突出显示方式说html,js,c#代码是。这可能是因为我使用了来自http://studiostyl.es/的配色方案,并且对于记录http://studiostyl.es/schemes/coffee-只是分享名称coffee没有特别的语法高亮支持我知道的coffeescript。但没有理由不立即开始使用工作台插件!

好的工作台网站声称:语法高亮,所以也许是我选择的studiostyle.es。

答案 11 :(得分:1)

我知道这已经过时了,但我来这里是为了回答一个非常类似的问题:如何使用Visual Studio 2012 Express编译我的CoffeeScript?请注意,免费的Express版本不允许任何扩展程序,因此我无法继续使用已经很好用了很长时间的Mindscape Workbench扩展程序。

事实证明这很容易。只需使用NuGet安装Jurassic-Coffee软件包即可。

在mindscape工作台上使用此软件包的一个优点是,您可以直接从html中的脚本标签引用您的咖啡。它缩小并缓存已编译的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文件捆绑在一起,这对于模块化您的coffeescript非常方便。您也可以使用侏罗纪咖啡,使用#= require语句包含其他咖啡模块文件,例如:

#= require Classes\GridWrapper.coffee
class UsersGrid
  constructor:->
     @grid = new GridWrapper()

我认为在咖啡文件中使用#= require标签实际上比mindscape工作台方法更清晰,更清晰,这种方法隐藏了所有这些,因此您很容易忘记自己的依赖关系。

注意 有一个潜在的问题。 Nuget安装程序会在您的web.config中输入一个httphandler条目,该条目可能与IIS Express集成的托管管道模式不兼容。

您可能会看到以下错误:

  

检测到的ASP.NET设置不适用于Integrated   管理流水线模式。

要解决此问题,只需删除下面显示的处理程序。

<system.web>
  //other stuff

  <httpHandlers>
    <add type="JurassicCoffee.Web.JurassicCoffeeHttpHandler,JurassicCoffee" validate="false" path="*.coffee" verb="*" />
  </httpHandlers>

</system.web>

答案 12 :(得分:1)

你可以简单地将它的一个端口写入C#。我已将Jison移植到C#(这是使CoffeeScript运行的底层项目)。我认为它可能有点不同,但两个Jison解析器都是一样的。

我还没有请求它回到Jison的主要架构,但很快就会这样做。

https://github.com/robertleeplummerjr

答案 13 :(得分:0)

我尝试将未修改的extras / coffee-script.js文件编译为jsc,.NET的JScript.NET编译器,我收到了很多错误。以下是值得注意的:

  • 'require'是一个新的保留字,不应用作标识符
  • 'ensure'是一个新的保留字,不应用作标识符
  • “全局对象”类型的对象没有这样的成员

其他错误是由上述错误引起的。

答案 14 :(得分:0)

你可以向Node.js(here are self-contained Windows binaries发送)

,而不是炮轰出CScript。

答案 15 :(得分:0)

您可能还想查看jurassic-coffee,它也是一个运行jurassic中原始编译器的咖啡脚本编译器。

它具有链轮样式“#= require file.coffee”或“#= require file.js”,可用于在编译之前保持.coffee文件模块化和组合以及嵌入.js文件。< / p>

它带有一个带有.js和.coffee文件的文件监视器的HttpHandler,可以跟踪需要重新编译的.coffee文件,然后传递给已编译的* .js文件。

jurassic-coffee也可作为Nuget套餐

https://github.com/creamdog/JurassicCoffee

答案 16 :(得分:0)

我已经完成了一个在幕后使用Windows Script Host的HttpHandler:https://github.com/duncansmart/LessCoffee并且运行良好(它还可以编译*.less个文件)。

它在NuGet上:http://nuget.org/List/Packages/LessCoffee

它基于这个简单的包装器:https://github.com/duncansmart/coffeescript-windows

答案 17 :(得分:0)

我使用v8编写了一个交互式shell。

https://github.com/mattn/coffee-script-v8

这项工作是单个可执行文件。 (不要使用外部文件) 它不能使用require()。但足以学习coffeescript。