source

Jest - SyntaxError: 모듈 외부에서 Import 문을 사용할 수 없습니다.

lovecheck 2023. 3. 23. 22:51
반응형

Jest - SyntaxError: 모듈 외부에서 Import 문을 사용할 수 없습니다.

사용하고 있다jest:24.9.0create-module-app에서 글로벌하게 설치됩니다.이 파일들 중에서 저는 es6 모듈을 사용하고 있습니다.사용 시 오류는 없습니다."test": "react-scripts test"

그러나 내가 사용으로 이동했을 때jest와 함께"test": "jest --config jest.config.js",이하의 에러가 표시됩니다.

 FAIL  src/configuration/notifications.test.js
  ● Test suite failed to run

    /var/www/management/node/src/configuration/notifications.test.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import notifications from './notifications';
                                                                                             ^^^^^^

    SyntaxError: Cannot use import statement outside a module

농담은 지원되지 않습니다.ES6이 에러는 Jest를 사용하여 직접 테스트를 실행할 때 발생합니다.그렇게 뛰려면 바벨을 넣어야 돼.

다른 쪽에서는 테스트를 실행할 때react-scripts뒤에서 바벨을 사용하여 코드를 변환합니다.

새로운 버전의 농담에서는babel-jest이제 Jest에 의해 자동으로 로드되고 완전히 통합됩니다.

이것이 당신의 질문에 답하길 바랍니다.

농담으로 바벨을 추가하다.

인스톨

babel-jest이제 Jest에 의해 자동으로 로드되고 완전히 통합됩니다.이 절차는 babel-jest를 사용하여 TypeScript 파일을 변환하는 경우에만 필요합니다.

npm install --save-dev babel-jest

사용.

고객님의 고객명package.jsonfile은 다음과 같이 변경합니다.

{
  "scripts": {
    "test": "jest"
  },
  "jest": {
    "transform": {
      "^.+\\.[t|j]sx?$": "babel-jest"
    }
  }
}

만들다.babelrc컨피규레이션파일

작성하다babel.config.json프로젝트 루트에서 구성 및 활성화presets.

시작하기 전에 ES2015+에 대한 변환을 활성화하는 env 사전 설정을 사용할 수 있습니다.

npm install @babel/preset-env --save-dev

사전 설정을 활성화하려면 사전 설정을babel.config.json다음과 같은 파일:

{
  "presets": ["@babel/preset-env"]
}

자세한 내용은 Babel 공식 사이트에서 확인하세요.

위의 답변에서 설명한 바와 같이 Jest는 ES6 모듈을 지원하지 않습니다.따라서 코드를 지원되는 모듈 유형으로 변환해야 합니다.우리는 이용할 수 있다.babel-jest또는ts-jest를 사용하는 것을 추천합니다.ts-jest심플하게.

순서 1: 설치:

npm i -D ts-jest @types/jest또는yarn add --dev ts-jest @types/jest

순서 2: 설정

옵션 1: 재스트 컨피규레이션파일 생성jest.config.js

module.exports = {
    transform: {
        '^.+\\.(ts|tsx)$': 'ts-jest',
    },
};

옵션 2: 재스트 설정 추가package.json

"jest": {
    "transform": {
        "^.+\\.(ts|tsx)$": "ts-jest"
    }
}

스텝 3: 스크립트를 실행합니다.이제 모든 것이 준비되어야 한다.

joke는 esmodules에서는 잘 동작하지 않기 때문에, 이러한 설정을 에 추가할 필요가 있습니다.jest.config.js제스트에게 공통의 말을 쓰라고 하다대신 JS 빌드

moduleNameMapper : {
        '^react-dnd$': 'react-dnd/dist/cjs',
        '^react-dnd-html5-backend$': 'react-dnd-html5-backend/dist/cjs',
        '^dnd-core$': 'dnd-core/dist/cjs',
}

ECMAScript와 함께 Typescript를 사용하는 경우.가장 간단한 해결책은 TypeScript 프리프로세서인 ts-jest를 사용하는 것입니다.

  1. 설치하다
npm i -D ts-jest @types/jest
  1. 테스트 실행
jest

npm, github

에러

SyntaxError: Cannot use import statement outside a module

또, 다음의 Import 라이브러리로부터도 입수할 수 있습니다.node_modules,예를들면

...\node_modules\node-fetch\src\index.js:9
    import http from 'node:http';
    ^^^^^^

내게 요령이었던 건,transformIgnorePatterns옵션을 지정합니다.

transformIgnorePatterns: [
    'node_modules/(?!' + 
        [
            'node-fetch',
            'fetch-blob',
            'data-uri-to-buffer',
            'jest-runtime',
            'formdata-polyfill'
        ].join('|') +
    ')',
],

도 참조해 주세요.

es6를 사용하는 node_modules에서 jest를 설정하는 방법

리액트 스크립트를 사용하여 테스트 실행 시 동일한 오류가 발생하였습니다.패키지의 라인을 변경하여 이 문제를 해결할 수 있었습니다.json

"test": "react-scripts test",

로.

"test": "NODE_OPTIONS=--experimental-vm-modules react-scripts test",

이 해결 방법을 나타내는 링크를 제공하는 오류 메시지에서 다음을 수행합니다.

Here's what you can do:
 • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.

제가 이 문제를 어떻게 쉽게 일으켰는지 덧붙이고 싶었습니다.모든 *.js를 .gitignore에 포함시킴으로써 jeast.config.js 파일을 커밋할 수 없게 되었습니다.CI가 실행될 때마다 이 오류가 발생합니다.는 repo에 버전 제어된 jeast.config.js가 없었기 때문입니다.조심해, 얘들아! 냉정하게 있어.

언급URL : https://stackoverflow.com/questions/59879689/jest-syntaxerror-cannot-use-import-statement-outside-a-module

반응형