2015-11-04 18 views
23

Tôi cố gắng để xuất khẩu một mô-đun es6 trong header.js:Babel 6.0.20 Modules tính năng không hoạt động trong IE8

export default { 
    setHeaderHighlight: function (index) { 
     // do somethings 
    } 
}; 

Và import nó trong index.js:

import header from "./header.js" 

$(function() { 
    header.setHeaderHighlight(0); 
}); 

Sau đó chuyển đi ra trong index.bundle.js :

var _header = __webpack_require__(129); 

var _header2 = _interopRequireDefault(_header); 

function _interopRequireDefault(obj) { 
    return obj && obj.__esModule ? obj : { default: obj }; // crash here 
} 

Vì vậy, đây là vấn đề, tức là8 sẽ tăng Expected identifier Ngoại lệ tại { default: obj }, nhưng mọi thứ đều ok> = ie9.

Có điều gì tôi có thể làm với điều này không?

+1

Tôi tìm thấy giải pháp tạm thời: 'webpack -p' sẽ thực hiện tương tự hai plugin esel babel đó. – Bruce

Trả lời

28

Theo mặc định, Babel 6.x yêu cầu bạn bật bộ chuyển đổi rõ ràng. Cài đặt chuẩn es2015 được chuyển đổi ES6 thành ES5, tuy nhiên IE8 không tương thích với ES5. Trong trường hợp này, nếu bạn nhìn vào plugins list, bạn sẽ thấy

Những điều này sẽ chuyển đổi tài sản của bạn để tương thích với IE8. Nói chung trong Babel 6.x bạn muốn làm điều này bằng cách đi qua những cái tên như một phần của plugins mảng của bạn, cùng với chuỗi presets và cài đặt các biến đổi qua

npm install --save-dev babel-plugin-transform-es3-member-expression-literals babel-plugin-transform-es3-property-literals 
+0

Tôi cài đặt các plugin, thêm chúng vào '.babelrc' và khởi động lại bản dựng. Nhưng nó vẫn không hoạt động. Có điều gì tôi nhớ không? – Bruce

+1

@Bruce Nhìn vào nó, các bước của tôi là những gì _should_ làm việc, nhưng chúng không. Tôi đã gửi một lỗi: https://github.com/babel/babel/issues/2817 – loganfsmyth

+2

Giải pháp ở trên đã hiệu quả đối với tôi, nhưng lưu ý nếu bạn có một mô-đun nhập mặc định như 'import * from 'jquery'', nó sẽ vẫn mở rộng dưới dạng '_jquery2.default' sử dụng từ khóa dành riêng 'mặc định', phá vỡ IE. – Doug

6

tôi sử dụng webpack + es3ify-loader như workaround.

loaders: { 
    { 
    test: /\.jsx?$/, 
    exclude: /node_modules/, 
    loaders: ['es3ify', `babel?${JSON.stringify(babelQuery)}`], 
    }, 
} 
+0

Tôi đã thử cách tiếp cận đó nhưng tôi nhận được "Lỗi phân tích cú pháp: Dòng 1: Thiếu sau khi nhập" nhưng không có ý nghĩa gì:/ – gabrielhpugliese

+1

Sửa lỗi, đặt vấn đề :) – gabrielhpugliese

+0

Lưu ý: trong Webpack2, bạn phải đặt tên cho 'es3ify' bộ nạp như 'es3ify-loader' - và' babel' như 'babel-loader', đã cho tôi nửa giờ để hiểu :) –

2

Tôi cũng gặp sự cố và tôi đã viết a webpack plugin để giải quyết. Tôi không thực sự biết nếu có một cách tốt hơn để xử lý nó, nhưng nó hoạt động.

Mô-đun trong node_modules cũng hoạt động tốt.

Các vấn đề liên quan