2

我想要的是

  1. 使用最新版本的库。
  2. 让它在 IE 11 中运行。

我正在构建一个反应应用程序,为了运行我需要@testing-library/react 的测试。为了在浏览器中运行测试,我需要 browserify。为了在我支持的每个浏览器中运行测试,我需要 babelify。然而,无论我尝试什么,babelify 什么都不做(而且 IE 11 不支持它生成的 ... 或 => 语法)。

这是 package.json 的相关部分(可能不需要某些依赖项):

      "dependencies": {
          "@babel/cli": "^7.8.4",
          "@babel/core": "^7.9.6",
          "@babel/plugin-proposal-class-properties": "^7.8.3",
          "@babel/plugin-transform-arrow-functions": "^7.8.3",
          "@babel/polyfill": "^7.8.7",
          "@babel/preset-env": "^7.9.6",
          "@babel/preset-react": "^7.9.4",
          "@testing-library/react": "^10.0.4",
          "babelify": "^10.0.0",
          "browserify": "^16.5.1",
          "react": "^16.13.1",
          "react-dom": "^16.13.1"
        },
        "browserslist": [
          "IE 11"
        ]

看起来应该可以工作的代码:

    require('browserify')({
       entries: ['./node/ReactUtil.js']
    })
    .transform("babelify", {
       presets: [['@babel/preset-env', {"targets": {
          "browsers": ["ie < 8"]
       }}]]
    })
    .bundle()
    .pipe(fs.createWriteStream("javascript/generated/ReactUtil.js"));

我试过字符串 babelify 和 require("babelify")。我试过 require("babelify").configure。我尝试在工作目录中有一个名为 babel.config.json、.babelrc 和 .babelrc.json 的文件。我在工作目录(格式不同)中尝试了 babel.config.js。(这些文件的内容已被排除以防止 tl;dr)。

生成的文件没有不同(或为空)并且没有错误。唯一给我一个错误的是:

    .transform('babelify', {
       "presets": [
          [
             "env",  //Error: Cannot find module 'babel-preset-env'. Did you mean "@babel/env"?
             {
                "targets": {
                   "browsers": [
                      "ie < 8"
                   ]
                }
             }
          ]
       ]
    })

所以我将“env”更改为“@babel/env”并且 babelify 什么也没做......转换不能在捆绑或管道之后进行,如果我尝试在此之后运行 @babel/core(输出不同的文件名),就会出现一个竞争条件,因为 browserify 还没有完成文件的写入。

我不会完全反对切换工具,但我认为 babelify 应该能够按预期工作。也许 babelify 不支持我正在使用的较新版本?我找不到针对浏览器的 babelify 文档,示例/其他堆栈溢出是旧的或不起作用。有太多可能的组合可以尝试。请注意,这在 Chrome 中运行良好,因此 browserify 部分运行良好。

4

0 回答 0