包装Electron桌面应用程序时包含node_modules?

6 cross-platform node.js electron

我正在Linux中试用一个简单的Hello World Electron应用程序.我想打包它并在Windows上安装它以测试它是否在那里运行良好.

当我执行'npm install'时,它创建了一个~112 MB的node_modules文件夹.我还没有任何东西,甚至使用这些模块,如果我也删除此文件夹,示例开始正常.该的package.json文件具有"电子预建"作为devDependencies唯一的项目,所以我承担node_modules文件夹是为这一点.

所以我怀疑是否应该将此文件夹包含在最终包中,如果我希望它在Windows上运行?

我在这里检查了文档,但它只有3个文件而没有依赖项,所以我不确定在你明确拥有的情况下该怎么做.

Dmi*_*riy 7

简短回答:

node_modules如果通过安装其他库npm,然后从代码中引用它们,则需要在最终分发中使用文件夹.

答案很长:

我不确定,但你可能很困惑,因为你安装了electron-prebuilt,这也是一个npm包,但这个是特别的,因为它是开发和包装所必需的,并不能作为你的应用程序的简单库.我建议您为应用程序使用双包结构来分离开发和应用程序包.这是我的电子应用程序的文件夹结构示例(让我们称之为MyApp):

  • MyApp:解决方案根文件夹,对于一个简单的应用程序,它将映射到您的存储库根文件夹

    • gulpfile.js - 如果你使用gulp构建配置
    • package.json - 开发包元数据.开发包不是你的应用程序,而是它的包装器.
    • 其他文件,如.hgignore,README.md,等等.
    • node_modules:所有dev依赖项,这将包含开发所需的包,例如gulp,gulpelectron-prebuilt插件等,从repo中排除
    • dist:distribution文件夹,这是我的gulp任务在打包时将打包的应用程序分发.从回购中排除

    • src:所有应用程序源.现在这是你的应用程序.此文件夹的所有内容都打包到分发中.

      • bower.json - bower清单,以防你使用它
      • package.json - 应用包元数据
      • node_modules:所有npm app依赖项(如sqlite,angular,d3等); 从回购中排除
      • bower_modules:从repo中排除所有bower app依赖项
      • app.js - 您的应用入口点

所以,当我需要安装一个包,这有助于我开发(通常是一个gulp插件)时,我导航到/ MyApp并在npm install -D [package]那里执行.当我需要为我的应用程序安装库时,比如前端框架,我导航到/ MyApp/src并在npm install -S [package]那里执行.

当我需要在开发中快速运行电子应用程序时,我将/MyApp/src文件夹提供给gulp-run-electron插件.或者,如果您electron-prebuilt为dev软件包安装,则可以导航/MyApp并运行/MyApp/node_modules/electron-prebuilt/dist/electron[.exe] ./src.您也可以electron-prebuilt全局安装npm i -g electron-prebuilt并运行electron ./src.

当我需要打包我的应用程序进行发布或测试时,我使用gulp-electron插件进行gulp生成分发.还有其他方法可以执行此操作,例如使用electron-packager或使用其中一个包装器来构建您选择的构建系统,或者手动执行整个操作.

编辑:因为你关心的是尺寸,所以预制电子本身会占用相当多的空间,但安装程序可以通过一些归档器(如7z)有效缩小.


小智 2

electron-packager是一个轻量级的抽象,它消除了为每个平台构建 Electron 应用程序的一些乏味。

它将遍历您的应用程序并为您指定的每个操作系统创建可执行文件。它将负责捆绑您的应用程序。您不必担心node_modules在最终版本中指定它。

一般来说,甚至不建议检查node_modules版本控制。