大家好我是没钱的君子下流坯,用自己的话解释自己的知识
前言
使用Hbuilderx进行打包的时候,因为公司项目上线的时候考虑了各方面的稳定性选择了3.2.16版本,然后我入职后使用这个版本去打包h5去发布新版本的时候一直报错,半个月没有能解决,刚开始是以为内存溢出(这也是公司前辈给提出解决的办法)后面发现没用,我就继续白度问ai。
[HBuilder] 11:25:30.569 ERROR Error: EPERM: operation not permitted, open 'D:\HBuilderX\plugins\uniapp-cli\node_modules\@dcloudio\vue-cli-plugin-uni-optimize\.tmp\components.js'
[HBuilder] 11:25:30.570 Error: EPERM: operation not permitted, open 'D:\HBuilderX\plugins\uniapp-cli\node_modules\@dcloudio\vue-cli-plugin-uni-optimize\.tmp\components.js'
[HBuilder] 11:25:30.576 at Object.openSync (node:fs:585:3)
[HBuilder] 11:25:30.576 at Object.writeFileSync (node:fs:2170:35)
[HBuilder] 11:25:30.582 at updateComponents (D:\HBuilderX\plugins\uniapp-cli\node_modules\@dcloudio\vue-cli-plugin-uni-optimize\packages\webpack-optimize-plugin\component.js:57:6)
[HBuilder] 11:25:30.582 at D:\HBuilderX\plugins\uniapp-cli\node_modules\@dcloudio\vue-cli-plugin-uni-optimize\packages\webpack-optimize-plugin\index.js:15:11
[HBuilder] 11:25:30.589 at new Promise (<anonymous>)
[HBuilder] 11:25:30.589 at D:\HBuilderX\plugins\uniapp-cli\node_modules\@dcloudio\vue-cli-plugin-uni-optimize\packages\webpack-optimize-plugin\index.js:13:14
[HBuilder] 11:25:30.596 at AsyncSeriesHook.eval [as callAsync] (eval at create (D:\HBuilderX\plugins\uniapp-cli\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:8:17)
[HBuilder] 11:25:30.597 at AsyncSeriesHook.lazyCompileHook (D:\HBuilderX\plugins\uniapp-cli\node_modules\tapable\lib\Hook.js:154:20)
[HBuilder] 11:25:30.604 at Compiler.compile (D:\HBuilderX\plugins\uniapp-cli\node_modules\webpack\lib\Compiler.js:662:28)
[HBuilder] 11:25:30.605 at D:\HBuilderX\plugins\uniapp-cli\node_modules\webpack\lib\Watching.js:77:18
[HBuilder] 11:25:30.611 at AsyncSeriesHook.eval [as callAsync] (eval at create (D:\HBuilderX\plugins\uniapp-cli\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:6:1)
[HBuilder] 11:25:30.612 at AsyncSeriesHook.lazyCompileHook (D:\HBuilderX\plugins\uniapp-cli\node_modules\tapable\lib\Hook.js:154:20)
[HBuilder] 11:25:30.618 at Watching._go (D:\HBuilderX\plugins\uniapp-cli\node_modules\webpack\lib\Watching.js:41:32)
[HBuilder] 11:25:30.619 at D:\HBuilderX\plugins\uniapp-cli\node_modules\webpack\lib\Watching.js:33:9
[HBuilder] 11:25:30.626 at Compiler.readRecords (D:\HBuilderX\plugins\uniapp-cli\node_modules\webpack\lib\Compiler.js:529:11)
[HBuilder] 11:25:30.626 at new Watching (D:\HBuilderX\plugins\uniapp-cli\node_modules\webpack\lib\Watching.js:30:17)
就这个问题,我中间在uniapp官网上去问过付费支持,但也没解决。下面是我解决问题所尝试的方法。
1.报错的原因是没有权限打开某个文件下的文件,我解决对应方案,用管理员运行Hbuilderx然后给Hbuilderx的文检查设置所有的权限,未解决。当时chatGpt给的解决方案也是这样。
2.但是后来我发现错误是node中的一个函数打不开文件读取不了,错误发生在fs.writeFileSync函数调用之后,似乎是在尝试写入一个文件时失败了。我想可能是node版本问题,我使用的是v20.11.1,我换到和公司大家使用的都一样的V18.16.1,后也不行。
3.没办法期间打包发版本就交给了大佬,后面我就继续在空闲时间找解决的方法,终于在一个下午我找到了解决方法,我当时想这个文件夹下的文件一直报错没有权限打开,我TMD给他全删了就该不报错了吧,果然删除了D:\HBuilderX\plugins\uniapp-cli\node_modules@dcloudio\vue-cli-plugin-uni-optimize.tmp下的文件以后正常打包不报错了。后来解决了问题以后我和公司大佬探讨加上chatgpt得出结论,这些文件是打包时node自行产生的临时文件,因为这个Hbuilderx的本班很老了,然后我接手的云电脑是另一个人的很久不用了,此Hbuilderx中的node版本和我自己电脑中的node版本不对,文件冲突,删除后让node自己在产生新的文件就可以了。
总结:一个问题困扰半个多月,想过重装系统,重装Hbuilderx,重装node都没有解决。但最终还是解决了,所以遇到困难不要放弃,总有一天能解决。