ES2015 "nhập" không hoạt động trong nút v6.0.0 với tùy chọn --harmony_modules


80

Tôi đang sử dụng nút v6.0.0 và muốn sử dụng ES2016 (ES6). Tuy nhiên, tôi nhận ra rằng cú pháp "nhập" không hoạt động. Không phải "nhập khẩu" là cơ bản để viết mã mô-đun trong ES2015? Tôi cũng đã thử chạy nút với --harmony_modulestùy chọn nhưng vẫn gặp lỗi tương tự về "nhập". Đây là mã.

Mã làm việc không có "nhập":

'use strict';
let sum = 0;
class Number {

  addNumber(num1, num2) {
    return num1 + num2;
  }
}
let numberObj = new Number();
sum = numberObj.addNumber(1,2);
console.log("sum of two number 1 and 2 "+ sum);

Mã hoạt động với "nhập":

server.js

'use strict';
import Number from "./Number";

let sum = 0;


let numberObj = new Number();

sum = numberObj.addNumber(1,2);
console.log("sum of two number 1 and 2 "+ sum);

Number.js

'use strict';
export default class Number {

  addNumber(num1, num2) {
    return num1 + num2;
  }
}

Tôi cũng đã kiểm tra http://node.green/ để xem es6 được hỗ trợ nhưng không thể hiểu tại sao nó không hoạt động với tùy chọn --harmony_modules. Hãy giúp tôi.


sử dụng Webpack cùng nhau Trình tải Babel
Naramsim

2
Bạn không cần babel hoặc webpack trong v6
chovy



Xem thêm bài đăng trên blog này từ tháng 9 năm 2016 giải thích những thách thức trong việc triển khai ES6 importtrong nút. Có vẻ như chúng ta vẫn còn một chặng đường dài trước khi các mô-đun ES6 xuất xưởng trong nút.
jakub.

Câu trả lời:


87

Chúng chỉ chưa được triển khai.

Node 6.0.0 sử dụng phiên bản V8 với hầu hết các tính năng của ES6 đã được hoàn thiện. Thật không may, mô-đun không phải là một trong những tính năng đã hoàn thiện.

node --v8-options | grep harmony 

cơ bản dở dang cờ hòa không thực hiện đầy đủ và thường không làm việc:

