使用requirejs加载小胡子

use*_*847 12 javascript mustache requirejs

我想通过requirejs加载和使用小胡子.

也许这个问题已经问过:
使用RequireJS使用Mustache进行AMD模块加载错误

无论如何,我想弄清楚如何修复我的代码:


main.js

require.config({
    paths: {
        jquery: 'libs/jquery/jquery',
        underscore: 'libs/underscore/underscore-min',
        backbone: 'libs/backbone/backbone-optamd3-min',
        mustache: "libs/mustache/mustache"
    }
});

require([
    'views/app'
    ], function(AppView){
        var app_view = new AppView;
 });
Run Code Online (Sandbox Code Playgroud)

app.js

define([
    'jquery',
    'underscore', 
    'backbone',
    "mustache"
    ], function($, _, Backbone, Mustache) {
        console.log($, _, Backbone, Mustache); // <-- *** Mustache is null ***
        // ......
       }
);
Run Code Online (Sandbox Code Playgroud)

正如你在app.js文件评论中看到的那样,Mustache is null......
我应该使用另一个Mustache库吗?这就是我使用的胡子

bir*_*ril 17

从2004年7月开始,看起来Mustache 支持AMD模块.所以现在应该使用诸如require.js之类的加载器开箱即用.


ant*_*njs 9

您应该在您的胡子目录中创建一个新文件mustache-wrap.js,如下所示:

 define(['libs/mustache/mustache'], function(Mustache){
    // Tell Require.js that this module returns a reference to Mustache
    return Mustache;
 });
Run Code Online (Sandbox Code Playgroud)

然后你的主要是:

  mustache: "libs/mustache/mustache-wrap"
Run Code Online (Sandbox Code Playgroud)


kry*_*ger 7

不确定RequireJS在发布此问题(和答案)时2.1.0是否已用完,但现在处理此问题的首选方法是使用shimconfig元素(项目文档页面上的更多信息).

你的main.js会变成:

require.config({
    paths: {
        jquery: 'libs/jquery/jquery',
        underscore: 'libs/underscore/underscore-min',
        backbone: 'libs/backbone/backbone-optamd3-min',
        mustache: "libs/mustache/mustache"
    },
    shim: {
        'mustache': {
            exports: 'Mustache'
        }
    }
});
(...)
Run Code Online (Sandbox Code Playgroud)

这与包装器建议@AntoJs 实际上相同,但没有样板代码.

...但是,由于Mustache支持AMD,所以首先不需要包装/垫片!