2010-05-21 4 views
49

Я хочу написать HttpHandler, который компилирует код CoffeeScript «на лету» и отправляет полученный код JavaScript. Я пробовал MS [JScript] [1] и IronJS без успеха. Я не хочу использовать [Rhino] [2], потому что зависимость Java будет слишком сложной для распространения.Как скомпилировать CoffeeScript с .NET?

Как скомпилировать CoffeeScript из .NET?

+0

Это должно быть помечено '.net', как хорошо, вы не думаете? –

+0

есть. Спасибо. – liammclennan

ответ

36

CoffeeScript-dotnet

инструмент командной строки для компиляции CoffeeScript. Включает наблюдателя файловой системы для автоматической перекомпиляции CoffeeScripts, когда они меняются. Примерно эквивалентен пакету узла сценария для скрипта для linux/mac.

CoffeeSharp

Включает инструмент командной строки, похожий на CoffeeScript-DotNet, а также обработчик HTTP, который компилирует CoffeeScripts при запросе с сайта asp.net.

SassAndCoffeeScript

библиотека для ASP.NET MVC, что компилирует Сасс и CoffeeScript файлы по запросу. Также поддерживает минимизацию и комбинацию.

Manually Compile With IronJS

IronJS является .NET Javascript интерпретатор, который может успешно загрузить компилятор CoffeeScript и скомпилировать CoffeeScript.

вручную компилировать с Node.js

Получить node binaries и добавить каталог бен в путь. Напишите node.js script to load the CoffeeScript compiler and your CoffeeScript files and save the compiled javascript.

+0

Также не работает правильно. Этот фрагмент приводит к сбою. http://gist.github.com/566951 –

+1

+1 для CoffeeSharp. Он доступен через Nuget, но имейте в виду, что компилятор cmdline был написан в F #, поэтому, если вы используете CI, вам нужно будет развернуть основные файлы Fsharp на ваш CI-сервер или вручную создать версию, которая является автономной, и использовать это вместо этого. –

1

У меня нет прямого ответа (надеюсь, вы найдете его), но, возможно, взгляните на следующее, чтобы посмотреть, как это можно сделать.

  • Jint - JavaScript интерпретатор для .NET
  • Using IKVM to compile Rhino бы избавиться от требования времени выполнения Java.
  • jcoffeescript. Я не смотрел на jcoffeescript, но я думаю, что это зависит от JRuby и Rhino. Возможно, вы также можете указать IKVM.NET.
3

Поскольку компилятор CoffeeScript теперь работает в Internet Explorer, после нескольких недавних твиков, должно быть хорошо идти в рамках других MS-аксессуаров JavaScript. Попробуйте включить extras/coffee-script.js из последней версии, и вам должно быть хорошо с CoffeeScript.compile(code).

+0

Я пробовал это с версией, которая работает в IE, и она по-прежнему сбой JScript и IronJS. – liammclennan

+0

Аварии как? И не стесняйтесь появляться в #coffeescript на FreeNode, если вы хотите обсудить его или попросить о помощи. – jashkenas

+0

Я уточнил вопрос более подробно. JScript выдает ошибку, IronJS выдает этот процесс. Я не получил ответа от #coffeescript. – liammclennan

1

Я попытался запустить комплект extras/coffee-script.js через хост сценария на основе Windows (или просто wscript), и он не сообщал о каких-либо проблемах. Затем я добавил эту строку:

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

в конце файла и запустить его через wscript снова, и это правильно напечатано в результате JavaScript.

Вы используете COM-объекты? Можете ли вы поделиться еще одним кодом, ответственным за инициализацию ссылки на объект MScript?

+0

Я пробовал это, и он отлично работает с WScript, но тот же скрипт не будет работать с Microsoft.JScript.Vsa.VsaEngine.Поэтому проблема в том, что я не могу запустить ее из кода. – liammclennan

+0

Не был ли «Microsoft.JScript.Vsa' устарел? Что-нибудь полезное в 'System.CodeDom.Compiler'? – StanAngeloff

4

Мне удалось скомпилировать CoffeeScript с .NET с помощью IKVM, jcoffeescript и Rhino. Это было просто, за исключением того, что конструктор JCoffeeScriptCompiler с перегрузкой без параметров не работал. Он работал нормально с параметром java.util.Collections.EMPTY_LIST в качестве параметра.

Это, как я это сделал:

  1. Скачать IKVM, jcoffeescript и Rhino.
  2. Запустить ikvmc против js.jar, создав js.dll.
  3. Запустить ikvmc против jcoffeescript банку.
  4. Добавить ссылку на dll jcoffeescript в Visual Studio. Может потребоваться больше ссылок, но об этом вы будете предупреждены.
  5. Запустите новый код org.jcoffeescript.JCoffeeScriptCompiler (java.util.Collections.EMPTY_LIST) .compile() в вашем коде.

Следующим шагом было бы создать задачу сборки и/или обработчик HTTP.

0

Я попытался собрать статисты/coffee-script.js файл, неизмененной, в jsc, в JScript.NET компилятор для .NET, и У меня много ошибок. Вот примечательные из них:

  • «требуют» новое зарезервированное слово и не должны использоваться в качестве идентификатора
  • «обеспечить» новое зарезервированное слово и не должны использоваться в качестве идентификатора
  • Объекты типа «Глобальный объект» не имеют такого члена

