除了@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"]
}))
.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 文件中正常,它应该可以在现有的 require.js 设置下运行,比如压缩文件等。
关于 @coderC 的问题,我在 AMD 模块中使用了
i18n!nls/lang
。起初我以为在 ES6 模块中寻找 AMD 插件加载器的替代方案会非常棘手,所以我转而使用其他本地化工具,例如
i18next
。但事实证明这样做也是可以的:
import lang from 'i18n!nls/lang';
因为它将被 gulp 任务编译成类似于以下内容的东西:
define(['d3', 'i18n!nls/lang'], function (_d, _lang) {
这样,我们就不必担心 require.js 加载器的问题。
简言之,在 ES6 模块中,如果您想使用现有的 AMD 插件/模块,您只需要确保编译后的文件与现有设置相符。此外,您还可以尝试使用 ES6 模块打包程序
Rollup 来捆绑所有新的 ES6 文件。
希望这对那些试图在项目中集成 ES6 语法的人有所帮助。