我想要的是
- 使用最新版本的库。
- 让它在 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 部分运行良好。