49

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

如何从 .NET 编译 CoffeeScript?

4

18 回答 18

36

CoffeeScript-dotnet

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

CoffeeSharp

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

SassAndCoffeeScript

用于根据请求编译 sass 和 coffeescript 文件的 Asp.net mvc 库。还支持缩小和组合。

使用 IronJS 手动编译

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

使用 Node.js 手动编译

获取节点二进制文件并将 bin 目录添加到您的路径。编写一个node.js 脚本来加载 CoffeeScript 编译器和您的 CoffeeScript 文件并保存已编译的 javascript

于 2010-06-14T10:40:44.767 回答
32

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

于 2011-03-03T02:59:39.977 回答
8

你特别说你想写一个运行时编译器,所以这可能不是你想要的,但如果主要是有一种方法来生成 javascript 结果,Mindscape Web Workbench很有趣。它是 Visual Studio.NET 2010 的免费扩展,可在扩展管理器中使用。它提供 Intellisense、语法突出显示并在您编写时编译为 JS。我刚刚开始使用它,但看起来很有希望。Scott Hanselman在这里谈到它。它还支持 LESS 和 Sass。

于 2011-09-05T15:26:17.117 回答
4

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

于 2011-02-03T23:54:14.777 回答
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. 在您的代码中运行 new org.jcoffeescript.JCoffeeScriptCompiler(java.util.Collections.EMPTY_LIST).compile()。

下一步是创建构建任务和/或 HTTP 处理程序。

于 2010-10-04T15:38:05.477 回答
3

由于 CoffeeScript 编译器现在可以在 Internet Explorer 上运行,经过最近的几次调整,它应该也适用于其他 MS 风格的 JavaScript。尝试extras/coffee-script.js从最新版本中包含,您应该很适合使用CoffeeScript.compile(code).

于 2010-06-02T02:29:05.730 回答
1

我知道这是旧的,但我来这里是为了回答一个非常相似的问题:如何让我的 CoffeeScript 使用 Visual Studio 2012 Express 进行编译?请注意,免费的 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 工作台允许您将不同的咖啡脚本文件捆绑在一起,这对于模块化咖啡脚本非常方便。您也可以使用 Jurassic Coffee 执行此操作,方法是利用该#= require语句包含其他咖啡模块文件,例如:

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

我认为#= require在咖啡文件中包含声明实际上比 Mindscape 工作台方法更干净、更清晰,这种方法将所有这些隐藏在他们的界面后面,所以你很容易忘记你有什么依赖关系。

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

因此,您可能会看到以下错误:

已检测到不适用于集成托管管道模式的 ASP.NET 设置。

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

<system.web>
  //other stuff

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

</system.web>
于 2013-04-04T10:00:59.737 回答
1

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

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

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

你在使用 COM 对象吗?你能分享更多负责初始化 MScript 对象引用的代码吗?

于 2010-06-13T14:30:08.180 回答
1

我的主编辑器是 VS 2010,我喜欢 WorkBench 扩展。很高兴每次您在 .coffee 文件上点击保存时它会自动编译为 js,还向您介绍了我读过但从未了解过的 SASS。

他们提供了一个付费版本,它将自动缩小/缩小您的 js 和 css 文件,因为无论如何 your.coffee 和 .scss 都是您的源文件。

我鼓励所有 VS 用户继续安装它,特别是如果您运行 VS 2010。

唯一的敲门声,有人请纠正我或启发我,是使用 .coffee 语法它没有像 html、js、c# 代码那样突出显示。可能是因为我使用了来自http://studiostyl.es/的配色方案,并且记录在案http://studiostyl.es/schemes/coffee -只是共享名称咖啡,我没有对咖啡脚本的特殊语法高亮支持意识到。但是今天没有理由不开始使用工作台插件!

好的工作台网站声称:再次突出显示语法,也许是我选择的 studiostyle.es。

于 2012-03-02T20:55:16.130 回答
1

Visual Studio 2010 中的 CoffeeScript

它是 Chirpy 的分支(chirpy 是一种用于混搭、缩小和验证 javascript、样式表和无点文件的工具)

“好的,我想我已经在我的 fork 上工作了,主要是基于其他人的工作。检查一下: http ://chirpy.codeplex.com/SourceControl/network/Forks/Domenic/CoffeeScriptFixes ”

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

于 2011-02-25T19:06:21.667 回答
1

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

于 2010-06-01T07:33:13.583 回答
1

您可以简单地将它的一个端口写入 C#。我已将 Jison 移植到 C#(这是使 CoffeeScript 运行的基础项目)。我认为这可能有点不同,但两个 Jison 解析器的工作方式相同。

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

https://github.com/robertleeplummerjr

于 2013-07-21T00:14:22.847 回答
1

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

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

于 2011-07-04T07:11:14.043 回答
0

您可能还想查看侏罗纪咖啡,它也是一个咖啡脚本编译器,在侏罗纪运行原始编译器。

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

它运行一个带有 .js 和 .coffee 文件的文件监视程序的 HttpHandler,跟踪哪些 .coffee 文件需要重新编译,并传递给已编译的 *.js 文件以供其余文件使用。

侏罗纪咖啡也可以作为 Nuget 包提供

https://github.com/creamdog/JurassicCoffee

于 2011-07-08T13:59:36.773 回答
0

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

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

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

于 2011-11-08T23:19:27.873 回答
0

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

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

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

于 2011-11-11T07:08:50.330 回答
0

您可以使用 Node.js(这里是自包含的 Windows 二进制文件),而不是使用 CScript

于 2010-11-19T21:28:31.710 回答
0

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

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

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

于 2011-01-07T04:24:09.883 回答