«SyntaxError: Невозможно использовать оператор импорта вне модуля» с Babel, Jest и webpack - PullRequest
2 голосов
/ 21 февраля 2020

У меня проблема с конфигурациями Babel 7, Webpack 4 и Jest. Во время выполнения тестов я получаю следующую ошибку:

SyntaxError: Невозможно использовать оператор импорта вне модуля

пакета. json

 "@babel/core": "^7.7.5",
    "@babel/highlight": "^7.8.3",
    "@babel/plugin-syntax-dynamic-import": "^7.8.3",
    "@babel/preset-env": "^7.8.4",
    "babel-core": "^7.0.0-bridge.0",
    "babel-loader": "^7.1.5",
    "@babel/plugin-transform-runtime": "^7.7.4",
    "@babel/preset-react": "^7.7.4",
    "@babel/runtime": "^7.8.4",
    "babel-jest": "^24.9.0",
    "jest-watch-typeahead": "^0.4.2",
    "vue-jest": "^3.0.5",
    "jest": "^24.9.0",
    "jest-serializer-vue": "^2.0.2",
    "jest-transform-stub": "^2.0.0",

webpack.config. js

  entry: {
      app: ["./src/index.js"]
  },
  output: {
    path: path.resolve('../', 'static/js/'), 
    filename: "[name].js",
    publicPath: '/static/js/', 
    chunkFilename: '[name].chunk.js' 
  }, 

.babelr c - я предположил, что проблема с модулем: ложь, но если я не включаю это, webpack не разбивает мои файлы на блоки.


{
  "presets": [
    ["@babel/preset-env", {"modules": false}, "jest" ]
  ],
  "plugins": [
    "@babel/plugin-syntax-dynamic-import" 
  ],
    "env": {  
      "test": {
        "plugins": ["@babel/plugin-transform-runtime"],
      }
    }
} 

Когда я удалял модуль: выполнялись ложные тесты, есть ли шансы не включить модуль: ложный в тесты?

Ответы [ 3 ]

2 голосов
/ 21 февраля 2020

Из документации Babel Options :

Примечание: параметры env [envKey] будут объединены поверх параметров, указанных в объекте root.

Таким образом, вы можете применить modules: "auto" во время тестирования, повторно выделив плагин в объекте env.test:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "modules": false
      },
      "jest"
    ]
  ],
  "plugins": [
    "@babel/plugin-syntax-dynamic-import"
  ],
  "env": {
    "test": {
      "presets": [
        [
          "@babel/preset-env",
          {
            "modules": "auto"
          },
          "jest"
        ]
      ],
      "plugins": [
        "@babel/plugin-transform-runtime"
      ]
    }
  }
}
0 голосов
/ 07 мая 2020

Начиная с jest@25.4.0, больше нет необходимости переносить код для поддержки esm в тестах, поскольку он поддерживает его изначально. Вы можете найти здесь , как этого добиться, поскольку это еще не задокументировано.

0 голосов
/ 21 февраля 2020

import операторы разрешены только в модулях ES. Ваши тесты выполняются в Node, который использует общие js модули.

Попробуйте добавить "type": "module" в ваш package.json файл

. Также проверьте версию вашего узла, вы можете найти подробнее об этом в документе docs https://nodejs.org/api/esm.html#esm_ecmascript_modules

...