Browser 在浏览器端管理多个NPM模块

Browser 在浏览器端管理多个NPM模块,browser,requirejs,npm,browserify,Browser,Requirejs,Npm,Browserify,好吧,我看了又看,没有看到一个像我一样的问题,也没有看到一个完全满足我需求的项目。这可能是因为我在做一些疯狂的事情,我也在要求一些困难的事情。但我想看看别人怎么想 我正在构建我的第一个大型单页应用程序。我设置它的方式是将它分解为多个NPM模块。我喜欢这一点,因为NPM提供了一个很好的环境来构建纯节点运行的单元测试,一种为我们公司的其他项目重用我的一些代码的方法,以及一种强制分离关注点的方法。以下是总体思路: 核心数据模型库 核心用户界面库 一个psuedo库,提供基于上述两个 …另一个 …等,

好吧,我看了又看,没有看到一个像我一样的问题,也没有看到一个完全满足我需求的项目。这可能是因为我在做一些疯狂的事情,我也在要求一些困难的事情。但我想看看别人怎么想

我正在构建我的第一个大型单页应用程序。我设置它的方式是将它分解为多个NPM模块。我喜欢这一点,因为NPM提供了一个很好的环境来构建纯节点运行的单元测试,一种为我们公司的其他项目重用我的一些代码的方法,以及一种强制分离关注点的方法。以下是总体思路:

  • 核心数据模型库
  • 核心用户界面库
  • 一个psuedo库,提供基于上述两个
  • …另一个
  • …等,用于我的应用程序的每个子应用程序
  • 一个非常小的中心项目,根据需要将上面提供的所有组件拉到一个接口中
这意味着有许多库和许多常见的依赖项(下划线、矩、EventEmitter2等)

现在我需要弄清楚如何将所有这些代码放到浏览器中。理想情况下,我想要一些具有browserify特性的东西(将模块和依赖项合并到单个文件中,以减少资源回调),但有一些requirejs的异步加载DNA(我宁愿不必预先加载整个应用程序;在用户导航时能够调用块是很有用的)

不过,我在协调上述方面遇到了困难。我得到了Require想要做的事情,但每次我尝试将其用于已经构建的NPM模块(不是AMD模块,尽管我很高兴以AMD的方式编写该中心项目)我真的很困惑,觉得它不是真正适合我的。对于一个单页应用程序来说,它似乎只是将所有内容解析为一个文件,因为我的动态资源是整个依赖项,而不是单个文件?当然,Browserify的唯一目的是将所有代码分解成一个文件我可以用Browserify单独绑定每个NPM模块,但是我会复制每个模块的公共依赖项

我看过很多其他的项目,它们似乎更多的是针对客户端而不是捆绑端。我在这里遗漏了什么


[在白日梦模式下,我也喜欢inject,部分原因是它是由LinkedIn编写的(在我心目中,LinkedIn享有很好的声誉),但也因为它的本地存储缓存。]

您认为NPM模块将如何运送到浏览器中。我可以看到如何将节点样式的模块文件重新打包到某个连接块中,但如何将NPM模块转换为在浏览器中运行的模块?一些模块已编译(本机代码)组件/需求。您还必须确保其他模块常用的节点的fs、sys和其他模块也捆绑在一起。我看到您保持理智的唯一方法是在节点中“为浏览器编写代码”。这意味着,对于发送到浏览器的内容,您不依赖节点的本机/NPM。两个答案基本上是相同的“为节点中的浏览器编码”:a)我不依赖任何不纯粹的东西。我需要下划线和EventEmitter2等纯js库。b)例如,Browserify在所有必要的情况下都提供节点stdlib垫片、模拟或传递。在我的情况下,我不需要或利用此功能。太好了。你的(a)(b)基本上允许您在上面以AMD模式编写代码,同时以CommonJS风格编写依赖项“你的项目。目前支持AMD和CommonJS模块的最稳定的构建工具是“r.js”。我正在为PruneJS项目做贡献,该项目试图成为一个更友好的r.js,但PruneJS仍然是测试版。看看“r.js”,谢谢你的推荐;在发布这篇文章之前,我试过r.js,它似乎因为神秘的原因对我感到不安。等我有机会再看一看。