Как преобразовать модуль после запуска обычного преобразования - PullRequest
0 голосов
/ 12 сентября 2018

Тестирование компонентов React с шуткой.Некоторые из этих компонентов используют OpenLayers (ol пакет v5.2.0).В пакете ol v4 я применил transformIgnorePatterns для преобразования пакета ol:

"jest": {
    "transformIgnorePatterns": [
         "node_modules/(?!(ol)/)"
    ],
    (...)
}

Теперь я получаю следующую ошибку при запуске NODE_ENV=test jest:

(...)
(...)/node_modules/ol/index.js:5
export {default as AssertionError} from './AssertionError.js';
^^^^^^

SyntaxError: Unexpected token export

  14 |     let map = new Map({
  15 |       layers: options.layers,
> 16 |       target: 'map',
     |           ^
  17 |       view: options.view,
  18 |       controls: options.controls
  19 |     });

Я применил следующие предварительные настройкии плагины в .babelrc:

"presets": [
   ["@babel/preset-env", {
     "modules": false
    }
   ],
   "@babel/preset-react"
],
"plugins": [
    "lodash",
    ["@babel/plugin-transform-runtime", {
      "corejs": 2,
      "helpers": true,
      "regenerator": true,
      "useESModules": false
    }
  ],
  "@babel/plugin-transform-modules-commonjs",
  "@babel/transform-arrow-functions",
  "@babel/plugin-syntax-dynamic-import",
  "@babel/plugin-syntax-import-meta",
  ["@babel/plugin-proposal-class-properties", {"loose": false}],
  "@babel/plugin-proposal-json-strings"],
"env": {
    "production": {},
    "development": {},
    "test": {
      "presets": [
        ["@babel/preset-env"],
        "@babel/preset-react"
      ]
    }
  }

Аналогичная проблема решается при создании приложения путем применения опции global-transform (https://github.com/browserify/browserify#usage) см. этот поток вопросов: https://github.com/openlayers/openlayers/issues/8497.

$ browserify -g [ babelify --presets [ \"@babel/preset-env\" ] --ignore [ \"//node_modules/(?!ol/)/\" ] ] ./src/index.js -o ./public/js/bundle.js

Я хочу применить подобное преобразование к модулю ol, но не знаю, как к нему подойти. TransformIgnorePatterns, используемый для решения этой проблемы, см. https://github.com/facebook/jest/issues/2550

1 Ответ

0 голосов
/ 13 сентября 2018

Ошибка больше не возникает, если я помещаю содержимое .babelrc в babel.config.js в корне проекта.

module.exports = {
    (...)
};

ср.

побочный эффект - TypeError: $export is not a function при загрузке комплекта, созданного с помощью browserify / babelify, но ядумаю, это проблема конфигурации.

Редактировать : Побочный эффект был решен для меня путем изменения параметров для плагина "@ babel / plugin-transform-runtime" на:

{
  "corejs": false,
  "helpers": false,
  "regenerator": true,
  "useESModules": false
}

ср.https://stackoverflow.com/a/39502362/3798151 и установка @ babel / runtime cf.https://babeljs.io/docs/en/babel-plugin-transform-runtime

...