【问题标题】:After npm reads package.json, what runs Electron?npm 读取 package.json 后,运行 Electron 的是什么?
【发布时间】:2019-08-02 13:03:25
【问题描述】:

我刚刚开始了解 JavaScript、HTML 和 Electron 是如何工作的,我想知道在 package.json 的“脚本”->“开始”中运行 electron . 的内容,因为我不能不知道是什么,那种魔法让我很紧张。

根据npm 的手册页,npm start 所做的是读取package.json,查看“脚本”->“开始”->some_script 下的脚本,然后运行@ 987654327@。有时,some_script 类似于node foobar.js,这对我来说很有意义,因为我可以从命令行运行它。 NodeJS 正在执行 foobar.js。但是,在electron-api-demos 的情况下,some_scriptelectron .

您可以下载并运行electron-api-demos via

git clone https://github.com/electron/electron-api-demos
cd electron-api-demos/
npm install && npm start

为了弄清楚electron . 运行的是什么,我在node shell 中运行了它,并尝试运行node main.js。我什至尝试打开node shell 并运行

electron-api-demos@2.0.2 start $DIR/electron-api-demos
electron .

(这正是npm start 的输出)。他们都没有工作,因为他们都没有启动 Electron 应用程序。在这一点上,我对启动脚本到底是如何执行的感到非常困惑。

所以我想我的问题是:是否存在一个命令(我可以在命令行上使用)来启动这个 Electron 应用程序,而不使用npm?如果没有,npm 调用什么来启动这个 Electron 应用程序?

如果之前有人问过这个问题,我深表歉意,但我发现的所有资料似乎都没有进一步详细说明npm start 运行时究竟做了什么以及它如何执行electron . .感谢您的宝贵时间!

【问题讨论】:

  • 它在您的操作系统的外壳(“执行环境”)中运行,可能是 Linux/Mac 中的 bash 以及当今 Windows 中“DOS”所传递的任何内容。如果是前者,请尝试 ./electron 。相反 - 只是“电子”的原因。不起作用与 PATH 环境变量有关,它告诉操作系统在哪里可以找到可执行程序。当 npm run 脚本被执行时,它们假定当前工作目录,但你的 shell 没有。
  • 再补充一点,当脚本是“node somescript.js”时,node 是一个在你的 PATH 上的应用程序,因此被找到,并且 - 可能有点违反直觉 - node 知道如何在当前目录中查找要运行的实际脚本。实际上不知道为什么默认情况下当前目录不在 PATH 上,我们都知道它不是;)
  • @Stoffe 感谢您的帮助,但有趣的是,当您下载 git 存储库时,并没有一个名为“electron”的脚本。如果我运行 ./electron 。相反,它只是说找不到任何脚本。
  • 是的,忘记了 node_modules/.bin/ 部分的解释,但我看到你已经得到了一些很好的答案!

标签: javascript node.js npm electron


【解决方案1】:

使用 npm 安装的命令行界面放在 node_modules/.bin/ 目录中。您不能只从命令行运行它们,因为该目录不在您的 PATH 中(除非您将其放在那里,或者您将其安装在全局范围内)。

所以,如果你想在没有npm start 的情况下运行electron,你可以运行./node_modules/.bin/electron .。由于这有点冗长,较新版本的npm 提供了命令npx 来运行没有./node_modules/.bin/ 部分的东西,所以npx electron . 也可以工作。

由于 npm 脚本经常使用您已安装的软件包,它们会在运行您的命令之前自动将 node_modules/.bin/ 添加到 PATH。因此,启动脚本可以直接引用电子。

npx 也可以做一些其他很酷的事情——npm 有一个关于它的blog post

【讨论】:

  • 像魅力一样工作。现在,至少我可以更好地跟踪脚本的执行。
  • 当我尝试从我的项目目录之一运行npx electron 时,它总是告诉我“Electron failed to install correctly, please delete node_modules/electron and try installing again...”?另外,你介意看看my question over here??我真的很感激
【解决方案2】:

当你运行 npm start 时,它默认运行 package.json 的 script 属性的“start”键对应的命令

"script":{
   "start": "ng serve",
    "launch":"electron main.js" or "electron ."  // main.js located in the same dir
     "test": " ng test" 
 }

同样的,当你运行 npm run launch 时,它会触发 package.json 文件 script 属性的 "launch" 键对应的命令。比如运行 electron main.js 命令,你的应用程序就会启动。

所以如果你想像 electron main.js 那样直接运行你的电子应用程序,然后使用命令 npm install electron -g 全局安装电子模块,然后只需运行electron main.js 命令,您的应用程序将启动。

【讨论】:

  • 感谢您的帮助,但如果我确实在全球范围内安装了 electron,我的后续问题将是:我的系统中的电子脚本在哪里?在我全局安装它之前它在哪里? (我怀疑如果它是全局安装的,它会在 /usr/share/ 的某个地方)。所以这篇文章虽然相关,但并不能完全回答我的问题。
  • 查看全局安装时它会出现在“c:/users/User_name/AppData/Roaming/npm/node_modules”中,并且它可用于系统中的每个项目以及在本地安装时将保存在您当前的工作项目 node_modules 文件夹中,该文件夹仅适用于该项目而不适用于所有项目。
猜你喜欢
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
  • 2015-09-02
  • 2016-07-13
  • 2020-02-24
  • 2019-01-23
相关资源
最近更新 更多