Babel 6- ›7: Ошибка неизвестна: неожиданный токен (оператор распространения)

Я перехожу с babel 6 на babel 7. Я получаю некоторые ошибки, которые не могу исправить.

unknown: Неожиданный токен (хотя я использую @ babel / plugin-offer-object-rest-spread).

Эта проблема возникает, когда я запускал набор юнит-тестов jest.

Журнал ошибок:

 ► yarn run test:unit
yarn run v1.13.0
$ jest --clearCache && jest --coverage=false
Cleared /tmp/jest_rs
 FAIL  test/unit/store.test.js
  ● Test suite failed to run

    unknown: Unexpected token (55:10)

      This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.
      By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".
      Here's what you can do:
       • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
       • If you need a custom transformation specify a "transform" option in your config.
       • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
      You'll find more details and examples of these config options in the docs:
      https://jestjs.io/docs/en/configuration.html
      Details:
      unknown: Unexpected token (55:10)
        53 |       mainMenu: [
        54 |         {
      > 55 |           ...this.$store.state.routes.home,
           |           ^
        56 |           type: Utils.MenuRecordType.PAGE,
        57 |           name: this.$t(`main_menu.${this.$store.state.routes.home.key}`),
        58 |           children: []

Мой babel.config.js и мой _ 3_. (Не публиковать здесь из-за ограничения переполнения стека (слишком много кода в вашем сообщении…)).

Полный код можно найти на github.


person Heziode    schedule 29.03.2019    source источник
comment
Получаете ли вы эти ошибки при создании своего сайта или просто при запуске Jest? Какую команду npm вы запускаете, чтобы запустить Jest?   -  person Matt Oestreich    schedule 30.03.2019
comment
Похоже, вам просто нужно найти правильный плагин ... попробуйте следующее: Первая ссылка,   -  person Matt Oestreich    schedule 30.03.2019
comment
Похоже, у тебя вообще нет конфигов Babel для шуток. Создать .babelrc   -  person Aldarund    schedule 30.03.2019
comment
@MattOestreich, вы даете плохую ссылку. Первая ссылка предназначена для babel 6, а не babel 7. Вторая ссылка, похоже, не совсем связана с этой проблемой.   -  person Heziode    schedule 30.03.2019
comment
@MattOestreich Эти ошибки появляются только с Jest. для теста я запускаю yarn run test:unit, который запускается: jest --clearCache && jest --coverage=false   -  person Heziode    schedule 30.03.2019
comment
@Heziode вы пробовали погуглить эту ошибку? Есть ТОННА вещей, которые вы можете попробовать. Прокрутите вниз - Другой - Другой - Stage2   -  person Matt Oestreich    schedule 30.03.2019
comment
Возможно, вам нужно добавить этот плагин в ваши env- ›test-› плагины в конфигурации babel? plugins: ["transform-vue-jsx", "@babel/plugin-transform-modules-commonjs", "@babel/plugin-proposal-object-rest-spread", "dynamic-import-node"] - или использовать вот так? plugins: ["transform-vue-jsx", "@babel/plugin-transform-modules-commonjs", "transform-object-rest-spread", "dynamic-import-node"] - Удачи!   -  person Matt Oestreich    schedule 30.03.2019
comment
@MattOestreich, нет, это ничего не меняет. Да, я уже проверял в Интернете. (Я создаю сообщение только тогда, когда не нахожу ответа на свою проблему, поэтому это очень, очень, очень редко…). Я проверил ваши ссылки, и это нельзя применить здесь, потому что устарело в babel 7. Я также безуспешно проверял babel-upgrade  -  person Heziode    schedule 31.03.2019
comment
Возможно, эта проблема возникает из-за того, что вы в настоящее время используете другой устаревшие плагины? Если вы не хотите просто попробовать их и попробовать, чтобы проверить, работают ли они, я не уверен, что мы можем предложить какую-либо помощь.   -  person Matt Oestreich    schedule 31.03.2019
comment
@MattOestreich, когда я удаляю все (babel.config.js содержит только: presets: ["@babel/preset-env"]), ошибки всегда здесь ...   -  person Heziode    schedule 31.03.2019


Ответы (1)


У меня аналогичная проблема с «неожиданным токеном ...», который является ошибкой оператора распространения для моей библиотеки @ testing-library. Даже после того, как я проверил, что все плагины применены правильно, как указано здесь и здесь, и используя babel.config.js вместо .babelrc (из-за babel7); ошибка все еще сохраняется. И загадочная часть заключается в том, что конвейер Jenkins может успешно пройти тесты для одного и того же коммита без «неожиданной ошибки токена ...».

Затем я обнаружил закономерность, согласно которой другие члены моей команды также могли запускать тесты без возникновения ошибки ... кроме меня. Мы все также используем один и тот же package-lock.json

Единственная разница в том, что я использую более старую версию nodejs и npm по сравнению с моими сверстниками.

Если для одного и того же исходного кода выполняется фиксация, другие ваши партнеры могут запустить тест, но вы. Тогда это может быть полезно:

  • npm cache clean --force
  • внутри вашей основной папки репо: rm -rf node_modules/
  • обновите свой node js (для меня как минимум до 8.11.x и выше)
  • npm install снова
  • запустите jest снова или npm run test, если вы определите это в package.json

обратите внимание, что мне не нужно обновлять npm.

person mithocondria    schedule 06.03.2020
comment
Пробовал ваше решение. В версии 8.12.X у меня другая ошибка: file.isFile не является функцией. В версии выше (12, 13) я получил ту же ошибку. - person Heziode; 24.04.2020