2017-02-15 4 views
0

Есть ли способ скомпилировать каталог шаблонов и сохранить в объекте массива с помощью Webpack?Как загрузить массив шаблонов руля через веб-пакет?

Объяснение: Теперь я использую список шаблонов ручек. Я прекомпилирую список шаблонов, используя handlebars compiler в gulp.

gulp.src('client/src/templates/**/*.hbs') 
    .pipe(gulp_handlebars({ 
     handlebars: handlebars, 
     compilerOptions:{ 
     knownHelpers: helpers, 
     knownHelpersOnly:true} 
     })) 
     .pipe(wrap('Handlebars.template(<%= contents %>)')) 
     .pipe(declare({ 
     namespace: 'appname.templates', 
     noRedeclare: true, 
     processName: function(filePath) { 
      return declare.processNameByPath(filePath.replace('client/src/templates/', '')); 
     } 
     })); 

Я бы получил доступ к шаблонам через массив appname.templates. Он работал нормально.

Теперь я перехожу к Webpack. Если я использую handlebars-loader, это позволяет мне требовать каждый шаблон по имени, как

var template = require("./file.handlebars"); 

Есть ли способ, чтобы получить все шаблоны в одном каталоге в виде массива, как

var templates = require("./*.handlebars"); 
+0

Возможно, https://www.npmjs.com/package/glob-loader - это то, что вы хотите? – bejado

+0

@bejado - Tx указывает на загрузчик glob. Да, он загружает dir файлов, но мне также нужно будет использовать загрузчик руля. Есть ли способ позвонить обоим. Также я не уверен, как импортировать код. Дайте мне знать, если у вас есть предложения. –

ответ

1

Я обычно бы в папке у вас есть шаблоны и имеют templates/index.js файл, такие как:

export templateA from './templateA.handlebars' 
export templateB from './templateB.handlebars' 
export templateC from './templateC.handlebars' 
... 

Тогда вы можете сделать:

import * as templates from './templates' 

И templates - объект, который содержит все ваши шаблоны. Вы также можете сделать templates.templateA для доступа к ним по имени.

+0

Спасибо albertfdp за отличное решение. Работает отлично. В моем проекте я не включил Babel, поэтому мне нужно написать его как 'export {default as templateA} из 'templateA.handlebars''. Информация о синтаксисе была написана по ссылке [link] (http://stackoverflow.com/questions/35665759/es6-how-can-you-export-an-imported-module-in-a-singleline) –