Node에서.js에서 기본 ES 모듈 방법 사용

2720 단어
버전 8.5.0부터 Node.js에서 기본 ES 모듈을 지원하기 시작했습니다. 명령줄 옵션을 통해 이 기능을 열 수 있습니다.새로운 기능은 대부분 Bradley Farias 덕분입니다.
1. 프레젠테이션
이 예제의 코드 디렉토리 구조는 다음과 같습니다.

esm-demo/
 lib.mjs
 main.mjs

lib.mjs:

export function add(x, y) {
 return x + y;
}

main.mjs:

import {add} from './lib.mjs';
console.log('Result: '+add(2, 3));

실행 프레젠테이션:

$ node --experimental-modules main.mjs
Result: 5

2. 리스트: 주의해야 할 일
ES 모듈:
・모듈을 동적으로 가져올 수 없습니다.그러나 동적 import () 와 관련된 작업이 진행 중이므로 곧 지원을 제공할 수 있을 것입니다.
/메타 변수 없음, 예dirname 및filename.그러나 비슷한 기능의 제안이 하나 있다.'import.meta'.이 가능하다, ~할 수 있다,...

console.log(import.meta.url);

・현재 모든 모듈 식별자는 URL입니다(이 부분은 Node.js에 추가됨).
・ 파일 - 파일 확장자가 있는 상대 경로:./util/tools.mjs
/라이브러리 - 파일 확장자도 없고 경로lodash도 없음
• npm 라이브러리를 브라우저에서도 사용할 수 있도록 하는 방법은 아직 관찰할 필요가 있다.일종의 가능성은 RequireJS 스타일의 설정 데이터를 도입하여 경로를 실제 경로에 비추는 것이다.현재 브라우저에서bare path의 모듈 식별자를 사용하는 것은 불법입니다.
CJS 모듈과의 상호 운용성
CJS 모듈을 가져올 수 있지만, 기본 내보내기 - 즉 모듈만 가져옵니다.exports의 값입니다.CJS 모듈에서 이름 지정 내보내기를 지원하도록 하는 것은 이미 진행 중이지만 시간이 걸릴 수 있습니다.만약 네가 도울 수 있다면 할 수 있다.

import fs1 from 'fs';
console.log(Object.keys(fs1).length); // 86
import * as fs2 from 'fs';
console.log(Object.keys(fs2)); // ['default']

· ES 모듈에서 Require()를 사용할 수 없습니다.주요 원인:
・경로 분석 작업은 약간 다릅니다. ESM에서 NODE 을 지원하지 않습니다.PATH 및 Require.extensions.또한 URL이 항상 식별자여서 약간의 차이가 발생할 수 있습니다.
·ES 모듈은 항상 비동기식으로 로드되므로 웹과의 최대 호환성을 보장합니다.이 로드 스타일은 Require() 블렌드를 통해 동시 로드 CJS 모듈을 사용할 수 없습니다.
· 동기화 모듈 불러오는 것을 금지하고 Top-level await에 ES 모듈을 가져올 수도 있습니다. (현재 고려 중인 기능)
3. 이전 버전의 Node.js의 ES 모듈
8.5.0 이전의 Node를 사용하려면js 버전에서는 ES 모듈을 사용합니다. John-david Dalton의 @std/esm을 참조하십시오.
팁: 잠금 해제 가능한 추가 기능을 사용하지 않으면 Node.js는 100% 기본 ES 모듈과 호환됩니다.
FAQ
ES 모듈은 명령줄 옵션 없이 언제 사용할 수 있습니까?
현재의 계획은 Node에 있다.ES 모듈은 js 10 LTS에서 기본적으로 사용할 수 있습니다.
한층 더 읽다
Node에 관하여.js 및 브라우저의 ES 모듈에 대한 추가 정보:
 ・ “Making transpiled ES modules more spec-compliant” [using ES modules natively vs. transpiling them via Babel]
 ・ “Module specifiers: what's new with ES modules?” [Why .mjs? How are module specifiers resolved? Etc.]
 ・ “Modules” [in-depth chapter on ES modules in “Exploring ES6”]
ECMAScript 제안:
・블로그: "ES proposal: import() ㎡ C dynamically importing ES modules"
· 제안: "import.meta"
총결산
지금까지 Node에서 여러분들께 들려드렸습니다.js에서 원생 ES 모듈 방법으로 해석한 모든 내용을 도움이 되었으면 합니다.만약 무슨 문제가 있으면 저에게 메시지를 남겨도 됩니다.여러분의 본 사이트에 대한 지지에 감사 드립니다.

좋은 웹페이지 즐겨찾기