- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试配置 babel preset-env 以针对指定的目标浏览器列表自动注入(inject) polyfill。
文档指出,使用 "useBuiltIns": "usage"
形式的属性配置 preset-env
预设将执行此操作。
(我注意到单独指定这个属性会导致在控制台中显示警告,然而,声明我应该指定要使用的 core-js 版本,所以我也添加了这个。)
因此,我的 babel.config.js
看起来像这样:
module.exports = {
"presets": [
"@babel/preset-react",
"@babel/preset-typescript",
[
"@babel/preset-env",
{
"useBuiltIns": "usage",
"corejs": 3
}
]
],
"plugins": ['macros'],
};
太棒了!这应该是轻而易举的事!
但是,在使用 webpack 重新编译后,我的应用程序现在在浏览器中停止运行,控制台消息为:
Uncaught TypeError: __webpack_require__(...) is not a function
at Module../node_modules/webpack/buildin/harmony-module.js (harmony-module.js:24)
我做了一些研究(只花了大约 3 个小时!),我知道这是 babel 试图转译 babel 或类似的东西的结果......我需要将一些文件添加到列表中忽略可能不会被转译或双重转译的内容。
在我的 webpack 配置中,我放置了以下内容。 (注意排除条目)。
module: {
rules: [
{
test: /\.(js|jsx|ts|tsx)$/,
exclude: [/core-js/, /regenerator-runtime/],
use: [
{
loader: 'babel-loader',
options: {
presets: babelConfig.presets,
cacheDirectory: babelCacheDir
}
},
'eslint-loader'
]
}
]
}
我也尝试在忽略模式上添加一些变体,但我仍然遇到致命的控制台错误。
我尝试过的另一件事是忽略 node_modules
文件夹,但是我有大块代码根本没有转译。即在 IE11 中,我收到有关 ES6 箭头函数的语法错误,这些错误源自未转译的 vendor 脚本。
如果有人能够解释为什么 __webpack_require__
以不受欢迎的方式被改变,我将非常感激,因为这个问题所需的确切解决方案是非常难以研究的。
编辑:following建议必须让babel忽略core-js
,这似乎很合理。它建议在 babel 配置文件中使用以下内容:
{
ignore: [
/\/core-js/,
],
sourceType: "unambiguous",
presets: [
['@babel/preset-env', { modules: false, useBuiltIns: 'usage' }],
],
}
但是,这会导致另一个看似非特定的错误出现:
has.js:4 Uncaught TypeError: Cannot convert undefined or null to object
at hasOwnProperty (<anonymous>)
at push../node_modules/core-js/internals/has.js.module.exports (has.js:4)
最佳答案
useBuiltins: "usage"
下,Babel 需要进行猜测。 ES6 与 CJS 导入样式;并且它最好使用与 Webpack 相同的方式进行猜测。这在 the Babel docs 中有非常简要的介绍。 .正如所解释的那样,实现这一目标的最简单方法 elsewhere , 也是在传递给 @babel/preset-env
的选项中设置 sourceType: "unambiguous"
。
尽我所能回答“为什么”的问题:
useBuiltIns: "usage"
表示 Babel 将着手寻找和 polyfill一些浏览器中可能不存在的方法调用(和其他 JS 构造)。这需要在 Babel 重写时将一些修复代码注入(inject)到您的模块中。core-js
片段以确保 Array 等原型(prototype)的填充令人满意;例如Babel 可能会插入诸如 import "core-js/modules/es.array.map.js";之类的东西
import
语句添加到使用 require()
或 module.exports
的代码中。直到 Babel 和 Webpack 就 ES6/CJS 阻抗不匹配的论文达成某种约定或 secret 握手之前,作为模块作者,您必须以某种方式确保 Babel 和 Webpack 具有相同的想法源文件使用哪种格式;或者只是为你的“旧”(CJS)代码禁用 Babel,无论是在 node_modules/
还是其他地方。
关于webpack - 为什么使用 babel preset-env with `useBuiltIns: "usage"` 导致 harmony-module 出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60243597/
我正在为我的 React 项目设置 Webpack,并对 babel 感到困惑, babel-core , babel-loader , babel-preset-2015和babel-preset-
所有这些 babel 依赖项是什么?它们各自的用途是什么,它们有何不同?我应该为我的 nodejs 网络应用程序使用哪一个? 我已经查看了 API 网站,但是否有任何指南可以将这些内容转化为简单的人类
我的 Node Webpack 项目使用了三个 babel 库。它们之间有什么区别以及如何使用它们? "dependencies": { "babel-runtime": "^5.8.24" }
我用 @babel/core 替换了 babel-core 而 babel-loader 期望 babel-core: { "name": "myproject-ui", "version":
我尝试配置一个环境来使用 babel 和 webpack 开发 javascript。 但是我不明白关于presets的babel配置. 在 Usage Guide ,我们可以看到预设为 "@babe
我已经安装了 babel 7.5,理想情况下它应该以 preset-env 包为目标,但不确定它为什么要寻找“babel-preset-es2015”。 你们能告诉我我做错了什么吗?下面是我的代码 p
我正在更新a boilerplate中使用的babel包,从 babel-core、babel-register 等到@babel/core、@babel/register > 等 问题:在 npm
设置 通天塔 6 (^6.0.0), Node 5.4.0,Express 4.13.x, babel-node 和 babel-register 都有警告,禁止在生产环境中使用babel.io 网站
我正在尝试转换编译我的 react/es6 代码并且来自 browserify。由于新的 babel 6 版本以及大多数教程现在已经过时的事实,我正在努力创建一个 webpack 构建。这适用于我的
我有一个使用 Typescript 和 @babel/preset-env 的项目。与 Webpack 捆绑失败并显示此错误和以下配置。 如果我取消注释该行,这会强制 @babel/plugin-pr
我在浏览器中使用 babel -> babel-standalone 现在我想使用 ES decorator 语法。但是所有的通天塔doc intro 是服务器端的 babel,比如 ` { "p
我正在编写对从 cdnjs.com 引入的所有这些库的 react 。但是,我发现它报告错误:'Uncaught TypeError: Cannot read property 'keys' of u
我正在使用 babel v7.6.x 并设置了以下内容。 包.json "scripts": { "dev": "nodemon --exec babel-node bin/index.js
我正在学习巨大的 JavaScript 生态系统,但我无法理解以下内容。 Babel 是一个编译器,来自官网: Babel is a toolchain that is mainly used to
在我使用yarn add -D babel-plugin-react-relay安装relay-query插件后,并在运行开发服务器后,我收到此错误: Error: [BABEL] /Users/ne
我使用 babel 6 和 React 插件,并按照文档说明设置转译过程。我已经阅读过要让 React 工作,我需要使用 es2015 和 React preset。最初,使用这两个预设一切都运行良好
我对 Babel 选项/配置有点迷失。我想使用最新的 js 功能并编译(使用 webpack)为浏览器代码。 babel-polyfill 和有什么区别和 babel plugins与 babel-p
这个问题在这里已经有了答案: Babel file is copied without being transformed (10 个答案) 关闭 6 年前。 我只是使用 npm (npm inst
安装时 npm install browserify babelify babel-preset-es2015 我正面临以下警告信息 npm WARN deprecated babel-preset-
什么版本的标准? 12.0.1 什么操作系统、Node.js 和 npm 版本? 视窗 10, 节点 v10.15.1, NPM v.6.8.0 你期望会发生什么? 我在 devDependencie
我是一名优秀的程序员,十分优秀!