--es_staging (bật các tính năng hài hòa đáng thử nghiệm ( chỉ sử dụng nội bộ ))
--harmony (bật tất cả các tính năng hòa âm đã hoàn thiện)
--harmony_shipping (bật tất cả các tính năng hòa âm được vận chuyển)
--harmony_object_observe (bật "hài hòa Object.observe" ( trong tiến trình ))
--harmony_modules (bật "mô-đun hòa hợp" ( đang tiến hành ))
--harmony_ Chức năng_sent (bật "chức năng hòa hợp" ( đang xử lý ))
--harmony_sharedarraybuffer (bật "bộ đệm chia sẻ hòa hợp" ( đang tiến hành ))
--harmony_simd (bật "hòa âm simd" ( đang tiến hành ))
--harmony_do_expressions (bật "hòa âm do-biểu thức" ( đang xử lý ))
--harmony_iterator_close (bật "hoàn thiện trình lặp hòa hợp" ( đang tiến hành ))
--harmony_tailcalls (bật "lệnh gọi hòa âm" ( đang tiến hành ))
--harmony_object_values_entries ( cho phép "hòa hợp Object.values ​​/ Object.entries" ( đang xử lý ))
--harmony_object_own_property_descriptors (bật "hòa hợp Object.getOwnPropertyDescriptors ()" ( đang xử lý ))
--harmony_regexp_property (bật "các lớp thuộc tính unicode regexp hòa hợp" ( đang xử lý ) )
--harmony_ Chức năng_name (kích hoạt "sự hài hòa Suy luận tên hàm ")
--harmony_regexp_lookbehind (bật "hài hòa regexp lookbehind")
--harmony_species (bật "biểu tượng hòa hợp")
--harmony_instanceof (bật "hỗ trợ hài hòa")
--harmony_default_parameters (bật "thông số mặc định hài hòa")
--harmony_dest Structure_assignment (kích hoạt "phân công hủy cấu trúc hài hòa")
--harmony_destectors_bind (bật "hòa hợp hủy cấu trúc liên kết")
--harmony_tostring (bật "hòa hợp thành
Chuỗi ") --harmony_regexps (bật "tiện ích mở rộng biểu thức chính quy hòa hợp")
--harmony_unicode_regexps (bật "hòa hợp unicode regexps")
--harmony_sloppy (bật "tính năng hài hòa ở chế độ cẩu thả")
--harmony_sloppy_let (bật "hòa hợp để ở chế độ cẩu thả")
--harmony_sloppy_ Chức năng (bật "phạm vi khối chức năng cẩu thả hài hòa")
--harmony_proxies (bật "proxy hòa hợp")
--harmony_reflect (bật "API phản ánh hài hòa")
--harmony_regexp_subclass (bật "phân lớp phụ hòa hợp regexp")


13
Cảm ơn. Tôi đã nhìn thấy nó nhưng không tin rằng bản thân "nhập" là một trong những cú pháp quan trọng của es6
joy

1
@joy Vâng, hy vọng nó sẽ sớm có.
Paul

4
@KingWu Tôi vừa tìm thấy nó bằng cách chạy node --v8-options | grep harmonysau khi cập nhật lên node 6.0.0.
Paul

1
Tôi đã rất vui mừng khi biết nút 6 đi ra ngoài, và bây giờ họ đã không thực hiện một trong những tính năng quan trọng nhất ... :(
Kokodoko

1
@SuperUberDuper Sử dụng Node 7
Ali Gajani

40

Đây phải là một bình luận cho câu trả lời của @ Paulpro nhưng tôi không có đủ đại diện để đăng bình luận.

Đối với người dùng Windows , lệnh tương đương là:

node --v8-options | findstr harmony

32

Cho đến khi các mô-đun được triển khai, bạn có thể sử dụng "trình chuyển đổi" Babel để chạy mã của mình:

npm install --save babel-cli babel-preset-node6
./node_modules/.bin/babel-node --presets node6 ./your_script.js

Xem https://www.npmjs.com/package/babel-preset-node6https://babeljs.io/docs/usage/cli/

Nhược điểm : điều này có nhiều nhược điểm khác nhau, chẳng hạn như thời gian biên dịch tăng thêm, có thể là đáng kể và bây giờ bạn cần bản đồ nguồn để gỡ lỗi; chỉ nói.


16

Như đã nêu ở trên, các mô-đun ES6 chưa được triển khai.

Có vẻ như không phải là vấn đề nhỏ khi triển khai các mô-đun ES6 theo cách tương thích ngược với các mô-đun JS chung, đó là cú pháp mô-đun Node.js hiện tại.

Tuy nhiên, có một bản nháp triển khai, giới thiệu một phần mở rộng tệp mới - .mjs- cho các tệp chứa mô-đun ES6.

Ngoài ra, có một đề xuất phản đối trình bày một cách tiếp cận thay thế là khai báo tất cả các tệp có mô-đun ES6 trong package.json như sau:

{
    "modules.root": "/path/to/es6/modules"
}

1
Tôi nghĩ đây là một điểm quan trọng. "The Powers That Be" vẫn đang tranh cãi về thông số kỹ thuật, và sau đó nó phải xuất hiện trong phiên bản v8 trước khi có thể đến được Node.
Paul Everitt

1
Chỉ cần lưu ý: Bản nháp mới nhất không yêu cầu .mjsnhư một phần mở rộng, điều này tốt hơn nhiều cho khả năng tương thích.
Matthew Dean

Câu hỏi là: tôi có thể tìm thấy các mô-đun es6 này để tải xuống ở đâu?
Marc Brillault

Bài đăng trên blog này có thể là một nơi tốt để bắt đầu.
Роман Парадеев
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.