今天遇到了一个问题,我的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"
}
}