当前位置: 首页 > 知识库问答 >
问题:

javascript - rollup+babel使用polyfill不生效Unresolved dependencies?

曹浩波
2023-07-02

在使用rollup+babel打包es6代码做polyfill生成兼容老IE版本的代码时,polyfill未生效,报Unresolved dependencies警告。

我谷歌和参考过 https://segmentfault.com/q/1010000042335568 配置 @rollup/plugin-node-resolve 还是未成功,希望有大佬帮忙看看非常感谢,示例仓库demo地址如下:
https://github.com/NEOTSO/rollup-polyfill-demo

src/index.js → dist/umd.js...
(!) Unresolved dependencies
https://rollupjs.org/troubleshooting/#warning-treating-module-as-external-dependency
core-js/modules/es.string.starts-with.js (imported by "src/index.js")
core-js/modules/es.array.includes.js (imported by "src/index.js")
  • rollup.config.js
import { babel } from "@rollup/plugin-babel";
import commonjs from "@rollup/plugin-commonjs";
import { nodeResolve } from "@rollup/plugin-node-resolve";

export default {
    input: "src/index.js",
    output: {
        file: "dist/umd.js",
        format: "umd",
    },
    plugins: [nodeResolve(), commonjs(), babel({ babelHelpers: "bundled" })],
};
  • babel.config.json
{
    "presets": [
        [
            "@babel/preset-env",
            {
                "targets": {
                    "ie": "8"
                },
                "useBuiltIns": "usage",
                "corejs": "3"
            }
        ]
    ]
}
  • src/index.js
console.log("123".startsWith(1));
console.log([1, 2, 3].includes(1));
  • dist/umd.js
(function (factory) {
    typeof define === 'function' && define.amd ? define(['core-js/modules/es.string.starts-with.js', 'core-js/modules/es.array.includes.js'], factory) :
    factory();
})((function () { 'use strict';

    console.log("123".startsWith(1));
    console.log([1, 2, 3].includes(1));

}));

这部分 define(['core-js/modules/es.string.starts-with.js', 'core-js/modules/es.array.includes.js'] 应该是 polyfill 没有成功吧。

共有2个答案

刁英朗
2023-07-02

踩坑记录

需要手动安装 npm install core-js@3 --save
详见文档:
https://babeljs.io/docs/babel-preset-env#usebuiltins

打包时后续还弹出一个警告:

(!) Circular dependencies
node_modules/core-js/modules/es.string.starts-with.js -> node_modules/core-js/modules/es.string.starts-with.js
M:\Work\TSO\rollup-demo\node_modules\core-js\internals\export.js?commonjs-proxy -> node_modules/core-js/internals/export.js -> M:\Work\TSO\rollup-demo\node_modules\core-js\internals\global.js?commonjs-proxy -> node_modules/core-js/internals/global.js -> node_modules/core-js/modules/esnext.global-this.js ->

解决方案:

rollup.config.js中babel插件添加 exclude 配置

plugins: [nodeResolve(), commonjs(), babel({ babelHelpers: "bundled", exclude: ['core-js'], })],

Edge模拟IE测试ok,安心去吃饭了,哎。

童子明
2023-07-02

这里提供两个例子:
https://sourcegraph.com/github.com/TanStack/form/-/blob/rollu...
https://sourcegraph.com/github.com/TanStack/query/-/blob/roll...

再提供一个搜索的链接:https://sourcegraph.com/search?q=context%3Aglobal+rollup.conf...

 类似资料:
  • Babel includes a polyfill that includes a custom regenerator runtime and core-js. This will emulate a full ES2015+ environment (no < Stage 4 proposals) and is intended to be used in an application rat

  • rollup.config.mjs中的babel配置如下: babel.config.json的配置如下: 我希望达到的效果是将@xyflow包中的“??”语法转换,按照上面的配置打包后,文件中依旧包含“??”语法,希望各位大佬解惑

  • 我遇到了一些麻烦,让这个WebComponents polyfill+native-shim在所有设备上都能正常工作,尽管WebPack。 关于我的设置的一些背景:*Webpack2+babel-6*应用程序是用ES6编写的,转换到ES5*导入一个用ES6编写的包,它定义/注册应用程序中使用的 因此相关的webpack开发人员配置如下所示: 键取方式:*我需要在的模块>之前加载CustomElem

  • 我在使用汇总编译Vue脚本时遇到问题。我得到的错误是 [!] 错误:节点_modules/vue/dist/vue未导出“openBlock”。运行时。esm。js,由src/js/components/TestButton导入。vue?vue app.js TestButton.vue 卷起来。配置。js 我尝试了很多不同的东西,但似乎没有任何帮助。但是,如果我在配置中的vuePlugin之前加

  • 关于vue-cli4使用terser-webpack-plugin时, exclude不生效 我的目的就是想让utils.js文件下 console.* 都能打印 其余文件的console移除 vue-cli4本自带terser,使用过exclude,发现打印出来没有exclude于是安装了插件 接着自行升级了cli和安装terser-webpack-plugin "@vue/cli-servic

  • 本文向大家介绍你有使用过babel-polyfill模块吗?主要是用来做什么的?相关面试题,主要包含被问及你有使用过babel-polyfill模块吗?主要是用来做什么的?时的应答技巧和注意事项,需要的朋友参考一下 Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbo