上QQ阅读APP看书,第一时间看更新
1.1 安装失败
刚入门的开发者一般会按照官方的文档来初始化项目,指令如下所示:
> npm init -y > npm install electron --save-dev
第一行指令是使用npm工具初始化一个Node.js项目,第二行指令是为这个项目添加Electron依赖包。
执行第一个指令时并不会出现什么问题,但执行第二个指令时往往会得到如下报错信息(实际上使用yarn指令安装Electron依赖包也通常会收到类似的报错):
> electron@13.1.0 postinstall D:\test\newelectron\node_modules\electron > node install.js Downloading electron-v13.1.0-win32-x64.zip: [==============================] 100% ETA: 0.0 seconds HTTPError: Response code 504 (Gateway Time-out) at EventEmitter.<anonymous> (D:\test\node_modules\got\source\as-stream.js:35:24) at EventEmitter.emit (events.js:210:5) at module.exports (D:\test\node_modules\got\source\get-response.js:22:10) at ClientRequest.handleResponse (D:\test\node_modules\got\source\request-as-event-emitter.js:155:5) at Object.onceWrapper (events.js:300:26) at ClientRequest.emit (events.js:215:7) at ClientRequest.origin.emit (D:\test\node_modules\@szmarczak\http-timer\source\index.js:37:11) at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:583:27) at HTTPParser.parserOnHeadersComplete (_http_common.js:115:17) at Socket.socketOnData (_http_client.js:456:22) npm WARN newelectron@1.0.0 No description npm WARN newelectron@1.0.0 No repository field. npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! electron@13.1.0 postinstall: 'node install.js' npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the electron@13.1.0 postinstall script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
这是因为Electron依赖包与大多数Node.js依赖包不同,它并不仅仅是一个包含一系列JavaScript文件的、托管在npm服务上的依赖包,而是一个“复合型”的依赖包。
为什么说它是一个“复合型”的依赖包呢?这是因为在安装Electron依赖包的过程中,npm还额外执行了它在包内的配置文件中定义的脚本,这些脚本会去GitHub的代码仓储内下载Electron的可执行文件及其依赖的二进制资源。
这些可执行文件和资源有70~80MB之大,加之网络环境不稳定,所以大概率你会看到上面的报错信息。
接下来我们就介绍一下Electron是如何把自己做成一个“复合型”依赖包的。