2016-09-09 128 views
1

我的項目結構看起來像這樣RequireJS有時加載失敗的jQuery

root/ 
    lib/ 
    js/ 

在我的js文件夾中我有引用lib目錄中的JavaScript文件要求-config文件。像這樣:

require.config({ 
    paths: { 
     jquery: ["../lib/jquery/dist/jquery"], 
    } 
}); 

發起針對像這樣:

<script data-main="js/require-config" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.1/require.min.js"></script> 
<script>require(["viewModels/searchViewModel"]);</script> 

這是我searchViewModel看起來像(內部功能略代碼),從打字稿產生:

define(["require", "exports", "jquery"], function (require, exports, $) { 
    "use strict"; 
    var SearchViewModel = (function() { 
     function SearchViewModel() { 
     } 
     return SearchViewModel; 
    } 
}); 

對於大多數情況下,找到正確的文件似乎沒有問題。有時候,它正在尋找/js/jquery.js中的jquery文件,這會導致瀏覽器爲http://localhost/js/jquery.js拋出404。

我在做需要配置時做錯了什麼?而且它有時甚至有時不起作用?

回答

0

請勿使用data-main加載您的RequireJS配置。它間歇性地工作的原因是因爲data-main導致RequireJS異步加載的命名腳本。所以在執行require(["viewModels/searchViewModel"]);時,您的配置不一定會被加載。

使用data-main加載配置,只有當所有依賴於該配置的代碼是通過你傳遞給data-main同一文件中加載是安全的。這可能是因爲您已經構建了一個包含應用程序的所有模塊和配置的包,或者因爲您在配置中僅使用deps以在加載配置後加載模塊。

您的情況並不安全,因爲您的代碼爲您通過data-main加載的模塊取決於所加載的配置。

分裂您script這樣的:

<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.1/require.min.js"></script> 
<script src="js/require-config.js"></script>