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

代码优化 - rollup打包,如何处理 Symbol.toPrimitive ?

逑景铄
2024-01-11

通过rollup打包test.js,打包后文件中出现Symbol关键字
源文件:test.js

class A{}export default A;

打包后文件:test.min.js

var A = function () {    "use strict";    ...其他代码--     var e = r[Symbol.toPrimitive];    ...其他代码--}

rollup配置文件:rollup.config.js

import resolve from "@rollup/plugin-node-resolve";import commonjs from "@rollup/plugin-commonjs";import babel from "@rollup/plugin-babel";import json from "@rollup/plugin-json";import {terser} from "rollup-plugin-terser";export default {    input: ["./src/test.js"],    output: {        file: "./out/test.min.js",        format: "iife",        name: "A",    },    plugins: [resolve(), commonjs(), babel(), json(), terser()],};

期望能够不生成Symbol.toPrimitive或者生成Symbol的polyfill。能在不支持ES6环境正常运行

共有1个答案

鄂伟兆
2024-01-11

在Rollup打包过程中,Symbol.toPrimitive 是一个内建的JavaScript方法,用于将一个对象转换为一个原始值。这个方法在ES6中引入,如果你在代码中直接使用了这个方法,那么Rollup在打包过程中就会保留它。

要处理这个问题,你可以在你的代码中或者在Rollup配置中添加一个polyfill,以便在不支持ES6的环境中运行。

一种可能的解决方案是在你的代码中添加一个polyfill:

if (!Symbol.toPrimitive) {    Object.defineProperty(Symbol, 'toPrimitive', {        value: function (obj) {            return obj.valueOf();        },        writable: true,        enumerable: false,        configurable: true    });}

另一种解决方案是在Rollup配置中添加一个polyfill:

import "core-js/features/symbol-to-primitive";

这样,Rollup在打包过程中就会包含这个polyfill,以便在不支持ES6的环境中运行。

请注意,这种方法只适用于那些在打包后的代码中直接使用了Symbol.toPrimitive的情况。如果你的代码中没有直接使用这个方法,那么你可能需要检查你的依赖项,看看是否有其他库或插件在使用它。如果有,你可能需要更新这些库或插件,或者寻找替代方案。

 类似资料:
  • 这本手册细致的描述了怎样写出高度优化的汇编代码,着重于讲解Pentium系列的微处理器。 完整:https://www.wenjiangs.com/wp-content/uploads/2020/pentiumopt.htm

  • 我认为代码(如下)已经优化(只需使用比相同逻辑的初始版本更少的变量) > 在优化过程中,我应该考虑哪些因素? 这是代码(也在jsfiddle上) 这是代码的解释。“处理”函数在数组中查找相同的值,对于每个相同的值,它通过将一个数字挂起到该值来更改值,“数字”表示它在数组中找到的值的计数。 例如arr=["x","x","y","z"]将返回["x(1)","x(2)","y","z"]"y"和"z

  • 打包你的代码,将它共享出去,让其他的开发者使用。例如,将其打包成一个库分享给其他开发者,以便他们用在自己的应用中,或者共享给开发工具,比如 ‘py.test’。 这种代码发布方式具备的优势是其成熟的工具生态系统,例如 PyPI 和 pip,这些工具使得其他的开发者很容易下载和安装你的包,无论是用于偶然的实验,还是将其集成到大型专业的系统中。 Python 代码以这种方式发布共享是一个成熟的惯例。如

  • 通过vite中rollup打包,如何对lodash做按需打包? 这两种写法在build时 第一种dist体积比第二种要大。都说是第一种写法是将整个lodash打包进了dist。我这里有一个疑问,rollup在build时不是会对代码做按需打包吗? rollup的树摇不会起作用吗? 假设整个项目只使用了一个throttle函数,也会将整个lodash打包到dist吗? 虽然lodash是 cjs规范

  • 问题内容: 我在Android编程中有以下代码 并持续到btn30 在python中,我通过以下简单代码对其进行优化 在Java编程中我该怎么做?或者我可以做到吗?是否存在简单的代码? 所以有两种方法可以做到 : : 其他方法是GidView Tanks All。 问题答案: 您可以创建一个由组成的数组,并使用method,该方法允许您通过名称获取标识符。 如果有人感兴趣如何仅使用Java获得相同

  • 冲突合并一般是因为自己的本地做的提交和服务器上的提交有差异,并且这些差异中的文件改动,Git不能自动合并,那么就需要用户手动进行合并 如我这边执行git pull origin master 如果Git能够自动合并,那么过程看起来是这样的 拉取的时候,Git自动合并,并产生了一次提交。 如果Git不能够自动合并,那么会提示 这个时候我们就可以知道README.MD有冲突,需要我们手动解决,修改RE