Другие ошибки были вызваны вышеупомянутыми ошибками.

+0

Вы скомпилировали wit '/ fast-', чтобы отключить все расширения JScript? –

+0

@ Sean McMillan Когда я выполнил 'jsc/fast-coffee-script.js' в'/extras', у меня появилось слишком много предупреждений и был создан файл exe. Я не уверен, что он был сгенерирован успешно. Во всяком случае, я добавлю код для обработки ввода в консоль и посмотрю, смогу ли я это сделать прилично. Спасибо за совет. – OnesimusUnbound

1

CoffeeScript в Visual Studio 2010

Это вилка Chirpy (в чирикать является инструментом для затирания, minifing и проверки JavaScript, таблиц стилей, и Dotless файлов)

«Хорошо, я думаю, что я получил это работает на . моя вилка, основанная главным образом на работе других народов Проверьте это: http://chirpy.codeplex.com/SourceControl/network/Forks/Domenic/CoffeeScriptFixes "

из http://chirpy.codeplex.com/workitem/48

32

CoffeeScript теперь полностью поддерживается Chirpy: http://chirpy.codeplex.com/

+0

Ты мой герой! –

+0

Обратите внимание, что подсветки синтаксиса пока нет. –

0

Вы также можете проверить юрский кофе, это также компилятор кофе-скрипт работает оригинальный компилятор в юрском.

В нем есть стиль звездочки «# = require file.coffee» или «# = require file.js», который может использоваться для хранения файлов. Coffee модульных и комбинированных непосредственно перед компиляцией, а также для встраивания файлов .js.

Это спортивный HttpHandler с файловыми наблюдателями для файлов .js и. Coffee, которые отслеживают, какие файлы. Coffee необходимо перекомпилировать и передать в скомпилированные * .js файлы для остальных.

юрского-кофе также доступен в виде пакета NuGet

https://github.com/creamdog/JurassicCoffee

8

Вы специально сказали, что вы хотели, чтобы написать компилятор времени исполнения, так что это может быть не совсем то, что вы ищете, но если Главное - иметь способ генерации результата javascript, интересен Mindscape Web Workbench. Это бесплатное расширение для Visual Studio.NET 2010 и доступно в диспетчере расширений. Это дает Intellisense, подсветку синтаксиса и компиляцию JS при написании. Я только начинаю использовать его, но выглядит многообещающим. Об этом говорит Scott Hanselman here. Он также поддерживает LESS и Sass.

0

Я написал inteructive оболочку, используя v8.

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

Эта работа, как один исполняемый файл. (Не использовать внешние файлы) Нельзя использовать require(). Но достаточно, чтобы узнать coffeescript.

1

Мой главный редактор - VS 2010, и мне нравится расширение WorkBench. приятно, что он автоматически компилируется в js каждый раз, когда вы нажимаете save на вашем файле. coffee, также вводит вас в SASS, о котором я читал, но так и не получил.

Они предлагают платную версию, которая будет автоматически сжиматься/уменьшать ваши файлы js и css, так как ваши файлы и .scss - ваши исходные файлы.

Я призываю всех пользователей VS, чтобы идти вперед и установить это, особенно если вы запустите VS 2010.

только постучать, и кто-то пожалуйста, поправьте меня, или просветить меня, что с .coffee синтаксиса это не подсвечиваются способ сказать html, js, C# code is. это может быть потому, что я использую цветовую схему от http://studiostyl.es/, а для записи http://studiostyl.es/schemes/coffee- просто разделяет имя кофе без специальной поддержки подсветки синтаксиса для coffeescript, о котором я знаю. но нет оснований не начинать использование рабочего места addin сегодня!

Хорошо, что сайт веб-сайта на рабочем столе: подсветка синтаксиса, так что, возможно, это студия. Я выбрал.

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 верстак позволяет объединять вместе различные coffescript файлов, что очень удобно для модуляризировать ваш CoffeeScript. Вы также можете сделать это с помощью юрского кофе используя #= require заявление для включения других модулей кофе файлов, например:

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

Я думаю, имея #= require staement в файле кофе на самом деле чище и яснее, чем верстак подход MINDSCAPE , который скрывает все это за их интерфейсом, поэтому вы легко забудете, какие у вас есть зависимости.

Примечание Существует один потенциальный вопрос. Установщик Nuget добавит запись httphandler в ваш web.config, который может быть несовместим с интегрированным режимом управляемого конвейера IIS Express.

Вы можете поэтому увидеть следующее сообщение об ошибке:

An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.

Чтобы исправить это просто удалить обработчик, показанный ниже.

<system.web> 
    //other stuff 

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

</system.web> 
1

Вы можете просто написать порт его на C#. Я портировал Jison на C# (который является базовым проектом, который запускает CoffeeScript). Я бы подумал, что это может быть немного иначе, но оба парсера Jison работают одинаково.

Я не тянул назад его обратно в главную архитектуру Джисона, но скоро это сделает.

https://github.com/robertleeplummerjr