Что я делаю не так в моем файле ESLint, чтобы не было предупреждений об импорте?

Прочитав несколько вопросов и ответов по моей проблеме:

Ошибка синтаксического анализа: "импорт" и "экспорт" могут появляться только с "sourceType: module"

Я написал свой .eslintrc.json по адресу:

{
  "extends": ["airbnb", "prettier", "plugin:node/recommended"],
  "plugins": ["prettier"],
  "env": {
    "node": true,
    "es6": true,
    "browser": true
  },
  "parser": "babel-eslint",
  "parserOptions": {
    "ecmaVersion": 11,
    "sourceType": "module",
    "allowImportExportEverywhere": true
  },
  "rules": {
    "prettier/prettier": "error",
    "spaced-comment": "off",
    "no-console": "warn",
    "consistent-return": "off",
    "func-names": "off",
    "object-shorthand": "off",
    "no-process-exit": "off",
    "no-param-reassign": "off",
    "no-return-await": "off",
    "no-underscore-dangle": "off",
    "class-methods-use-this": "off",
    "prefer-destructuring": ["error", { "object": true, "array": false }],
    "no-unused-vars": ["error", { "argsIgnorePattern": "req|res|next|val" }],
    "semi": [2, "never"],
    "object-curly-spacing": [2, "always"]
  }
}

используя devDependencies:

  "devDependencies": {
    "babel-eslint": "^10.0.3",
    "eslint": "^6.4.0",
    "eslint-config-airbnb": "^18.0.1",
    "eslint-config-prettier": "^6.3.0",
    "eslint-plugin-import": "^2.18.2",
    "eslint-plugin-jsx-a11y": "^6.2.3",
    "eslint-plugin-node": "^10.0.0",
    "eslint-plugin-prettier": "^3.1.1",
    "eslint-plugin-react": "^7.14.3",
    "eslint-plugin-react-hooks": "^1.7.0",
    "nodemon": "^1.19.3",
    "prettier": "^1.18.2"
  },

а также настройку моего движка:

  "engines": {
    "node": "^10"
  }

Когда я пишу тестовый модуль с помощью Babel:

export default class Search {
  constructor() {
    alert('search test')
  }
}

Я получаю предупреждение:

Объявления импорта и экспорта пока не поддерживаются. Eslint(node ​​/no-unsupported-features/es-syntax)

Почему мои настройки не работают? Я мог бы написать игнорированиеmodules/в файле .eslintignore, но я хотел бы знать, почему я получаю это предупреждение и как я могу его правильно решить?

4 ответа

Решение

У меня была такая же проблема, удаление "plugin:node/recommended"сделал это для меня. Надеюсь это поможет!

Вероятно, есть лучший способ сделать это, но это сработало для меня.

      {
  "extends": ["airbnb", "prettier", "plugin:node/recommended"],
  "plugins": ["prettier"],
  "rules": {
    "prettier/prettier": "error",
    "spaced-comment": "off",
    "no-console": "warn",
    "consistent-return": "off",
    "func-names": "off",
    "object-shorthand": "off",
    "no-process-exit": "off",
    "no-param-reassign": "off",
    "no-return-await": "off",
    "no-underscore-dangle": "off",
    "class-methods-use-this": "off",
    "prefer-destructuring": ["error", { "object": true, "array": false }],
    "no-unused-vars": ["error", { "argsIgnorePattern": "req|res|next|val" }],
    "node/no-unsupported-features/es-syntax": [
      "error",
      {
        "version": ">=13.0.0",
        "ignores": ["modules"]
      }
    ],
    "import/extensions": [
      "error",
      {
        "js": "ignorePackages"
      }
    ]
  },
  "parserOptions": {
    "sourceType": "module"
  }
}

Ключевым здесь является правило «узел/нет неподдерживаемых функций/es-синтаксис». Все, что я здесь делаю, это переопределяю это правило, добавленное 'plugin:node/recommended', чтобы разрешить синтаксис модулей ES.

Как сказал @joan Gil, попробуйте использовать "type":"module"на вашей package.json(пока вы используете node> 12)

Проверьте свой файл .eslintrc. Это может быть из-за узла/рекомендуемого плагина. "extends": ["plugin:node/recommended"]

Другие вопросы по тегам