>

노드 8.9.1을 설치했습니다 (v10.5.0에서 동일한 문제가 발생 함).

.mjs 가있는 파일의 npm 패키지에서 명명 된 가져 오기를 사용하려고합니다.

import { throttle } from lodash;

내가 달린다 :

node --experimental-modules index.mjs

그리고 나는 얻는다 :

와이즈 비즈

SyntaxError: The requested module 'lodash' does not provide an export named 'throttle' at ModuleJob._instantiate (internal/modules/esm/module_job.js:80:21)

  v10 LTS에서 실험을 중단 해야합니다. 더 많은 모듈 작성자가 악 대차를 뛰어 넘었습니까?

--experimental-modules

  • 답변 # 1

    --experimental-modules  아직 명명 된 내보내기를 지원하지 않습니다 :

    와이즈 비즈

    https://github.com/apollographql/graphql-tools/issues/913

    이렇게하면 구문을 사용할 수 없습니다 :

    --experimental-modules doesn't support importing named exports from a commonjs module (except node's own built-ins).

    (현재는 최소한) 필요한 것을 파괴해야합니다 :

    import { throttle } from 'lodash';
    
    

    어쩌면 언젠가 노드는 모든 ES 모듈 기능에 대한 지원을 추가 할 것입니다.

  • 답변 # 2

    import lodash from 'lodash'; const { throttle } = lodash; 를 사용해야합니다  확장 프로그램.

    와이즈 비즈

    참조 : https://nodejs.org/api/esm.html

    업데이트 :

    아직 메서드를 내 보내지 않은 것 같습니다.

    내가 .mjs 를 가지고 있다고 가정  내용 포함

    Once this has been set, files ending with .mjs will be able to be loaded as ES Modules.

    나는 hello.mjs 에서 그것을 사용할 수 있습니다  이처럼

    export function sayHello() {
        console.log('hello')
    }
    
    

  • 답변 # 3

    lodash가 모듈로 작성된 경우 index.mjs  수출 import {sayHello} from './hello.mjs' sayHello() : lodash/index.mjs , 그러면 당신은 throttle 할 수있을 것입니다

    여기서의 문제는 commonjs에는 명명 된 내보내기와 같은 것이 없다는 것입니다. 이는 commonjs 모듈에서 한 가지만 내보내는 것을 의미합니다.

    lodash는 export const throttle = ...; 라는 속성을 포함하는 객체를 내 보낸다고 생각합니다. .

    질문의 두 번째 부분에서는 사람들이 더 이상 실험을하지 않으면 천천히 ES 모듈을 채택하기 시작할 것입니다. 이 글을 쓰는 시점에는 여전히 (Node.js v11.14)입니다.

    import { throttle } from lodash;

  • 이전 C #의 SQL 내부 조인 문
  • 다음 html - 웹 페이지를 편집하여 로컬로 표시하는 방법