2

Есть ли способ добавить шаги предварительной обработки кофейного компилятора модульным способом?Пользовательские шаги предварительной обработки для coffeescript?

Скажем, например, что я хотел, чтобы увеличить функциональность всех массивов и объектов подчеркиванием функций, что позволяет мне сделать что-то вроде testArray.first() и его компиляции в _.first(testArray)

Это то, что будет очень опасно делать в простом javascript, так как я должен был бы расширить Array.prototype и мог бы нарушить функциональность массива в других библиотеках. Похоже, было бы безопасно и весело делать с кофе-скриптом.

Было бы замечательно, если бы был способ сделать это таким образом, который является

  1. Modular - Я мог бы добавить несколько шагов предварительной обработки, вытягивать из различных проектов, которые делают программирование более легким и элегантным различные способы
  2. Интегрировано - я хочу иметь возможность что-то изменить в файлах конфигурации coffeescript, чтобы мне не пришлось использовать пользовательский двоичный файл и заменять команду в каждом отдельном инструменте разработки, который вызывает кофе-компилятор (для живая компиляция и т. д.).

Состоит ли это в coffeescript? Если нет, похоже, должно. Я расскажу об этом разработчикам, если никто не услышит об этом.

ответ

3

В CoffeeScript нет плагиновой системы. Нет простого выхода, если вы хотите настроить его. Вы можете разветвить Repo CoffeeScript и изменить компилятор в соответствии с вашим требованием. Однако это означает, что вам нужно поддерживать свою вилку компилятора, регулярно вытягивая обновления из основного репо.

Смотрите следующий код из CoffeeScript компилятора репо (https://github.com/jashkenas/coffeescript/blob/master/lib/coffee-script/coffee-script.js#L195):

.... 
    o[k] = v; 
} 
o.bare = true; 
js = compile(code, o); 
if (sandbox === global) { 
    return vm.runInThisContext(js); 
} else { 
    return vm.runInContext(js, sandbox); 
} 
.... 

вы можете добавить новый метод к этому файлу

precompile = function (code) { 
    // do pre-processing here 
} 

и сделать убежище

js = compile(precompile(code), o); 

I Не пытайтесь это сделать, так что вы можете ударить по некоторым стенам. Хотя изменения, которые вы хотите, достаточно просты, чтобы не беспокоиться о lexer.

Хотя вы можете написать свой собственный парсер для внесения изменений на любом языке и использовать grunt/gulp, чтобы комбинировать компиляцию кофе и шаг предварительной компиляции. Я бы рекомендовал этот метод.

Смежные вопросы