2015-05-14 15 views
18

Tôi đang viết một "lớp học" trong nútLàm cách nào để thực hiện xuất khẩu tương thích với ES5 và ES6?

// mymodule/index.js 

function MyClass() {} 
MyClass.prototype.method1 = function() {..} 

thường tôi làm

module.exports = MyClass 

nhưng tôi muốn lớp học của tôi có sẵn cho cả cú pháp

var MyClass = require('mymodule') 

import {MyClass} from 'mymodule' 

Đó là cách chính xác để làm điều đó?

+0

Hãy xem cách Babel tiếp cận điều này: http://babeljs.io/docs/usage/modules/# interop – Wildhoney

+2

Tại sao bạn muốn 'nhập {MyClass} từ 'mymodule'' thay vì' nhập MyClass từ' mymodule''? 'var MyClass = require ('mymodule')' tương đương với 'nhập MyClass từ 'mymodule'' và' import {MyClass} từ' mymodule'' tương đương với 'var MyClass = require ('mymodule'). MyClass'. Trong khi bạn chắc chắn có thể đạt được những gì bạn muốn, câu hỏi là liệu nó có ý nghĩa hay không. –

+2

Bạn có thể có nghĩa là làm thế nào để thực hiện một xuất khẩu mà là cả hai tương thích với CommonJS và ES6 của Harmony. –

Trả lời

0

Từ nhận xét, tôi hiểu rằng bạn đang cố gắng chạy mã lối vào ES6 của bạn trong một số thử nghiệm đơn vị mocha trong nút. Có, bạn không thể làm điều đó cho đến khi nút hỗ trợ các mô-đun ES6. Nếu tôi là bạn, tôi sẽ sử dụng systemjs để tải mã cho các bài kiểm tra mocha đó. Mocha hỗ trợ các lời hứa, do đó, bạn không nên tải bất kỳ tệp nào trước khi kiểm tra.

Cú pháp viết cho cả hai sẽ chỉ tạo ra nhiều vấn đề hơn cho bạn.

0

Cả hai cách đều đúng, nhưng cố gắng nhập trong es6 như thế này không có dấu ngoặc:

import MyClass from 'mymodule' 

Nếu không, bạn sẽ phải xuất khẩu chức năng của bạn như thế này:

module.exports.MyClass = MyClass 

và hơn import nó như thế này:

import { MyClass } from 'mymodule' 
+3

Đây không phải là tương thích với es5 đó là những gì OP được yêu cầu. – Jim

+0

@Jim Câu hỏi đặt ra là làm thế nào để làm cho es5 tương thích với es6. Câu trả lời của tôi chỉ ra một sai lầm trong mã số và cách khắc phục. Đây không phải là mã es6, danh sách 2 giải thích cách điều chỉnh mã es5 trong khi liệt kê 1 cho biết cách điều chỉnh mã es6, để khắc phục toàn bộ vấn đề. –

4

Theo cách viết xuất tương thích cho cả ES5 và ES6, Bab el đã chăm sóc điều đó cho bạn. (Như đã thông trong các ý kiến ​​cho câu hỏi của bạn. Tôi chỉ làm rõ đối với những người đã bị mất trong hộp thoại.)

module.exports = MyClass 

sẽ làm việc với cả hai var MyClass = require('mymodule')import MyClass from 'mymodule

Tuy nhiên, để được rõ ràng, cú pháp thực tế mà bạn được hỏi về:

import {MyClass} from 'mymodule' 

nghĩa một cái gì đó khác với

import MyClass from 'mymodule' 

Đối với trường hợp thứ hai, bạn sẽ phải xuất nó dưới dạng: module.exports.MyClass = MyClass và đối với mô-đun ES5, nó sẽ phải yêu cầu là var MyClass = require('mymodule').MyClass

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