为啥 Electron 需要保存为开发者依赖?

Posted

技术标签:

【中文标题】为啥 Electron 需要保存为开发者依赖?【英文标题】:Why does Electron need to be saved as a developer dependency?为什么 Electron 需要保存为开发者依赖? 【发布时间】:2018-11-21 00:39:24 【问题描述】:

根据官网,电子文件的正确保存方法是:

npm install electron --save-dev

运行应用程序实际上需要电子(字面意思是:require()),这与top voted answer here 背道而驰。那么,如果这是一个例外,我们为什么要做出这个例外呢?

【问题讨论】:

【参考方案1】:

require 一个包的事实与它是否应该被视为依赖项或 devDependency(在 npm 意义上)无关。例如。许多项目使用 webpack API(即const webpack = require('webpack')),但将其列为 devDependency。

原因在你链接的帖子中也有解释:当你publish你的包时,如果消费者项目需要其他包来使用你的,那么这些必须列为dependencies

如果您的包仅将某些模块用于构建、测试或将它们捆绑到 dist 文件中(即消费者项目将使用的内容),则不应在 dependencies 中提及这些模块。我们仍然在devDependencies 中列出它们以供开发。

现在对于电子应用程序,您将应用程序作为消费者项目的节点模块使用的可能性很小,因此上述约定并不真正相关。

此外,我们属于 electron 包作为构建输出的一部分捆绑在一起的情况。您的用户无需从 npm 获取 electron 即可使用您构建的应用程序。因此它很好地匹配了 devDependency 的定义。

话虽如此,IIRC 一些电子包装商将您的 dependencies 捆绑到构建的应用程序中,因此您仍然需要严格地填写此列表。

【讨论】:

能不能说,如果你的项目不会被其他项目作为模块使用,dependenciesdevDependencies没有区别?大部分时候我们开发一些服务器、网站等不会作为模块使用,所以大部分时间devDependenciesdependencies是一样的。 当我尝试使用electron-builder 创建可执行文件时,为什么会出现以下错误:"electron" is only allowed in "devDependencies" *** electron builder 嗨@oldboy,我猜你可能是上述答案最后一段中描述的情况,即你的打包程序试图将你的依赖项包含到你的包中,并且当它是时无法处理电子在该列表中(它很可能知道在省略时如何处理它)。随意提出一个新问题,详细说明您的具体问题。 我想通了。我简单地将其移至开发依赖项,但我的印象是electron 是一个实际的依赖项,这就是为什么它对我来说仍然没有意义?无论如何,现在我遇到了另一个问题,我已经发布了一个关于它的问题here。如果你不介意你可以看看吗?【参考方案2】:

因为当您实际打包到安装程序中时,这些二进制文件不会被使用。大部分电子的安装程序/打包程序将使用电子二进制文件构建包,而不是使用依赖项。

【讨论】:

这是否意味着带有require('electron') 的行会被转换成别的东西?或者打包器嵌入electron

以上是关于为啥 Electron 需要保存为开发者依赖?的主要内容,如果未能解决你的问题,请参考以下文章

Electron开发:Electron 快捷键开发思路一览

当我只需要构建时,为啥 yarn 会安装开发依赖项?

番外篇客户端开发(Electron)无源码如何做汉化

electron builder 打包多个第三方依赖的软件

实现electron打开本地文件、文件另存为其他文件夹功能

Electron Forge使用