淘宝镜像下Electron初始化与打包过程中operation not permitted异常解决方案

目录

前置内容(可跳过)

环境配置

初始化例程

打包成exe文件

operation not permitted解决方案

operation not permitted异常分析

npm install过程中的operation not permitted

打包过程中的operation not permitted分析


前置内容(可跳过)

环境配置

下载Node.JS并安装,查看版本命令检验node –v 和npm –v

https://electronjs.org/docs/tutorial/development-environment#setting-up-windows

初始化例程

若未配置git需下载样例程序:

https://github.com/electron/electron-quick-start

若已配置git可参考:

https://electronjs.org/docs/tutorial/first-app#installing-electron

  • 解压例程至文件夹

  1. 在文件中,按住shift+鼠标左键,选择【在此处打开命令窗口】
  2. 命令行中输入npm install
  3. 若未发现错误 输入npm start 运行程序
  4. 若发现错误:
(node:4724) UnhandledPromiseRejectionWarning:

Error: EPERM: operation not permitted,lstat

'C:\Users\ADMINI~1\AppData\Local\Temp\electron-downloadVE91IJ\electron-v7.1.7-win32-x64.zip'

解决办法看下面的operation not permitted解决方案

打包成exe文件

参考: https://segmentfault.com/a/1190000013924153

  • 在\electron-quick-start-master目录下适用命令行,键入命令
npm install electron-packager --save-dev
  • 在package.json中添加代码:
"scripts": {

    "package": "electron-packager ./ myapp --out ./OutApp"

  }

  • 命令行中执行npm run package
  • 若出现该问题

即发现错误:

(node:4724) UnhandledPromiseRejectionWarning:

Error: EPERM: operation not permitted,lstat

'C:\Users\ADMINI~1\AppData\Local\Temp\electron-downloadVE91IJ\electron-v7.1.7-win32-x64.zip'

解决办法看下面的operation not permitted解决方案

operation not permitted解决方案

在文件electron-quick-start-master\node_modules\@electron\get\dist\cjs\index.js中修改代码

     即在url后添加

if(url.startsWith("http://npm.taobao.org/mirrors/electron/v"))

url=url.replace("http://npm.taobao.org/mirrors/electron/v","http://npm.taobao.org/mirrors/electron/");

if(url.startsWith("https://npm.taobao.org/mirrors/electron/v"))

url=url.replace("https://npm.taobao.org/mirrors/electron/v","https://npm.taobao.org/mirrors/electron/");

     错误原因是生成的下载地址多了个字母v,详细情况可看下面分析过程。

operation not permitted异常分析

npm install过程中的operation not permitted

分析控制台输出信息:

由输出信息可知:

  1. 该错误是在目录\electron-quick-start-master\node_modules\electron中,执行node install.js命令时出现
  2. 最后位置为C:\Users\ADMINI~1\AppData\Local\Temp\
  3. 提示信息为:operation not permitted(操作未被允许)

根据输出信息初步判断是临时目录权限问题,命令行中输入 npm config ls -l,得

说明C:\Users\ADMINI~1\AppData\Local\Temp\为npm安装模块时的临时目录,若该目录有权限问题,则npm在安装其他模块时,也会报出operation not permitted错误,npm可正常安装其他模块,故可排除C:\Users\ADMINI~1\AppData\Local\Temp\具有权限问题。

此时怀疑为electron-v7.1.7-win32-x64.zip未下载成功,导致operation not permitted错误,故分析\electron-quick-start-master\node_modules\electron目录下的install.js文件,找到下载相关的代码:

由代码易知,若下载失败,extractFile函数将会抛出一个异常,猜想得到了初步的验证,向上追踪downloadArtifact函数:

查看\electron-quick-start-master\node_modules\@electron\get目录

点开package.json,得

可知相关代码在\electron-quick-start-master\node_modules\@electron\get\dist\cjs目录中的index.js里,继续分析index.js文件,找到downloadArtifact函数相关代码得

为验证是否是下载时出现问题,在url后新增输出语句,将下载目标的url输出,若可通过url手动下载,则说明目标地址没有问题,转而排查downloadArtifact函数的业务逻辑。若目标地址不可下载,则可初步确定已定位问题原因。

在\electron-quick-start-master\node_modules\electron目录的命令行(目录下shift+右键,命令行中执行)内,执行node install.js

得下载地址

http://npm.taobao.org/mirrors/electron/v7.1.7/electron-v7.1.7-win32-x64.zip

浏览器浏览该地址,果然是无法访问,则可确定,问题源自此处

通过不断向上级目录查看,发现淘宝镜像下并非没有我没所要的文件

而是淘宝镜像下,该文件的地址为(版本号差了一个v):

http://npm.taobao.org/mirrors/electron/7.1.7/electron-v7.1.7-win32-x64.zip

在文件electron-quick-start-master\node_modules\@electron\get\dist\cjs\index.js中修改代码

即在url后添加

if(url.startsWith("http://npm.taobao.org/mirrors/electron/v7.1.7"))

url=url.replace("http://npm.taobao.org/mirrors/electron/v7.1.7","http://npm.taobao.org/mirrors/electron/7.1.7");

在\electron-quick-start-master\node_modules\electron目录的命令行(目录下shift+右键,命令行中执行)内,执行node install.js

执行成功,没有报错

回到\electron-quick-start-master目录下的命令行,执行npm start

成功加载界面。

打包过程中的operation not permitted分析

打包过程中electron-packager会临时下载一个electron模块,所以其中的operation not permitted异常与上述一致,要么因为临时文件夹权限问题,要么就是目标文件无法下载。如果临时文件夹权限存在问题,那么显然其他模块也无法正常下载,所以究竟是哪种情况其实很好分辨。若是目标文件无法下载,可参照上述分析过程,很硬核的把目标地址强行改为有效地址。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值