2016-08-17 7 views
1

Я пишу загрузчик для webpack, который препроцессор стрелки функции в html для классических функций. Я собираюсь использовать его с нокаутами. Для предварительной обработки я использую этот packageКак обрезать «module.exports» в загрузчике webpack и получить простую строку?

Теперь у меня есть

var rewrite = require('knockout-arrows'); 

module.exports = function (str) { 
    if (this.cacheable) { 
     this.cacheable(); 
    } 

    var template = rewrite(str); 

    return "module.exports = '" + template + "'"; 
}; 

Он отлично работает, когда я непосредственно предобработка .html файла. Но при использовании другого загрузчика в цепочке (например, require("knockout-arrows!jade!./file.jade")) он становится сломанным, так как загрузчик jade также возвращает строку с "module.exports = '<h1>example</h1>'".

Итак, мой вопрос заключается в том, как разрезать этот «module.exports» и получить простую строку? Конечно, я могу использовать регулярное выражение, но я думаю, что это неправильно.

Извините за вопрос о нубе.

+0

Насколько я могу видеть, загрузчик Джейд не return rendered HTML, но скомпилированная функция шаблона. – robertklep

+0

@robertklep да, и это проблема, которую я пытаюсь решить. Кажется, я просто не понимаю философию погрузчиков. Jade возвращает именно эту строку javascript '' module.exports = '

test

' ' – Veikedo

+0

Являются ли ваши файлы Jade статическими (другими словами: не зависят от каких-либо переменных, которые необходимо визуализировать)? – robertklep

ответ

1

В чате выяснилось, что вы используете jade-static-loader, который экспортирует строку, содержащую экспорт модуля, содержащий HTML.

Другими словами, это строка что загрузчик получает:

"module.exports = '...HTML string...'" 

Для извлечения HTML, вы можете использовать eval() (который в этом случае должен быть безопасным), а затем запустить замена кода:

var rewrite = require('knockout-arrows'); 

module.exports = function (str) { 
    if (this.cacheable) { 
     this.cacheable(); 
    } 
    var html  = eval(str); 
    var template = rewrite(html); 

    // Export the replaced HTML as another string: 
    return "module.exports = " + JSON.stringify(template); 
}; 
+0

Ehy, они просто не возвращаются с простой строкой? – user1693057

+0

@ user1693057 "они"? – robertklep

+1

Я имею в виду, почему разработчики загрузчика возвращаются с 'return 'module.exports =" + JSON.stringify (input); ' вместо' return input; ' В чем его смысл? – user1693057

1

Что об использовании val-loader между загрузчиком нефрита и вашим? У меня была такая же проблема, пытаясь использовать haml и dust погрузчики:

Измененный от:

{ test: /\.js\.dust\.haml/, loader: 'dust-loader!haml-haml' } 

к:

{ test: /\.js\.dust\.haml/, loader: 'dust-loader!val-loader!haml-haml' } 

Из документации WebPack по:

вал: Выполняет код как модуль и рассматривать экспорт как код JavaScript

и в самой погрузчиком документации:

Этот загрузчик также полезно, если вы хотите предоставить данные для другого загрузчика

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

  • Нет связанных вопросов^_^