vite打包报错:Cannot add property 0, object is not extensible

273 阅读1分钟

今天遇到了一个问题,我的vite项目本地运行正常,但是一打包就报错

✗ Build failed in 1m 36s
error during build:
Cannot add property 0, object is not extensible
    at Array.push (<anonymous>) at ConditionalExpression.getLiteralValueAtPath (file:///E:/%E5%9B%BE%E6%96%87%E7%BC%96%E8%BE%91%E5%99%A8%E9%A1%B9%E7%9B%AE/2.0.0/node_modules/rollup/dist/es/shared/node-entry.js:12270:45)
    at file:///E:/%E5%9B%BE%E6%96%87%E7%BC%96%E8%BE%91%E5%99%A8%E9%A1%B9%E7%9B%AE/2.0.0/node_modules/rollup/dist/es/shared/node-entry.js:5064:30 at EntityPathTracker.withTrackedEntityAtPath (file:///E:/%E5%9B%BE%E6%96%87%E7%BC%96%E8%BE%91%E5%99%A8%E9%A1%B9%E7%9B%AE/2.0.0/node_modules/rollup/dist/es/shared/node-entry.js:2014:24)

通过错误信息定位到了错误出现在了rollup上,看了下npm上rollup的更新发现3天前有更新rollup到4.45.0

所以问题就出现在了3天前更新的版本。

去翻了下代码,大概的原因就是:

const EMPTY_ARRAY = Object.freeze([]);

this.expressionsToBeDeoptimized = EMPTY_ARRAY;

this.expressionsToBeDeoptimized.push(origin);

因为EMPTY_ARRAY是freeze的,所以不可以修改

那么相应的解决方案有两个

1、取消treeshake

这个问题是在treeshake的时候出现的,所以在vite的配置文件中

build: {
    rollupOptions: {
        treeshake: false  // 取消treeshake
    }
}

2、降级rollup

package.json

看了下4.44.1和4.44.2都可以

{
    "overrides": {
    "rollup": "4.44.1"
  },
  "resolutions": {
    "rollup": "4.44.1"
  }
}