为啥 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
捆绑到构建的应用程序中,因此您仍然需要严格地填写此列表。
【讨论】:
能不能说,如果你的项目不会被其他项目作为模块使用,dependencies
和devDependencies
没有区别?大部分时候我们开发一些服务器、网站等不会作为模块使用,所以大部分时间devDependencies
和dependencies
是一样的。
当我尝试使用electron-builder
创建可执行文件时,为什么会出现以下错误:"electron" is only allowed in "devDependencies" *** electron builder
嗨@oldboy,我猜你可能是上述答案最后一段中描述的情况,即你的打包程序试图将你的依赖项包含到你的包中,并且当它是时无法处理电子在该列表中(它很可能知道在省略时如何处理它)。随意提出一个新问题,详细说明您的具体问题。
我想通了。我简单地将其移至开发依赖项,但我的印象是electron
是一个实际的依赖项,这就是为什么它对我来说仍然没有意义?无论如何,现在我遇到了另一个问题,我已经发布了一个关于它的问题here。如果你不介意你可以看看吗?【参考方案2】:
因为当您实际打包到安装程序中时,这些二进制文件不会被使用。大部分电子的安装程序/打包程序将使用电子二进制文件构建包,而不是使用依赖项。
【讨论】:
这是否意味着带有require('electron')
的行会被转换成别的东西?或者打包器嵌入electron
?以上是关于为啥 Electron 需要保存为开发者依赖?的主要内容,如果未能解决你的问题,请参考以下文章