【问题标题】:support for the experimental 'jsx' isn't currently enabled当前未启用对实验性“jsx”的支持
【发布时间】:2020-10-23 11:15:12
【问题描述】:

所以我没完没了地在网上搜索来解决这个问题。

"support for the experimental 'jsx' isn't currently enabled...
Add @babel/preset-react to the 'presets' section of your Babel config to enable transformation.
If you want to leave it as-is, add @babel/plugin-syntax-jsx to the 'plugins' section to enable parsing."

所以我有很多(比如 100 个)这样的错误,所以我将 .babelrc 和 .babel.config.js 更改为如下所示:

{
test: /\.jsx?$/,
exclude: [/node_modules/],
use: [
{
    loader: 'babel-loader',
    options: {
    presets: [
        '@babel/preset-env',
        '@babel/preset-react',{
        'plugins': [
            ["@babel/plugin-proposal-class-properties", { "loose": true }]
        ]}]
    }
}]}

和配置:


"presets": [
    "react",
    "@babel/preset-env",
    "@babel/preset-typescript",
    "@babel/preset-react"
  ],
  "plugins": [
  [
    "@babel/plugin-proposal-class-properties",
      {
        "loose": true
      }
  ],
  [
    "@babel/plugin-transform-runtime",
    {
      "regenerator": true
    }
  ]
  ]

解决了大部分错误。

但是我一直看到 5 个文件出现同样的错误 -> 这 5 个文件与之前抛出完全相同错误的 100 个文件之间没有明显差异。

根据其他堆栈溢出答案和互联网的建议,我更改了我的 .babelrc 和 config.js:

{
test: /\.jsx?$/,
exclude: [/node_modules/],
use: [
{
    loader: 'babel-loader',
    options: {
    presets: [
        '@babel/preset-env',
        '@babel/preset-react',
        '@babel/preset-typescript',{
        'plugins': [
            ["@babel/plugin-proposal-decorators", { "legacy": true }],
            "@babel/plugin-syntax-dynamic-import",
            "@babel/plugin-transform-regenerator",
            ["@babel/plugin-transform-runtime", {helpers: false, regenerator: true}],
            ["@babel/plugin-proposal-class-properties", { "loose": true }]
        ]}]
    }
}]}

和配置:


"presets": [
    "react",
    ["@babel/preset-env",
    {
      "targets": {
        "esmodules": true,
        "node" : "current"
      },
    }
    ],
    "@babel/preset-typescript",
    "@babel/preset-react"
  ],
  "plugins": [
  [
    "@babel/plugin-proposal-class-properties",
      {
        "loose": true
      }
  ],
  [
    "@babel/plugin-transform-runtime",
    {
      "regenerator": true
    }
  ]
  ]

我尝试了这些包的许多不同组合,每次添加一个以查看它是否会构建或更改任何内容,但没有任何改变。我还尝试将@babel/plugin-syntax-jsx 添加到插件中,但它似乎也不起作用。

我也尝试过将 @babel 包放入 .babelrc 中,但这也不起作用。

还有其他我可以尝试包含或使用的软件包吗?或者可能会更改这些文件的包的设置?

编辑:package.json 依赖项包括:

"@babel/runtime": "^7.10.4",
"@babel/cli": "^7.10.4",
"@babel/core": "^7.10.4",
"@babel/plugin-proposal-class-properties": "^7.10.4",
"@babel/plugin-proposal-decorators": "^7.10.4",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-jsx": "^7.10.4",
"@babel/plugin-transform-runtime": "^7.10.4",
"@babel/preset-env": "^7.10.4",
"@babel/preset-react": "^7.10.4",
"@babel/preset-typescript": "^7.10.4",
"core-js": "^3.6.5",
"react": "^16.0.0",
"react-dom": "^16.0.0",

