pasaran / yate

Yet Another Template Engine
MIT License
214 stars 28 forks source link

Указать имя модуля во время компиляции #228

Closed azproduction closed 10 years ago

azproduction commented 10 years ago

Есть несколько причин по которым можно не хотеть писать имя модуля в начале файла:

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

function compileWith(path, yr) {
    var oldExport = 'yr.register(\'main\', M)';
    var newExport = 'yr.register(\'' + path + '\', M)';
    var templateCode = yateCompile(path).js.replace(oldExport, newExport);

    vm.runInNewContext(templateCode, {
        yr: yr
    });
}

Полный путь, в качестве имени модуля, так же удобен при использовании интерфейса шаблонизатора express. Не нужно из path выкусывать имя модуля.

function renderExpress(path, options, fn) {
    options.filename = path;

    try {
        fn(null, render(path, options));
    } catch (e) {
        fn(e);
    }
}
pasaran commented 10 years ago

Так. Я сделал ключик для "бинарника" yate:

yate foo.yate --module-name "foo"
yate foo.yate --module-name "/foo/bar"

Это то, что тебе нужно? Если да, то соберу пакет с новой версией.

azproduction commented 10 years ago

Мне это нужно в API.

yateCompile(path, {
    moduleName: 'foo'
});
pasaran commented 10 years ago

Угу. Я так и думал. Там правда нет никакого API :) Ну ок, ща куда-нибудь проброшу... Надо всю эту хренотень переписать бы... Опции и все вот это.

pasaran commented 10 years ago

А что у тебя делает yateCompile? Каким моим "API" ты уже сейчас пользуешься?

azproduction commented 10 years ago
var yateCompile = require('yate').compile;

function compileWith (path, yr) {
    var oldExport = 'yr.register(\'main\', M)';
    var newExport = 'yr.register(\'' + path + '\', M)';
    var templateCode = yateCompile(path).js.replace(oldExport, newExport);

    vm.runInNewContext(templateCode, {
        yr: yr
    });
}
pasaran commented 10 years ago

Ладно. Давай пока попробуем вот так. Я добавил в yate.parse(), yate.compile(), yate.run() вторым параметром опции, которые в случае запуска из командной строки состоят из разобранной командной строки. В твоем случае туда можно передать что-то типа того:

var templateCode = yateCompile( path, { 'module-name': path } ).js
pasaran commented 10 years ago

/cc @alexeyten Леш, а ты нигде явно не использовал у себя yate.compile, yate.run, yate.parse? А то я там сигнатуру yate.run поменял.

pasaran commented 10 years ago

0.0.72

alexeyten commented 10 years ago

У меня вроде нет. Надо спросить у @doochik и @vitkarpov

doochik commented 10 years ago

я использую, учту при обновлении

pasaran commented 10 years ago

А ты прям yate.run используешь?! Оно же такое, отладочное... Если нет, то можешь ничего и не делать. Параметр опциональный для yate.compile и yate.parse.