Node.js 在通用/同构应用程序中组织package.json依赖关系

Node.js 在通用/同构应用程序中组织package.json依赖关系,node.js,reactjs,npm,isomorphic-javascript,Node.js,Reactjs,Npm,Isomorphic Javascript,对于React和其他框架,现在通常使用npm和package.json来安装将在前端使用的库。如果您正在开发一个通用/同构应用程序,这会带来一个问题,即前端和后端的依赖项存储在同一个文件中,从而创建大量依赖项列表 如果使用npm--save/--save dev,这两种类型的依赖项(前端、后端)会混合使用,如果不逐一说明,就很难知道在何处使用哪种依赖项 除了手工排序和管理依赖项列表外,还有什么方法可以保持列表整洁?您管理依赖项列表的策略是什么?在通用/同构应用程序中,您可能没有纯粹前端或后端的依

对于React和其他框架,现在通常使用npm和package.json来安装将在前端使用的库。如果您正在开发一个通用/同构应用程序,这会带来一个问题,即前端和后端的依赖项存储在同一个文件中,从而创建大量依赖项列表

如果使用npm--save/--save dev,这两种类型的依赖项(前端、后端)会混合使用,如果不逐一说明,就很难知道在何处使用哪种依赖项


除了手工排序和管理依赖项列表外,还有什么方法可以保持列表整洁?您管理依赖项列表的策略是什么?

在通用/同构应用程序中,您可能没有纯粹前端或后端的依赖项;大多数依赖项是共享的

我想到的一个选项是使用多个
包。json

  • 一个用于同构依赖(react、redux等)和实用程序依赖,如构建系统(babel、webpack等)、任务运行器(gulp、cross-env)、测试(karma)等
  • 一个用于纯前端依赖
  • 一个用于纯后端依赖项

我自己还没有使用过这种结构,我也不确定一个
包.json
是否会更易于维护,因为您将需要管理更多的东西(如果您将npm shrinkwrap添加到其中,它的文件数量将是原来的两倍)。

我非常同意sompylasar的答案,并希望进一步扩展它。我真的认为只有两个不同的package.json文件才能做到这一点

将前端和后端视为两个不同的应用程序。在两个完全不同的环境中,您的打包和构建链需求也将不同

npm的全部要点是每个包都有独立的依赖项。通过与两个完全不相关的应用程序(前端和后端)共享依赖项列表,您将遇到这种情况

想象一下,如果雇佣新的前端开发人员,他们想升级一些前端软件包,那么现在他们必须继续前进,并找出如何运行和/或测试后端,因为他们可能会破坏后端软件包

一开始管理两个
package.json
文件可能会让人觉得有点麻烦,但这种隔离会让你的应用程序在成长过程中保持正常

因此,我建议使用一种结构,其中您有两个兄弟文件夹,每个文件夹都有自己的package.json。确切地说,你想如何构建它取决于你自己

如果您有希望在前端和后端之间共享的核心业务逻辑,那么当然可以将其放在单独的npm包中,然后您可以在后端和前端包中将其作为依赖项引用。
您可以使用
npm link
在前端和后端同时针对同一版本进行开发,以提高开发的舒适性。

像这样的示例中有什么您不喜欢的吗?主要是关于依赖项和依赖项的组织。这些列表最终是海量的,当更新和清理未使用的依赖关系时,很难跟踪它们。考虑使用Bover用于前端依赖管理。它有自己独立于npm的结构。是的,但不适用于被质疑的同构/通用应用程序,后端(生成服务器端HTML的应用程序,而不是带有数据库或API的应用程序)重用几乎所有依赖项,因为在内部,同构/通用应用程序重用服务器端的几乎所有浏览器端模块(不仅仅是“核心业务逻辑”,而是所有视图和UI状态管理)。