2014-01-11 3 views
1

Из оболочки я могу вызвать компилятор Sweet.js.Компилировать SweetJS в String в Node.js

sjs -m macro-providing-module -o output-directory/file.js input-directory/file.sjs

Как я могу сделать то же самое внутри модуля Node.js таким образом, что вместо вывода в указанный файл, я получаю скомпилированный вывод в виде строки?

var sweetjs = require('sweet.js'); 
var input = require('fs').readSync('input-directory/file.sjs'); 
var module = 'macro-providing-module'; 

var output = sweetjs(/* ??? */); 
+1

Там в 'sweetjs.compile()', что делает это, но я не имею ни малейшего понятия о том, как реализовать модуль заряжания часть. API, похоже, не документирован, и код довольно нечитабелен :( – robertklep

+0

Да, я прошел через код и пришел к такому же выводу. – Havvy

+0

Если кто-то задавался вопросом, почему я хочу это сделать, я пытаюсь написать модуль 'fez-sweet.js'. – Havvy

ответ

2

его недокументированные, поскольку он будет изменен/удален, когда sweet.js получает хорошую поддержку модуля (с помощью ES6 import сек вместо флагов командной строки). Но для 0.4.0 вы можете использовать следующие API для загрузки макросов из НПМ модулей:

var sweet = require('sweet.js'); 
var mod = sweet.loadNodeModule(root, modulePath); 
var out = sweet.compile(<contents>, { 
    modules: [mod] 
}); 

root аргумент является расположение в файловой системе, чтобы начать поиск узла модулей. Обычно это process.cwd(), если вы делаете инструмент командной строки или что-то в этом роде. compile принимает объект опций, где вы можете предоставить массив из module.

Если вы хотите просто скомпилировать строку в качестве модуля, вы можете использовать sweet.loadModule(<contents>).

Опять же, этот API является просто зазором и будет удален в ближайшем будущем.

Edit: исправлена ​​compile API

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