我想编写一个 HttpHandler 即时编译 CoffeeScript 代码并发送生成的 JavaScript 代码。我尝试过 MS [JScript][1] 和 IronJS,但没有成功。我不想使用 [Rhino][2],因为 Java 依赖项会使其难以分发。
如何从 .NET 编译 CoffeeScript?
我想编写一个 HttpHandler 即时编译 CoffeeScript 代码并发送生成的 JavaScript 代码。我尝试过 MS [JScript][1] 和 IronJS,但没有成功。我不想使用 [Rhino][2],因为 Java 依赖项会使其难以分发。
如何从 .NET 编译 CoffeeScript?
用于编译 CoffeeScript 的命令行工具。包括一个文件系统观察器,用于在 CoffeeScripts 更改时自动重新编译它们。大致相当于linux/mac的coffee-script节点包。
包括一个类似于 CoffeeScript-dotnet 的命令行工具以及一个 http 处理程序,当从 asp.net 站点请求时编译 CoffeeScripts。
用于根据请求编译 sass 和 coffeescript 文件的 Asp.net mvc 库。还支持缩小和组合。
IronJS 是一个 .NET javascript 解释器,可以成功加载 CoffeeScript 编译器并编译 CoffeeScript。
使用 Node.js 手动编译
获取节点二进制文件并将 bin 目录添加到您的路径。编写一个node.js 脚本来加载 CoffeeScript 编译器和您的 CoffeeScript 文件并保存已编译的 javascript。
现在,Chirpy 完全支持 CoffeeScript:http: //chirpy.codeplex.com/
你特别说你想写一个运行时编译器,所以这可能不是你想要的,但如果主要是有一种方法来生成 javascript 结果,Mindscape Web Workbench很有趣。它是 Visual Studio.NET 2010 的免费扩展,可在扩展管理器中使用。它提供 Intellisense、语法突出显示并在您编写时编译为 JS。我刚刚开始使用它,但看起来很有希望。Scott Hanselman在这里谈到它。它还支持 LESS 和 Sass。
查看新的coffeescript-dotnet项目,它使用Jurassic JavaScript 实现。
我已经设法使用 IKVM、jcoffeescript 和 Rhino 从 .NET 编译 CoffeeScript。这很简单,只是没有参数的 JCoffeeScriptCompiler 构造函数重载不起作用。它以 java.util.Collections.EMPTY_LIST 作为参数运行良好。
我是这样做的:
下一步是创建构建任务和/或 HTTP 处理程序。
由于 CoffeeScript 编译器现在可以在 Internet Explorer 上运行,经过最近的几次调整,它应该也适用于其他 MS 风格的 JavaScript。尝试extras/coffee-script.js
从最新版本中包含,您应该很适合使用CoffeeScript.compile(code)
.
我知道这是旧的,但我来这里是为了回答一个非常相似的问题:如何让我的 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>
我尝试extras/coffee-script.js
通过基于 Windows 的脚本主机(或只是 wscript)运行捆绑包,但没有报告任何问题。然后我添加了这一行:
WScript.Echo(CoffeeScript.compile('a: 1'));
在文件末尾并wscript
再次运行它,它会正确打印生成的 JavaScript。
你在使用 COM 对象吗?你能分享更多负责初始化 MScript 对象引用的代码吗?
我的主编辑器是 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。
Visual Studio 2010 中的 CoffeeScript
它是 Chirpy 的分支(chirpy 是一种用于混搭、缩小和验证 javascript、样式表和无点文件的工具)
“好的,我想我已经在我的 fork 上工作了,主要是基于其他人的工作。检查一下: http ://chirpy.codeplex.com/SourceControl/network/Forks/Domenic/CoffeeScriptFixes ”
我没有直接的答案,(我希望你能找到一个),但也许看看下面的内容,看看它是如何完成的。
您可以简单地将它的一个端口写入 C#。我已将 Jison 移植到 C#(这是使 CoffeeScript 运行的基础项目)。我认为这可能有点不同,但两个 Jison 解析器的工作方式相同。
我还没有将请求拉回 Jison 的主要架构,但很快就会这样做。
IronJS 现在支持 CoffeeScript 并且通常比其他 .NET JS 引擎更快:
我在这里有一篇关于将两者连接在一起的博客文章:http:
//otac0n.com/blog/2011/06/29/CoffeeDemo-A-Simple-Demo-Of-IronJS-Using-CoffeeScript.aspx
您可能还想查看侏罗纪咖啡,它也是一个咖啡脚本编译器,在侏罗纪运行原始编译器。
它具有链轮样式“#= require file.coffee”或“#= require file.js
”,可用于在编译之前保持 .coffee 文件模块化和组合以及嵌入 .js 文件。
它运行一个带有 .js 和 .coffee 文件的文件监视程序的 HttpHandler,跟踪哪些 .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 编写了一个交互式 shell。
https://github.com/mattn/coffee-script-v8
这作为单个可执行文件工作。(不要使用外部文件)它不能使用require()。但足以学习coffeescript。
您可以使用 Node.js(这里是自包含的 Windows 二进制文件),而不是使用 CScript
我尝试将coffee-script.js
未修改的 extras/ 文件编译为 .NETjsc
的JScript.NET编译器,但我遇到了很多错误。以下是值得注意的:
其他错误是由上述错误引起的。