我正在嘗試使用Almond.js和Require.js優化器來創建一個獨立的文件,該文件可以在不使用Require.js的情況下使用。我已經能夠成功編譯該文件,並且可以運行所有代碼,但是存在一個問題:代碼以錯誤的順序執行。Require.js(almond.js)計時關
比方說,我的主文件(一個是在傳遞給優化的include=
選項)有以下幾點:
console.log('outside');
require(['someFile'], function(someModule) {
console.log('inside');
window.foo = someModule.rightValue;
});
,然後出來在我的HTML我有:
<script src="myCompiledFile.js"></script>
<script>
console.log('out in the HTML');
</script>
由於我正在使用almond.js和一個編譯文件(因此沒有文件加載進行)我期望得到輸出:
outside
inside
out in the HTML
然而,事實證明還是有一些異步回事,因爲我實際上看到的是:
outside
out in the HTML
inside
,如果我嘗試從HTML檢查window.foo
它不存在。
所以,我的問題是,我怎樣才能讓代碼更像是一個正常/同步的JS文件,在將代碼傳遞到下一個script
塊之前先運行其所有代碼?我不能完全告訴我的用戶「將所有代碼包裝在window.setTimeout中」。
感謝所有那些偉大的信息,但它並沒有真正解決我的問題。使用Require.js構建一個可共享庫是否真的不可能?我真的不想問問每個使用庫的人都需要'require('myLibrary')',我希望他們能夠引用一個全局變量(就像JQuery,Backbone,Underscore,Require本身一樣)。 )。 – machineghost
你在評論中提出的問題不僅僅是你在問題中提出的問題。無論如何,它[這裏回答](https://github.com/jrburke/almond#exporting-a-public-api)。您會注意到,結尾片段使用我在答案中提到的require('id')'方法作爲可能的解決方案。 – Louis
啊,我想我需要同步才能實現出口,但是你提供的鏈接看起來就像是一個完美的解決方案。謝謝。 – machineghost