2015-09-01 54 views
0

我正在使用requirejs,並且在我的一個文件中,下劃線是依賴項。下面是包含下劃線的一段代碼。Underscorejs與requirejs一起使用時返回undefined

define(["lib/underscore"], function(_) { 
    // Here _ is undefined 
}); 

通過一些研究,我發現下劃線將它添加到全局命名空間中。 Underscore返回undefined,這就是爲什麼_變得未定義。如果我用下面的方法_是有效的。

define(["lib/underscore"], function() { 
    // Here _ is defined 
}; 

在上面的代碼中,我不覆蓋添加到全局名稱空間的_。

在我的探索,找出原因下劃線不返回_我發現underscore.js

// AMD registration happens at the end for compatibility with AMD loaders 
    // that may not enforce next-turn semantics on modules. Even though general 
    // practice for AMD registration is to be anonymous, underscore registers 
    // as a named module because, like jQuery, it is a base library that is 
    // popular enough to be bundled in a third party lib, but not be part of 
    // an AMD load request. Those cases could generate an error when an 
    // anonymous define() is called outside of a loader request. 
    if (typeof define === 'function' && define.amd) { 
    define('underscore', [], function() { 
     return _; 
    }); 
    } 

下劃線時通過requirejs它應該返回加載它意味着這下面的一段代碼_,而不是不確定的。這不會發生在我身上。任何人都可以幫助我這個。

回答

0

您上面提供的下劃線片段僅在define存在時纔會運行。您可能在RequireJS之前在頁面上加載了下劃線。而且,下劃線將自己註冊爲命名模塊。命名模塊通常需要使用該名稱,而不是路徑。

您可以:

  • 如果您需要強調作爲一個經常性的全球,負荷強調加載頁面上RequireJS。這樣,它就宣佈自己是一個全局以及一個命名模塊。然後,您可以使用名稱而不是像下面這樣的路徑來要求下劃線:define(['underscore'], function(_){...});

  • 不要求下劃線並繼續使用全局_。但是這首先破壞了你擁有RequireJS的目的。

+0

1.當下劃線被調用時,define存在,我在下劃線之前加載RequireJS。 2.路徑也是正確的我能夠調試到我上面指定的代碼。 – kishore

+0

@kishore Underscore將自己註冊爲*一個已命名的模塊*。這意味着*應該按名稱引用,而不是路徑*引用。我答案中的第一個重點應該解決這個問題。 – Joseph

+0

所以我必須在requirejs config中定義一個路徑 – kishore

相關問題