--harmony_modules 옵션을 사용하여 노드 v6.0.0에서 ES2015 "가져 오기"가 작동하지 않음


80

노드 v6.0.0을 사용하고 있으며 ES2016 (ES6)을 사용하고 싶었습니다. 그러나 "가져 오기"구문이 작동하지 않는다는 것을 깨달았습니다. ES2015에서 모듈 코드를 작성하기 위해 "가져 오기"가 기본이 아닙니까? --harmony_modules옵션으로 노드를 실행하려고했지만 "가져 오기"에 대해 동일한 오류가 발생했습니다. 여기에 코드가 있습니다.

"가져 오기"가없는 작업 코드 :

'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);

"가져 오기"로 작동하지 않는 코드 :

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;
  }
}

또한 http://node.green/ 을 확인하여 지원되는 es6를 확인했지만 --harmony_modules 옵션과 함께 작동하지 않는 이유를 이해할 수 없었습니다. 도와주세요.


사용 웹팩 함께 바벨 로더
Naramsim

2
v6에서는 바벨이나 웹팩이 필요하지 않습니다
chovy



노드에서 ES6 를 구현할 때의 과제를 설명하는 2016 년 9 월 의이 블로그 게시물 도 참조하십시오 import. ES6 모듈이 노드로 배송되기까지는 아직 먼 길인 것 같습니다.
jakub.g 2016

답변:


87

아직 구현되지 않았습니다.

Node 6.0.0은 대부분의 ES6 기능이 완료된 V8 버전을 사용합니다. 불행히도 모듈은 완성 된 기능 중 하나가 아닙니다.

node --v8-options | grep harmony 

진행중인 조화 플래그가 완전히 구현되지 않았으며 일반적으로 작동하지 않습니다.

--es_staging (테스트 할만한 하모니 기능 활성화 ( 내부 전용 ))
--harmony (완성 된 모든 하모니 기능
활성화 ) --harmony_shipping (제공된 모든 하모니 기능
활성화 ) --harmony_object_observe ( "harmony Object.observe"활성화 ( in progress ))
--harmony_modules ( "harmony modules"활성화 ( 진행 중 ))
--harmony_function_sent ( "harmony function.sent"활성화 ( 진행 중 ))
--harmony_sharedarraybuffer ( "harmony sharedarraybuffer 활성화 ( 진행 중 )))
--harmony_simd ( "harmony simd"활성화 ( 진행 중 ))
--harmony_do_expressions ( "harmony do-expressions" 활성화 ( 진행 중 ))
--harmony_iterator_close ( "조화 반복기 종료"활성화 ( 진행 중 ))
--harmony_tailcalls ( "하모니 테일 호출"활성화 ( 진행 중 ))
--harmony_object_values_entries ( "harmony Object.values ​​/ Object.entries" 활성화 ( 진행 중 ))
--harmony_object_own_property_descriptors ( "harmony Object.getOwnPropertyDescriptors ()" 활성화 ( 진행 중 ))
--harmony_regexp_property ( "하모니 유니 코드 정규 표현식 속성 클래스"활성화 ( 진행 중 )) )
--harmony_function_name ( "하모니 함수 이름 추론 ")
--harmony_regexp_lookbehind ( "harmony regexp lookbehind"
활성화 ) --harmony_species ( "harmony Symbol.species"
활성화 ) --harmony_instanceof ( "harmony instanceof support"
활성화 ) --harmony_default_parameters ( "harmony default parameters"
활성화) "harmony destructuring assignment")
--harmony_destructuring_bind ( "harmony destructuring bind"
활성화 ) --harmony_tostring ( "harmony toString"
활성화 ) --harmony_regexps ( "harmony 정규 표현식 확장"
활성화 ) --harmony_unicode_regexps ( "harmony unicode regexps"활성화)
--harmony_sloppy ( "조잡한 모드에서 조화 기능 활성화")
--harmony_sloppy_let ( "조잡한 모드에서 하모니 렛"활성화)
--harmony_sloppy_function ( "조잡한 기능 블록 범위 지정"
활성화 ) --harmony_proxies ( "조화 프록시"
활성화 ) --harmony_reflect ( "harmony Reflect API"
활성화 ) --harmony_regexp_subclass ( "조화 정규식 하위 분류"활성화)


13
감사. 나는 그것을 보았지만 "import"가 es6의 중요한 구문 중 하나라고 믿지 않았습니다
joy

1
@joy 예, 곧 사용할 수 있기를 바랍니다.
Paul

4
@KingWu로 node --v8-options | grep harmony업데이트 한 후 실행하여 방금 찾았습니다 node 6.0.0.
Paul

1
노드 6이 나왔다는 소식을 듣고 너무 기뻤습니다. 이제 가장 중요한 기능 중 하나를 구현하지 않았습니다. :(
Kokodoko

1
@SuperUberDuper 사용 노드 7
알리 Gajani

40

@Paulpro의 답변에 대한 댓글이어야하지만 댓글을 게시 할 충분한 담당자가 없습니다.

들어 윈도우 사용자에 해당하는 명령은 다음과 같습니다

node --v8-options | findstr harmony

32

모듈이 구현 될 때까지 Babel "transpiler" 를 사용하여 코드를 실행할 수 있습니다.

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

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

단점 : 여기에는 추가 컴파일 시간과 같은 다양한 단점이 있으며 이는 중요 할 수 있으며 이제 디버깅을위한 소스 맵이 필요합니다. 그냥 말해.


16

위에서 언급했듯이 ES6 모듈은 아직 구현되지 않았습니다.

현재 Node.js 모듈 구문 인 Common JS 모듈과 역 호환되는 방식으로 ES6 모듈을 구현하는 것은 사소한 문제로 보입니다.

그러나 ES6 모듈을 포함하는 파일에 대해 새로운 파일 확장자를 도입하는 구현 초안.mjs있습니다.

또한 package.json에서 ES6 모듈이있는 모든 파일을 다음과 같이 선언하는 대안적인 접근 방식을 제시하는 반대 제안 이 있습니다.

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

1
이것이 중요한 점이라고 생각합니다. "The Powers That Be"는 여전히 스펙에 대해 논쟁 중이며 Node.js에 도달하기 전에 v8에 나타나야합니다.
Paul Everitt 2016 년

1
참고 사항 : 최신 초안은 .mjs확장 기능이 필요하지 않으므로 호환성이 훨씬 좋습니다.
Matthew Dean

질문 : 다운로드 할 es6 모듈을 어디에서 찾을 수 있습니까?
Marc Brillault 2017 년

블로그 게시물 은 시작하기에 좋은 곳일 수 있습니다.
Роман Парадеев
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.