ES6模塊系統似乎非常適合統一CommonJs/AMD語法。作爲requireJs/AMD用戶,我想轉換爲ES6模塊(現在使用babel.js)。使用多個基地系統的ES6異步模塊
雖然似乎有一個問題;通過閱讀文檔和教程,似乎沒有可能加載依賴於多個baseurl的模塊包。使用requireJs這是可以解決的使用context
領域:
// async dependencies are loaded from http://path/to/domain
var contextedRequire1 = require.config({
baseUrl: 'http://path/to/domain/js',
context: 'mainContext'
});
// async dependencies are located on http://path/to/otherdomain
var contextRequire2 = require.config({
baseUrl: 'http://path/to/otherdomain/js',
context: 'pluginContext'
});
contextedRequire1(['main.js'], function(main){
// loaded using http://path/to/domain/js/main.js
contextedRequire2(['plugin-lazyloading-deps.js'], function(plugin){
plugin.init();
});
});
在main.js
define(['main-deps'], function(mainDeps){
// loaded using http://path/to/domain/js/main-deps.js
})
在插件-惰性加載-deps.js
define(['require'], function(require){
// loaded using http://path/to/otherdomain/js/plugin-lazyloading-deps.js
if(Modernizr.touch) {
require(['hammer'], function(){
// loaded using http://path/to/otherdomain/js/hammer.js
hammer.init();
})
}
})
在ES6異步模塊導入這是不可能的,因爲System
是一個單身人士
System.baseURL = "http://path/to/domain/js";
System.import("main").then(function(main){
// loaded using http://path/to/domain/js/main.js
// This will potentially break when main.js tries to load hammer.js from http://path/to/domain/js
System.baseURL = "http://path/to/otherdomain/js";
System.import("plugin-lazyloading-deps").then(function(){ /** code **/ });
});
我的問題是:是否有東西,我已經錯過了(可能繼承系統能夠配置一些的BaseURL)的文檔,或者是這個東西在作品中爲未來的擴展模塊?
加載來自不同域的異步模塊包的用例是幾個團隊在大型站點(主應用程序)內創建子應用程序 - 需要在不需要主應用程序的情況下在不同的域上構建和部署-deployed。 –