2016-05-12 133 views
0

我有一个用于Web和NodeWebkit(NW)应用程序的代码库。 我用下面的堆栈: - 阵营 - 哈皮 - Sequelize - 应用程序的Windows环境NodeWebkit - 部署应用程序

网页版使用MySQL,而NW使用SQLite。它一切正常。我有配置文件,编译我需要的应用程序(web或NW)。

我现在面临的问题是如何部署NW应用程序。想法是向客户提供NW应用程序,在那里他将打开它,点击图标。

因为我使用节点的NW版本,并且应用程序使用存储在node_modules中的许多模块,所以我面临着如何将它打包的挑战。

我的想法是制作一个Windows安装程序。用户将点击它,安装程序将提取所有文件到目的地。并在用户桌面上制作一个图标来运行它。

问题出在Windows文件名limitation。在node_modules内部,有许多子目录仅仅违反了Windows的限制。我甚至不能复制node_modules文件夹。我甚至不能删除它。那么确定我可以复制它如果我压缩它...或手动删除长文件夹。

我还没有开始在安装程序上工作,但我想我会用这种方法撞墙。

有没有人有一个想法如何进行此部署? 如何将NPM3整合到NW中?

我现在的计划是制作Windows安装程序。该Windows安装程序将正常安装应用程序文件。 node_modules将先被压缩并放置在安装程序中。然后安装程序将它简单地解压缩到destionation文件夹。

我会在这里发表我的进展。

这里有些更新。 这里的主要问题是node_modules的深度。我在node_modules中有很多模块,经过一番思考,我发现有一个简单的规则。有些模块是服务器端模块,而其他模块是通过反应使用的。 由于Webpack已经创建了一个包含所有模块的大文件,我根本不需要它们。

所以我已经删除了所有的前端模块(babel模块,react- *),并且只留下了服务器端(Hapi,sequelize ...)。奇迹发生了,应用程序运行并且在启动时速度更快。

我打算使用Inno setup来创建清单文件,它应该很好。

我还没有脱离危险区域,因为开发人员可能需要一个服务器端模块,它具有很大的深度。但是如果它发生的话,我会考虑一下。

更多关注...

回答

1

实际上是在你的NodeJS可以做到以下几点:

你的项目文件夹内1 - 创建另一个文件夹,例如“server_modules”

2,在创建的文件夹创建其他的package.json文件,并安装任何需要服务器那里

3 - 所有这些模块的模块将采用require('module_name')是正常node_modules访问,当您打包的桌面版本,如果你不需要它

你可以删除“server_modules”文件夹

注意:这种方法被一些开发者用来在nodejs中实现微服务,但它在你的情况下很有用

+0

如果我得到这个权利。我可以拥有几乎相同模块的两个文件夹。一个是server_modules,另一个是desktop_modules。如果我deply在线版本,我保留server_modules。 如果我错了,请纠正我,但这会制动应用程序?由于Node.js期望在node_modules中找到模块? –

+0

1-你可以有相同的模块或分开的模块都可以工作 –

+1

2-整个想法nodejs不仅使用“node_modules”加载它使用的模块优先搜索从“node_modules”文件夹开始的模块项目,它将具有最高优先级 –