2017-01-17 2 views
0

Я пытаюсь написать плагин webpack, который войдет в каталог, содержащий html-файлы, откроет каждый, удалит новые строки и сгенерирует объект для присоединения как статическое свойство к моему выводу файл (который является var).Плагин Webpack для прикрепления статического объекта JSON к выходу

Объект будет выглядеть примерно так:

{ 
    htmlFile1: '<p>some html one!</p>', 
    htmlFile2: '<span>some html two!</span> 
} 

Тогда я хотел бы, чтобы прикрепить к моему выходу, как:

App.templates = { .... } 

Создание объекта делается. Я просто борюсь с webpack и выясняю, как прикрепить его к основному объекту. Должен ли я просто записать его на диск и потребовать? Или есть способ добавить его в пакет через плагин?

Я использую Rivets.js в качестве механизма шаблонов, и я не смог найти что-то там, что уже делает что-то подобное.

Также стоит отметить, что все, что я использую, это webpack и npm. Нет Grunt/Gulp/etc

Большое спасибо! Mike

ответ

0

Вы можете использовать WebPack-х require.context импортировать все HTML файлы в каталоге в виде текста, обрабатывают текст и экспортировать результаты в виде одного объекта:

const requireTemplate = require.context('./templates', false, /\.html$/); 

module.exports = requireTemplate.keys().reduce((templateMap, templatePath) => { 
    const templateName = templatePath.match(/\/(\w*?)\.html/)[1]; // get filename without path and extention 
    templateMap[templateName] = require(templatePath); 
    return templateMap; 
}, {}); 
+0

Извините, но я не обращая внимания, когда речь идет о к Webpack. Было бы это, но что-то в плагине или в моей кодовой базе? И как бы связать полученный объект с глобальным пространством имен? – mike

+0

Это будет модуль в вашей кодовой базе, а не плагин. Вы можете назвать его 'templateMap.js' и поместить его рядом с точкой входа. Затем вы можете использовать его с 'require ('./ templateMap')' или если вы хотите, чтобы он был добавлен как глобальный, вы можете использовать [ProvidePlugin] (https://webpack.github.io/docs/list-of -plugins.html # provisionplugin) следующим образом: 'new webpack.ProvidePlugin ({TEMPLATES:. ./templateMap}}) и получить доступ к нему как' TEMPLATES' в вашем приложении. – SimpleJ

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