【问题讨论】:

  • 你解决了这个问题吗?我现在也面临同样的问题
  • 有人解决了这个问题吗?
  • 这个运气好吗?我在这方面还没有任何进展。
  • 遇到了同样的问题,更改运行 jest 的路径并切换回来解决了我的问题。示例首先我遇到了npx jest paht/to/test/file.js 的问题,我确实更改了路径,然后再次运行该命令。似乎以某种方式开玩笑缓存。不确定
  • 我最终制作了一个 webpack.config.file 使用 module.exports = {.....module: {rules: [... 格式化。就像 Drews 在下面使用 babel.config.js 的第一个答案一样。据我了解,导出有助于公开配置。 tutorialsteacher.com/nodejs/….

标签: reactjs webpack jsx babeljs


【解决方案1】:

您是在 node_modules 文件夹中运行它吗?如果是这样,您需要更改

exclude: [/node_modules/],

所以它不会排除您的项目。

它应该变成类似

的东西
exclude: [/node_modules/ &&
        !/node_modules\/(project_name)/],

但使用正确的正则表达式语法并将 project_name 更改为文件夹名称。

【讨论】:

    【解决方案2】:

    我一定尝试过很多不同的方法。分享对我有用的东西。请注意版本,不同的版本可能需要调整。

    我的 react 项目是使用 create-react-app (CRA) 创建的。现在由于 CRA 隐藏了 babel 和 webpack 的配置文件并且没有办法修改它们,所以基本上有两种选择:

    • react 弹出(我没有尝试过。感觉自己管理所有内容可能会有点不知所措)。
    • 使用react-app-rewired 调整 babel 配置,而无需退出。 (我用过这个)

    我另外使用了customize-cra。 React-app-rewired 建议将其用于更高版本的 CRA。

    更新脚本并在 package.json 中添加开发依赖项:

     "scripts": {
        "start": "react-app-rewired start",
        "build": "react-app-rewired build",
        "test": "react-app-rewired test",
        "eject": "react-scripts eject",
        "docs": "jsdoc -c jsdoc.conf.json"
      },
    "devDependencies": {
        "@babel/plugin-proposal-class-properties": "^7.10.1",
        "customize-cra": "^1.0.0",
        "react-app-rewired": "^2.1.6",
        "@babel/preset-react": "^7.10.1"
      }
    

    config-overrides.js(必须在根级别,即在 package.json 的同一目录级别)。

    如果错误来自 node_modules 中的某个库,请确保“包含”它 (babelInclude):

    const path = require('path');
    const {
        override,
        babelInclude,
        addBabelPreset,
        addExternalBabelPlugin,
    } = require('customize-cra');
    
    module.exports = override(
        babelInclude([
            path.resolve('src'),
            path.resolve('node_modules/react-native-animatable'),
        ]),
        addBabelPreset("@babel/preset-react"),
        addExternalBabelPlugin('@babel/plugin-proposal-class-properties'),
    );
    

    【讨论】:

      【解决方案3】:

      用这个脚本创建一个 babel.config.js 解决了我的问题

      module.exports = {
          presets:[
              "@babel/preset-env",
              "@babel/preset-react"
          ]
      }
      

      【讨论】:

      • 很高兴知道它对您有用,但为什么它是正确的解决方案(至少不适合我),您在哪里找到它,可能有一个来源有助于理解问题,而不仅仅是复制和粘贴解决方案。
      • 这在我使用 Netlify 入门模板部署 Hugo 静态网站时对我有用。我也遇到了同样的错误。
      • 我做了一个webpack.config.js,但真正重要的似乎是module.exports。我知道这有助于将配置公开为一个模块,我想这是在幕后需要的。
      • 我正在关注一本教程书,甚至在 github 上,这本书的最新代码根本没有 babel.config.js 文件。但是只需将文件添加到我的项目根目录并粘贴到上述解决方案中就可以解决我的问题。我想知道那babelrc、babel.config.js有什么区别?
      • 我发现了真正的问题:我将 babelrc 命名为没有句点:.babelrc 然后我删除了 babel.config.js 的内容,我的项目仍然使用 ǹpm start` "dot" 构建babelrc 包含这个{ "presets": [ [ "@babel/preset-env", { "targets": { "node": "current" } } ], "@babel/react" ] } 我终于明白 .bashrc、vimrc 等都是隐藏文件,所以按照定义 babelrc 应该也是。
      【解决方案4】:

      这对于我们刚开始使用 React 的后端工程师来说是很困难的,他们在社区 3 或 4 年的时间里反复尝试解决 create-react-app 的基本问题。在与已弃用的软件包和建议进行了一整周的死胡同后,我了解到您根本不需要需要react-app-rewired

      这是我的答案(希望能帮助其他关注相同谷歌兔子洞的人):在您的 package.json 中定义这些:

        "main": "./build/index.js",
        "module": "./build/index.js",
        "devDependencies": {
          "@babel/cli": "^7.14.3",
          "@babel/core": "^7.14.3",
          "@babel/preset-env": "^7.14.4",
          "@babel/preset-react": "^7.13.13",
          "commander": "^7.2.0",
          ...
        },
        "scripts": {
          ...
          "transpile": "NODE_ENV=production npx babel --out-dir ../build --relative --copy-files src",
        },
        "babel": {
          "presets": [
            "@babel/preset-env",
            "@babel/preset-react"
          ]
        },
      

      npm transpile ; npm publish 命令现在应该可以工作了。我发现由于 Utku Gultopu 描述的here 的问题,yarn 的用户需要事先执行此操作才能从 babel 6 完全升级到 7:

      npm install @babel/core @babel/cli @babel/preset-react @babel/preset-env
      

      您不需要任何这些:webpack.config.js.babelrcbabel.config.js。在运行build(用于创建运行时映像)或transpile(用于发布模块库)操作之前,请务必清除build 子目录(并将其包含在.gitignore 中)——它们是两个非常不同的东西。

      【讨论】:

        猜你喜欢
        • 2020-11-10
        • 2021-05-17
        • 2020-10-30
        • 2021-04-11
        • 1970-01-01
        • 2021-02-05
        • 1970-01-01
        • 1970-01-01
        • 2021-04-16
        相关资源
        最近更新 更多