Webpack 和 Babel 未转译 node_modules 内的依赖项,由于 ES6 的扩展语法,该依赖项会破坏 IE 11 和 Edge

2023-11-23

我有一个项目使用@mdx-js/runtime它在 IE 11 或 Edge 上完全崩溃(Edge 44.18362.449.0):

SCRIPT1028: SCRIPT1028: Expected identifier, string or number

它实际上因为这里的扩展语法而中断:

const allNodes = sortedNodes.map(({ start: _, ...node }, i) => { 

这行代码来自remark-mdx,这是一个依赖项@mdx-js/runtime,特别是这个文件和行:https://github.com/mdx-js/mdx/blob/master/packages/remark-mdx/extract-imports-and-exports.js#L66

我一直在尝试让 Webpack 和 Babel 转换该文件,以便传播不再存在:

浏览器列表:

如果我跑npx browserslist我可以看到 IE 11 就在那里。

"browserslist": [
    "> 0.5%",
    "last 2 version",
    "Firefox ESR",
    "not dead",
    "iOS >= 9"
]

.babelrc:

我尝试过禁用loose模式和添加@babel/plugin-transform-spread and @babel/plugin-proposal-object-rest-spread,但没有解决问题。

  {
    "presets": [[
        "@babel/preset-env", {
            "useBuiltIns": "usage",
            "loose": false, // Was true before
            "modules": "auto",
            "corejs": 3
        }],
        "@babel/preset-react",
        "@babel/preset-typescript"
    ],

    "plugins": [
        ["@babel/plugin-proposal-decorators", {
            "legacy": true
        }],
        ["@babel/plugin-proposal-class-properties", {
            "loose": true
        }],
        "@babel/plugin-transform-spread", // Just added
        "@babel/plugin-proposal-object-rest-spread", // Just added
        "@babel/plugin-proposal-optional-chaining",
        "@babel/plugin-proposal-nullish-coalescing-operator",
        "react-hot-loader/babel"
    ]
}

webpack.config.js:

在这里我尝试明确包括remark-mdx and @mdx-js/runtime并且还删除了exclude属性或将其更改为/node_modules\/(?!(remark-mdx|@mdx-js\/runtime)\/).*/,但似乎没有任何作用:

  {
    test: /\.(j|t)sx?$/,
    include: [
      path.resolve(__dirname, 'src'),
      // Tried explicitly adding these 2:
      path.resolve('node_modules/remark-mdx'),
      path.resolve('node_modules/@mdx-js/runtime'),
    ],
    // Tried removing `exclude` or not excluding those 2 packages:
    // exclude: /node_modules/,
    // exclude: /node_modules\/(?!(remark-mdx|@mdx-js\/runtime)\/).*/,
    use: [{
      loader: 'babel-loader',
      options: {
        cacheDirectory: true,
        babelrc: true,
      }
    }],
  }

我正在使用 Babel 7 和 Webpack 4。


好吧,原来是处理里面的文件node_modules你需要使用babel.config.js而不是.babelrc正如所解释的here and here:

您的用例是什么?

  • 您正在使用 monorepo 吗?
  • 你想编译node_modules吗?

    babel.config.json是给你的!

  • 您的配置仅适用于项目的单个部分?

    .babelrc.json是给你的!

另外,如果您使用的是 monorepo,则需要设置rootMode: 'upward'这样 Babel 就可以找到你的新配置文件,如所解释的here.

网页包的babel-loader配置应该看起来像这样:

  {
    test: /\.(j|t)sx?$/,
    include: [
      path.resolve(__dirname, 'src'),
      // No need to add @mdx-js/runtime, just add the problematic package:
      path.resolve('node_modules/remark-mdx'),
    ],
    // You also need to exclude it from the exclusions:
    exclude: /node_modules\/(?!(remark-mdx)\/).*/,
    use: [{
      loader: 'babel-loader',
      options: {
        cacheDirectory: true,
        // And replace .babelrc with babel.config.json...
        babelrc: false,
        // ...which might also mean you need this if you are using a monorepo:
        rootMode: 'upward',
      }
    }],
  }

进行此更改后,正在处理文件,但我收到了不同的错误:

Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>'

在这种情况下,我必须添加sourceType: "unambiguous" to babel.config.json, as remark-mdx使用 CommonJS 模块而不是 ES6 模块。您可以将其添加到您的根目录中babel.config.json文件或内部overrides,这样它只针对里面的包node_modules.

有关为什么会发生这种情况的更多信息,请参阅如何在供应商捆绑包上使用 babel 的 `useBuiltIns: 'usage'` 选项?.

Babel's babel.config.json最终看起来像这样:

{
    "presets": [[
        "@babel/preset-env", {
            "useBuiltIns": "usage",
            "loose": true,
            "modules": "auto",
            "corejs": 3
        }],
        "@babel/preset-react",
        "@babel/preset-typescript"
    ],

    "plugins": [
        ["@babel/plugin-proposal-decorators", {
            "legacy": true
        }],
        ["@babel/plugin-proposal-class-properties", {
            "loose": true
        }],
        "@babel/plugin-proposal-optional-chaining",
        "@babel/plugin-proposal-nullish-coalescing-operator",
        "react-hot-loader/babel"
    ],

    "overrides": [{
        "test": "./node_modules",
        "sourceType": "unambiguous"
    }]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webpack 和 Babel 未转译 node_modules 内的依赖项,由于 ES6 的扩展语法,该依赖项会破坏 IE 11 和 Edge 的相关文章

  • asp.net 核心、角度 2、PrimeNG

    I use aspnetcore spa 模板 https www npmjs com package generator aspnetcore spa作为创建管理面板的起点 接下来我添加PrimeNG http www primeface
  • 为什么使用 ES6 Map 而不是普通的 javascript 对象?

    如果我们可以用普通的 javascript 对象创建键 值对 那么使用新的 ES6 的原因是什么Map https developer mozilla org en US docs Web JavaScript Reference Glob
  • 如何在 ESLint 中支持 ES7

    我有一个使用 WebPack 来使用 ESLint 的项目设置 并且我想使用 ES7 作为内联绑定运算符 目前我收到如下所示的解析错误 Users ryanvice Documents Code pluralsight redux star
  • JavaScript 符号并不能阻止对象中的名称冲突

    我已经开始研究 JavaScript 中的符号 并开始在我的对象中使用它们来帮助解决名称冲突 但是在使用它们时我仍然可以覆盖属性吗 我很难理解 JavaScript 中符号的意义 它们被谈论了很多 人们说它们很聪明 因为它们不会导致对象中的
  • 在 ng 服务命令上找不到构建器 @angular-devkit/build-angular:dev-server 的实现[重复]

    这个问题在这里已经有答案了 我尝试更新以下 Angular CLIthis https www npmjs com package angular cli updating angular cli 但现在我无法运行我的应用程序 当我尝试运行
  • localhost 拒绝在 chrome mac 中连接

    我正在使用 webpack dev server 使用此命令运行服务器 npm run dev 当我使用npm start 它工作得很好 但不想这样做 因为它是为了生产 到目前为止我的服务器运行良好http 本地主机 3000 http l
  • require('babel/register') 不起作用

    我在客户端上有一个用 ES6 编写的同构应用程序Babel 转译器 http babeljs io 我希望我的 Express 服务器具有与客户端代码相同的 ES6 语法 很遗憾require babel register 不起作用 服务器
  • ES6 类文字中的 IIFE

    在 ES5 中我们都可以这样做 myClass prototype myMethod function return function 我可以对 ES6 类文字执行同样的操作吗 不 至少现在还没有 ES6 类仅支持声明方法 因此任何不直接为
  • 如何让 webpack 转换 React 生产文件?

    当我使用 webpack 与 React 16 捆绑我的应用程序时 我在浏览器中收到 Uncaught ReferenceError require is not Defined 对于react和react dom 导致错误的资源是reac
  • 使用 Webpack 代理创建 React 应用程序中的 WebSockets

    我使用版本 3 1 2 2019 年 9 月 19 日 中的 Create React App 创建了我的 React 应用程序 我试图为 Web Socket 请求配置代理 但似乎当我使用代理时 未建立连接 我用过THIS https g
  • 使用 ES6 模块导出/导入单个类方法?

    假设我有一个像这样的简单课程fileA js class foo constructor x this name x fooMethod x return x hello 我想导入并使用fooMethod in fileB js像这样 im
  • 使用 webpack 导出全局函数

    我正在尝试编写一个同构模块 服务器 javascript 将在 JINT 内部运行 我专门创建了一个 webpack 包来构建该模块的服务器版本 我想公开一个可以让 JINT 调用的函数 我正在使用 JINT 中的 scriptEngine
  • 是否可以让 webpacks System.import 使用 ajax (用于进度事件)?

    所以我刚刚更新到 webpack 2 并进行了第一个工作设置 其中 webpack 通过查看 System import 调用自动创建块 相当甜蜜 但是 我使用 ajax 调用加载初始块 以便我可以加载时显示进度 https stackov
  • 配置 webpack 在单独的子文件夹中输出图像/字体

    我管理配置 webpack 将 CSS 和 JS 输出到各自的子目录中 即public asests css and public assets js 但是 我不知道如何对图像和字体执行相同的操作 换句话说 我想输出图像public ass
  • 是否有任何理由使用 axios 而不是 ES6 fetch [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 研究了 axios 和 ES6 fetch 的文档 我发现两者非常相似 并且都受到 ajax 及其简写的强烈影响 axios 的主要优点是浏览器
  • 在 Map() 的条目上使用 Promise.all

    我正在使用 Map 来表示一些键 值对 let myMap new Map myMap set foo bar myMap set foo2 bar42 对于每个 Map 条目 我执行一个返回 Promise 的函数 所有这些 Promis
  • Javascript 根据字段值任意排序数组

    所以我有一个对象数组 如下所示 var myArray priority low priority critical priority high 我需要以这种方式排序 1 关键 2 高和3 低 如何才能做到这一点 我建议使用一个对象来存储排
  • “.builders['browser']”应该具有必需的属性“class”

    使用 npm install 成功安装依赖项后 在运行服务器时出现以下错误 Schema validation failed with the following errors Data path builders browser shou
  • 是否可以从 webpack 中的文件名中删除特殊字符?

    长话短说 我的资产文件名中不能包含某些字符 例如连字符 我没有运气通过解析 webpack 文档来弄清楚是否可以使用正则表达式或类似的东西重命名文件 这样我就可以从我无法控制源文件名的 3rd 方包中删除任何连字符 我的超级天真的例子是这样
  • AOT 编译器 - 包括延迟加载的外部模块

    我试图将外部模块 托管在 git npm 存储库中 作为延迟加载模块包含在我的 Angular 应用程序中 我正在使用 ngc 编译器编译我的外部模块 node modules bin ngc p tsconfig aot json 这是我

随机推荐

  • “堆内”和“堆外”的区别

    Ehcache 谈论堆内和堆外内存 有什么不同 使用哪些 JVM 参数来配置它们 堆上存储是指将出现在 Java 堆中 并且也受 GC 影响 的对象 另一方面 堆外存储是指由 EHCache 管理的 序列化 对象 但存储在堆外 并且也不受
  • 在 iPhone 中创建 pdf 缩略图

    我是 Objective c iPhone 编程新手 我有一个应用程序 可以在 UIWebView 中成功显示 PDF 但现在我想创建 PDF 的缩略图 我的 PDF 存储在我的资源文件夹中 因此 请给我如何显示 PDF 缩略图的代码 我的
  • 绘制立方体时出现OutOfMemory异常

    我有一个绘制和旋转立方体的类 每次旋转立方体时 我都会使用立方体的新值重新加载缓冲区 public void LoadBuffer GraphicsDevice graphicsDevice buffer new VertexBuffer
  • 如何使用 Android Management API + Organizations 分发私有 Android 应用测试轨道?

    因此 我使用 Android Management API 来管理和处理应用程序到我正在使用的信息亭设备的部署 我创建了一个组织 创建了一项政策 并确保该应用程序仅限于托管的 Google Play 并将该组织分配给该应用程序 我已将一些设
  • 如何查看c中优化后的代码

    我可以使用探查器检查优化情况 可执行文件的大小以及执行所需的时间 我可以得到优化的结果 但我有这些疑问 如何获得优化的 C 代码 C 使用哪种算法或方法来优化代码 提前致谢 您可以使用该选项了解优化的想法 fdump tree optimi
  • 是否可以使用 Google Chrome 作为代理服务器?

    在我的特定网络环境中 Google Chrome 可执行文件可以通过经过身份验证的传出代理服务器访问外部网站 然而 其他可执行文件 当指向该传出代理时 无法执行此操作 我现在有一个想法 使用 Chrome 本身作为其他可执行文件的本地代理
  • 在 Oracle 中为 varchar2 字段创建序列

    我想为这个 varchar 创建一个序列 如果它是一个数字而不是 varchar 那就更容易了 在那种情况下 我可以做 seq no seq no 1 但是 当我想将列中的下一个值存储为 A0000002 而前一个值是 A0000001 将
  • 避免 SSL “您将被重定向到不安全的连接。”信息

    我有一个通过 SSL 提供服务的登录屏幕 用户填写他们的登录名 密码 这将被发布到服务器 此时我想跳出 SSL 因此我将它们重定向回没有 SSL 的同一页面 这会导致浏览器显示警告对话框 您将被重定向到不安全的连接 我怎样才能避免这种情况
  • 如何在 Yii 中使用事件

    我想在 onBeginRequest 事件中运行一些代码 我该在哪里做呢 我认为我不应该将其添加到核心库代码中 我对 Yii 完全是菜鸟 如果您想使用 onBeginRequest 和 onEndRequest 您可以通过将以下几行添加到配
  • VS 2010 中出现“没有可用的编辑器”错误

    当我尝试在 VS 2010 中选择设计器视图时 出现以下错误 没有可用的编辑器 c 用户 teadrinkinggeek 文档 视觉 工作室 2010 网站 website2 About aspx 确保该文件的应用程序 类型 aspx 已安
  • 为什么 Eclipse PHP 无法识别名称空间声明?

    当我输入 namespace ORM 时在 Eclipse 中 它用红色强调 ORM 并表示它需要括号 有没有办法让 Eclipse 识别名称空间 这可能是您的项目设置为5 1 5 2版本 您可以在以下位置更改默认值 Window gt P
  • SEL 执行选择器和参数

    当您拥有的只是一个 SEL 对象时 似乎应该有一种简单的方法来调用带有一些参数的选择器 我似乎找不到正确的语法 MyClass init SEL sel owner NSObject parent int i 10 parent perfo
  • 通过 OneToOneField 删除相关对象

    在这种情况下有什么聪明的方法来执行删除吗 class Bus models Model wheel OneToOneField Wheel class Bike models Model wheel OneToOneField Wheel
  • 为什么 Java 允许大小为 0 的数组?

    java中的数组是固定长度的 那么为什么 Java 允许大小为 0 的数组呢 String strings new String 0 这表明它是空的 IE 您可以对其进行循环 就好像它有项目并且没有结果发生一样 for int k 0 k
  • 出于安全考虑,是否有类似于 jQuery 版本的终止支持之类的内容,类似于生命周期/支持版本的终止

    出于安全原因 我们需要获取 jQuery 支持的版本 是否有类似 jQuery 版本的支持终止之类的内容 类似于 PHP 中的生命周期终止 支持版本 https www php net supported versions php 出于安全
  • HTTP 路径必须以斜杠开头吗?

    我有一个关于 HTTP 格式的问题 HTTP 请求的第一行看起来像这样 GET path to resource txt HTTP 1 1 或者换句话说 METHOD URI HTTP VERSION 是否需要URI开始于 性格使得 pat
  • PHP 子进程的私有变量访问

    所以我正在尝试解决我在设计 PHP 类时遇到的问题 我创建了一个基类 并分配了私有变量 我有扩展此基类的子类 它们通过基类的函数引用和更改这些私有变量 这是一个例子 请记住我仍然对之间的区别感到困惑private and protected
  • 如何使用 Java Regex 查找字符串中的所有重复字符序列?

    使用 Java 和 Regex 解析随机字符串以查找重复序列 考虑字符串 啊啊啊啊啊啊 我想找到一个正则表达式来查找上述字符串中的所有匹配项 aaabbaaacccbb aaabbaaacccbb 将检查字符串中是否有重复的字符序列并返回这
  • 如何让列表迭代器从给定索引处开始?

    我有一个链接列表 我需要创建在列表中给定点返回迭代器的方法 我目前有一个从头部开始的迭代器 public Iterator
  • Webpack 和 Babel 未转译 node_modules 内的依赖项,由于 ES6 的扩展语法,该依赖项会破坏 IE 11 和 Edge

    我有一个项目使用 mdx js runtime它在 IE 11 或 Edge 上完全崩溃 Edge 44 18362 449 0 SCRIPT1028 SCRIPT1028 Expected identifier string or num