Ngoài câu trả lời của @ Louis, giả sử bạn đã có một loạt thư viện của bên thứ ba được chỉ định trong cấu hình require.js, trong mô-đun ES6 mới của bạn, bất cứ khi nào bạn nhập mô-đun, có thể là amd hoặc es6, bạn sẽ được miễn là bạn giữ tên mô-đun được nhập phù hợp.Ví dụ:
Đây là 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"));
});
Dưới đây là file es6:
import d3 from 'd3';
import myFunc from 'modules/newFolder/es6module'
// ...
này sẽ được biên dịch để sth như thế này:
define(['d3', 'modules/newFolder/es6module'], function (_d, _myFunc) {
'use strict';
// ...
});
miễn vì mô-đun trong define(['d3', 'modules/newFolder/es6module'], ...
của tệp được biên dịch là tốt trong tệp AMD ban đầu, nó sẽ hoạt động với dưới existi ng require.js thiết lập, chẳng hạn như nén tệp, v.v.
Về câu hỏi của @ coderC về trình tải require.js, tôi đã sử dụng i18n!nls/lang
trong các mô-đun AMD, lúc đầu tôi nghĩ rằng đó sẽ là một điều thực sự phức tạp để tìm thay thế các trình tải plugin của AMD trong các mô-đun ES6 và tôi đã chuyển sang các công cụ bản địa hóa khác như i18next
. Nhưng hóa ra rằng nó không quan trọng để làm điều này:
import lang from 'i18n!nls/lang';
// import other modules..
bởi vì nó sẽ được biên soạn bởi nhiệm vụ ngụm để sth như:
define(['d3', 'i18n!nls/lang'], function (_d, _lang) {
// ....
Bằng cách này, chúng ta không cần phải lo lắng về việc yêu cầu .js loader.
Tóm lại, trong các mô-đun ES6, nếu bạn muốn sử dụng các plugin/mô-đun AMD hiện có, bạn chỉ cần đảm bảo tệp được biên dịch phù hợp với thiết lập hiện có. Ngoài ra, bạn cũng có thể thử trình bao gói mô-đun ES6 Rollup để gói tất cả các tệp ES6 mới.
Hy vọng điều này có thể hữu ích cho những người đang cố gắng tích hợp cú pháp ES6 trong dự án.
"* chỉ hoạt động đối với các mô-đun mới không phụ thuộc vào các mô-đun AMD hiện tại *" - tại sao bạn nghĩ vậy? Nếu bạn biên dịch sang AMD và sử dụng requirejs để tải các mô-đun của mình, bạn vẫn có thể yêu cầu các mô-đun "bình thường" (chưa được biên dịch) một cách bình thường. – Bergi
Vâng, như @Bergi đã nói, bạn có dự định biên dịch các mô-đun ES2015 của mình thành một thứ khác ngoài AMD không? – JMM
Tôi chỉ muốn biên dịch các mô-đun ES2015 cho AMD. Tuy nhiên, như tôi đã đề cập, tôi đã có một số mô-đun AMD mà tôi muốn nhập trong mô-đun ES2015 của mình để tôi có thể sử dụng lại chúng thay vì viết lại chúng. – coderC