Trước đây, babel sẽ thêm dòng module.exports = exports["default"]
. Nó không còn làm điều này. Điều này có nghĩa là trước khi tôi có thể làm:
var foo = require('./foo');
// use foo
Bây giờ tôi phải làm điều này:
var foo = require('./foo').default;
// use foo
Không phải là một vấn đề lớn (và tôi đoán đây là những gì nó nên có cùng). Vấn đề là tôi có rất nhiều mã phụ thuộc vào cách mọi thứ hoạt động (tôi có thể chuyển đổi hầu hết mã sang nhập ES6, nhưng không phải tất cả mã). Bất cứ ai có thể cho tôi lời khuyên về cách làm cho cách cũ hoạt động mà không cần phải thông qua dự án của tôi và sửa lỗi này (hoặc thậm chí một số hướng dẫn về cách viết một codemod để làm điều này sẽ khá khó khăn).
Cảm ơn!
Thí dụ:
Đầu vào:
const foo = {}
export default foo
Đầu ra với Babel 5
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
module.exports = exports["default"];
Đầu ra với Babel 6 (và plugin es2015):
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
Lưu ý rằng sự khác biệt duy nhất trong đầu ra là module.exports = exports["default"]
.
Biên tập
Bạn có thể quan tâm đến blog này tôi đã viết sau khi giải quyết vấn đề cụ thể của mình: Hiểu lầm Mô-đun ES6, Nâng cấp Babel, Nước mắt và Giải pháp
if (false) { require('./foo') }
với webpack sẽ bỏ qua thực sự bao gồm foo.js
trong gói kết quả.
false
chuyển đổi của bạn ở đó? Nếu đó là một điều kiện có sẵn trong cấu hình gói web của bạn, có thể có một tùy chọn khác.
export default {foo, bar}
với module.exports = {foo, bar}
. Tôi khá thích phương pháp không chính xác mà bây giờ không được hỗ trợ.
require
nếu bạn đang làm việc trong một cơ sở mã sử dụng Babel là gì? Rất có thể, có những cách tiếp cận khác sẽ cho phép bạn tránh điều đó bằng mọi cách.