我在@Domenic的使用requirejs的簡單例子,從這個答案: simple example for using require.js 我在這裏包括。在我提到文件名之前requirejs如何知道加載所需的js文件?
shirt.js:
define({
color: "black",
size : "large"
});
logger.js:
define(function (require) {
var shirt = require("./shirt");
return {
logTheShirt: function() {
console.log("color: " + shirt.color + ", size: " + shirt.size);
}
};
});
main.js:
define(function (require) {
var shirt = require("./shirt");
var logger = require("./logger");
alert("Shirt color is: " + shirt.color);
logger.logTheShirt();
});
main.html中:
<script data-main="../js/main" src="../js/require.js"></script>
有一些很奇怪的事情:在哪裏shirt.color
在main.js使用, shirt.js和logger.js剛剛被安排要加載,asynchonously點 (我相信), 所以shirt.js還沒有真正被讀過。我認爲加載是異步的原因是,我的印象是同步加載在javascript中已經非常不合法(chrome)(XMLHttpRequest仍然有一個選項是同步的,但如果使用的話,它會在Chrome控制檯Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience.
上發出警告)。
然而,這個小應用程序似乎可靠地工作。 它甚至可以可靠地工作,如果我用指向另一個 側的資源的URL替換"./shirt.js"
,並且在加載html頁面之前清除我的瀏覽器緩存。
這怎麼可能?
如果我看在Chrome開發者控制檯時機,看來耗時shirt.js負荷 前實際發生的請求它甚至開始功能。 也就是說無論如何,它知道在程序中的任何內容之前加載shirt.js完全可以稱爲「./shirt」。
看來這裏有一些非常偷偷摸摸的魔法。 所以我很想知道:
- 在任何要求之前,requirejs怎麼知道加載shirt.js?
- 這可以在多大程度上依賴?
- 如何修改這個例子來避免依靠魔鬼魔法?
- 對於我們這些不信任魔鬼魔法的人,有沒有辦法在使用requirejs時禁用它?