RequireJS:加载包括模板和CSS的模块[关闭]


72

在玩完AMD / RequireJS之后,我想知道加载UI模块(包括模板和CSS)是否完全独立于网页是否是个好主意。

听起来不错,但我还没有看到在野外实现这一功能,因此可能存在一些陷阱。

考虑一些具有以下结构的UI模块:

myWidget
    |--img 
    |--main.js
    |--styles.css
    +--template.tpl

所有内容都放在一个文件夹中。看起来很好。

main.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);
            } 
        }
    }
});

现在的问题是:

  1. 我想念什么吗?
  2. 是否有任何插件/概念如何以“标准”方式实现这一目标?
  3. RequireJS优化器是否能够在这里处理CSS部分,例如像在JS部分中一样处理样式/缩小样式表?
  4. 有什么意见吗?是好是坏?

我正在为模板做这个,并且效果很好。我唯一的挣扎是在CSS上无法进行优化。这会给我带来一个神秘的错误,而我没有时间解决它。目前,这是我要解决的问题,因此,我将密切关注您的问题,看看有人是否有解决方案
timDunham 2011年

Answers:


53

您可以使用文本将模板指定为依赖项!像您显示的模块。我用小胡子模板来做。

但是Require.js不明确支持CSS文件。

这是官方解释,解释得很好:http : //requirejs.org/docs/faq-advanced.html#css

编辑:2012年2月。

像把手这样的模板也可以像任何其他JS模块http://handlebarsjs.com/precompilation.html一样进行预编译和包含。

编辑:2015年8月

如果您要进行这种模块化,则应该研究webpack,尤其是css-loader。我正在使用它来将.css文件与.jsx文件配对为一个统一的“模块”,并在构建时将相关的CSS提取到单个样式表中。


2
那么,处理CSS的“正确”方法是什么?
hugomg

AFAIK没有“正确”的方法。您可以选择以下选项:1)传统链接标记2)使用javascript动态包含样式表。如果您的JavaScript依赖于CSS,并且您想动态加载它,则必须在JavaScript小部件运行之前,创建一个函数来测试已加载的CSS类中属性的存在。
克里斯·比斯卡迪

您也可以通过文本加载CSS!模块并解析它,尽管我从未做过。
克里斯·比斯卡迪

29
是的,我知道还有很多选择,这仍然让我感到困惑,因为我们有一个用于JS模块的标准系统,但是当涉及CSS时,我们又回到了荒唐的西部。
hugomg

1
我想我不明白为什么文本不能加载CSS!插入?CSS不只是utf8文本吗?
亚历山大·米尔斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.