除了@Louis的回答,假設您已經在require.js配置中指定了一堆第三方庫,在新的ES6模塊中,無論何時導入模塊,都是amd或es6,只要保持導入的模塊名稱一致就可以。例如:
這裏是gulpfile:
gulp.task("es6", function() {
return gulp.src("modules/newFolder//es6/*.js")
.pipe(babel({
"presets": ["es2015"],
"plugins": ["transform-es2015-modules-amd"]
// don't forget to install this plugin
}))
.pipe(gulp.dest("modules/newFolder/build"));
});
這裏是ES6文件:
import d3 from 'd3';
import myFunc from 'modules/newFolder/es6module'
// ...
這將被編譯爲某事像這樣:
define(['d3', 'modules/newFolder/es6module'], function (_d, _myFunc) {
'use strict';
// ...
});
只要由於編譯文件的define(['d3', 'modules/newFolder/es6module'], ...
中的模塊在原始的AMD文件中很好,它應該在existi下工作ng require.js設置,如壓縮文件等。
在@ coderC關於require.js加載器的問題中,我在AMD模塊中使用了i18n!nls/lang
,起初我認爲找到一個非常複雜的東西替代ES6模塊中的AMD插件加載程序,並且我切換到了其他本地化工具,例如i18next
。但事實證明,這沒關係做到這一點:
import lang from 'i18n!nls/lang';
// import other modules..
,因爲它會被吞掉的任務被編譯爲某事像:
define(['d3', 'i18n!nls/lang'], function (_d, _lang) {
// ....
這樣,我們就不必擔心需要.js加載程序。
簡而言之,在ES6模塊中,如果您想使用現有的AMD插件/模塊,您只需確保編譯的文件與現有設置一致。此外,您還可以嘗試ES6模塊捆綁軟件Rollup捆綁所有新的ES6文件。
希望對於那些試圖在項目中集成ES6語法的人有所幫助。
「*僅適用於不依賴於現有AMD模塊的新模塊*」 - 您爲什麼這麼認爲?如果你編譯到AMD並使用requirejs來加載你的模塊,你仍然可以簡單地要求「正常」(未編譯)模塊。 – Bergi
是的,就像@Bergi說的那樣,您是否打算將ES2015模塊編譯爲AMD以外的其他模塊? – JMM
我想將ES2015模塊編譯爲AMD。但是,正如我所提到的,我已經有一些我想在ES2015模塊中導入的AMD模塊,以便我可以重複使用它們而不是重新寫入它們。 – coderC