我想要的是
- 使用最新版本的库。
- 让它在 IE 11 中运行。
我正在构建一个 React 应用程序,为了运行测试,我需要 @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 部分工作正常。