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

时间:2016-05-01 13:47:29

标签: node.js cross-platform electron

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

当我执行&nbsp install命令时,它创建了一个~112 MB的node_modules文件夹。我还没有任何东西甚至可以使用这些模块,如果我删除这个文件夹,示例也会正常启动。 package.json 文件具有电子预制'作为devDependencies中唯一的项目,所以我假设node_modules文件夹是为此。

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

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

2 个答案:

答案 0 :(得分:7)

简短回答:

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

答案很长:

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

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

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

    • src:所有应用来源。现在这是你的应用程序。该文件夹的所有内容都打包成一个发行版。

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

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

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

当我需要打包我的应用程序以进行发布或测试时,我使用gulp-electron插件来生成分发版。还有其他方法可以做到这一点,比如使用electron-packager或其中一个包装器来构建您选择的构建系统,或者手动完成整个事情。

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

答案 1 :(得分:2)

electron-packager是一种轻量级的抽象概念,可以为每个平台构建Electron应用程序。

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

一般来说,建议不要将node_modules检入版本控制。