2012-04-12 106 views
12

我想通過requirejs加載和使用鬍子。使用requirejs加載鬍子

也許這個問題已經問:
AMD Module Loading Error with Mustache using RequireJS

反正我試圖找出如何解決我的代碼:


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

app.js

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

正如你可以在註釋中看到app.js文件,Mustache is null ...
我應該使用鬍鬚的另一個庫? 這裏我使用Mustache

回答

8

你應該在你的鬍子目錄只需要創建一個新的文件小鬍子wrap.js看起來像這樣的內容:

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

,然後你的主要將是:

mustache: "libs/mustache/mustache-wrap" 
+2

這應該是在文檔! – wprl 2012-12-16 14:31:48

+1

@AntoJs第一行應該閱讀; 'define(['libs/mustache/mustache'],function(Mustache){' – Matt 2013-08-15 10:38:32

1

您可能也可以在使用鬍子的代碼中或在「main.js」中的某處執行聯機命名的定義(省去創建* - 打包文件的麻煩)

define('mustache', ['libs/mustache/mustache'], function(){ 
    // Tell Require.js that this module returns a reference to Mustache 
    return Mustache; // from global 
}); 
require(
    ['jquery','underscore','backbone','mustache'] 
    , function($, _, BB, Mustache){ 
     // use them 
    } 
) 
17

看起來像鬍鬚supports AMD modules 7月'12。因此,它現在應該使用require.js之類的加載程序來開箱即用。

7

不確定RequireJS 2.1.0在發佈此問題(和答案)時是否已發佈,但現在處理此問題的首選方式是使用shim配置元素(更多信息on project's docs page)。

你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' 
     } 
    } 
}); 
(...) 

這是有效一樣的包裝建議@AntoJs,但沒有樣板代碼。

......但後來,因爲鬍鬚支持AMD沒有必要包裝/墊片擺在首位!