博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Electron-Vue项目中遇到fs.rm is not a function问题的解决过程
阅读量:4108 次
发布时间:2019-05-25

本文共 1453 字,大约阅读时间需要 4 分钟。

Electron-Vue项目中遇到fs.rm is not a function问题的解决过程

文章目录

结论

  1. 不同版本的electron使用的node版本不同;
  2. 不同版本的node所提供的API不同;

问题描述

  1. 主进程和渲染进程中引入fs模块后,可以正常读文件;
  2. 使用fs.rmdirSync(path, {recursive:true})并不能正常删除文件;
  3. 使用fs.rmSync(path)报错:fs.rmSync is not a function;

问题起源

程序中创建了临时文件夹,完成功能后希望删除文件夹,但是rmdirSync删除文件夹时报无法删除空文件夹的错误,虽然设置recursive为true;那干脆我自己先删除文件,然后再删除文件夹好了,结果就遇到rmSync不是函数的错误。就这样开启了问题的解决之旅;

问题分析

  1. 可以使用readFileSync读文件,但是不能删文件,会不会是electron中通过require引入的fs模块和普通node中的fs模块不一样呢?
  2. webpack打包的时候是不是改变了什么呢?

问题思考

  1. 因为前面遇到过webpack中导出只能使用export而无法使用module.exports的问题,所以第一感觉是webpack做了一些事情导致了这个问题;
  2. 百度和谷歌出的相关文章,如[CSDN博文](TypeError: fs.existsSync is not a function | import { ipcRenderer } from ‘electron’)、、,提到了webpack打包主要针对浏览器端,可能用不了node,这让我继续认为应该和webpack有关;可是有个问题就是主进程中照样报错啊;另外,里提到,可以分别配置主进程和渲染进程的webpack配置中target属性为electron-main和electron-renderer;查看了相关配置,是ok的;那么,到底是什么问题呢?难道electron引入的fs模块和node的不一样?

问题解决

  1. 既然fs可以读文件,说明fs对象的readFileSync方法是可以使用的,那干脆断点看看fs到底有哪些属性,结果就发现了unlink函数,这里就恍然大悟,因为当时看fs的api文档时,rm和unlink和功能很像,那么为啥提供两个函数呢?当时也就这么一想,没有深究,应该是rm属于新增的api,可能更加方便使用了吧;回到文档确认了下,rm函数Added in: v14.14.0。果然,应该是electron使用的node版本并不是最新的,所以有些新增函数无法识别,即is not a function;

在这里插入图片描述

  1. 查看electron信息,electron版本为12.8.1,node版本为12.8.1;这也就解释了为什么rmdirSync使用了recursive,还是未能正常删除文件夹,因为:

在这里插入图片描述

问题反思

  1. 首先是思维一点固化,因为前面遇到过webpack导致的module.exports无法导出功能的问题,所以下意识觉得问题在webpack;另外,对于webpack本身我也不是很熟悉;
  2. 再者,没有SDK版本的意识,History这里在文档中是默认折叠的,另外由于安装环境时基本上会选择最新的版本,所以算是逃避了版本号的问题,于是这次就掉到坑里了;
  3. 答案属于问题,如果问题定位错误了,那么答案就失去了意义,即南辕北辙;
  4. 通过断点查看fs的属性,最后能发现问题所在,算是误打误撞吧;

转载地址:http://pkmsi.baihongyu.com/

你可能感兴趣的文章
C# 简单的矩阵运算
查看>>
gcc 常用选项详解
查看>>
c++输出文件流ofstream用法详解
查看>>
firewalld的基本使用
查看>>
Linux下SVN客户端使用教程
查看>>
Linux分区方案
查看>>
nc 命令详解
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
OpenFeign学习(七):Spring Cloud OpenFeign的使用
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>