私は RequireJS で非常に奇妙で苛立たしい問題を抱えています。依存関係のリストを持つモジュールに対して require を呼び出すと、コールバックで利用可能なすべての依存関係が単一のモジュールを参照します。これはおそらくコードで説明する方が簡単です:
require.js スクリプトを含む (data-main 属性なし)
<script type="text/javascript" src="/js/common/require.min.js" ></script>
その下に、require my main.js (サイトのすべてのページで使用) を含めます。これは、コールバックでページ固有の js を必要とします。
<script type="text/javascript">
require(['/js/require/main.js'], function () {
require(['page/home_page']);
});
</script>
main.js
requirejs.config({
baseUrl: 'js/require'
});
requirejs(['base'],
function() {
var base = require('base');
base.init();
});
home_page.js
define(['home','searchbar'], function (home,searchbar){
console.log(home.init == searchbar.init); // This is always true !!!
home.init();
searchbar.init();
});
home.js
define(function(){
this.init = function(){
console.log('in home page');
}
return this;
});
searchbar.js
define(function(){
this.init = function(){
console.log('Now in the searchbar init')
}
return this;
});
この問題は、home_page.js モジュールのホームと検索バーの両方が同じものを参照していることにあります。奇妙なことに、この例を単純化した今では、どちらを選択するかはかなりランダムに見えます。ほとんどの場合、それは検索バーですが、数回更新するたびにホームになります。
誰にもアイデアがありますか?それはひどく明白なことですか?
編集: 簡略化された例とすべてのモジュール ソースを提供します。