RequireJS: загрузка модулей, включая шаблоны и CSS [закрыто]
после игры с AMD / RequireJS мне было интересно, если это хорошая идея, чтобы загрузить модули пользовательского интерфейса, включая шаблоны и CSS, так что они полностью независимы от веб-страницы.
это звучит хорошо, но я не видел, чтобы это было реализовано в дикой природе, поэтому могут быть ловушки.
подумайте о каком-нибудь модуле пользовательского интерфейса со следующей структурой:
myWidget
|--img
|--main.js
|--styles.css
+--template.tpl
все вещи в одну папку. Выглядит очень мило.
модуль в главном.js будет выглядеть что-то вроде этого:
define(["TemplateEngine", "text!myWidget/template.tpl"], function(TemplateEngine, template) {
// Load CSS (Pseudo Code)
var cssUrl = "myWidget/styles.css";
appendToHead(cssUrl);
return function() {
return {
render: function(data) {
return TemplateEngine.toHtml(template, data);
}
}
}
});
вопросы:
- я что-то пропустила?
- есть ли какие-либо плагины / концепции, как достичь этого "стандартным" способом?
- является ли оптимизатор RequireJS способным обрабатывать часть CSS здесь, скажем, concat / minify таблицы стилей, как это происходит с частями JS?
- какие-нибудь мнения по этому поводу? Хорошо это или плохо?
2 ответа:
вы можете указать шаблон в качестве зависимости с помощью текста! модуль, как вы показали. Я делаю это с помощью шаблонов усов.
Требуют.js явно не поддерживает файлы css.вот официальное объяснение, это объясняется довольно хорошо: http://requirejs.org/docs/faq-advanced.html#css
Изменить: Февраль 2012.
Шаблоны, такие как руль также могут быть предварительно скомпилированы и включены так же, как и любой другой JS модуль http://handlebarsjs.com/precompilation.html
Редактировать: Август 2015
Если вы после такого рода модуляризации вы должны смотреть в webpack и в частности css-loader. Я использую его для пары .css файлы С.файлы jsx как единый "модуль" и извлекают соответствующий CSS в единую таблицу стилей во время сборки.
есть сторонний CSS плагин для RequireJS, который, кажется, работает хорошо:https://github.com/VIISON/RequireCSS/.