【问题标题】:Can you use browserify without bundling?您可以在不捆绑的情况下使用 browserify 吗?
【发布时间】:2014-07-18 20:34:44
【问题描述】:

我有很多同事和朋友正在使用现有的棕地、凌乱的 javascript 应用程序,他们希望开始过渡到某种 js 模块系统。我过去曾试图通过向他们展示如何重构为 requirejs 来帮助他们,但我开始认为这是一种不好的方法。

问题通常是他们的全局代码的性质与 AMD 的异步性质相冲突,尽管我相信 AMD 方法,但他们比我在进行模块加载的“正确”方式。

与此同时,Browserify 消除了异步考虑并且更直接,但增加了整个构建步骤。对于不使用捆绑或任何类型的构建过程(或只是 Visual Studio 中的默认构建过程)的人来说,这又是太多的开销。

所以我真正想要的是一个简单的模块系统,它允许人们使用definerequire 的东西。这是使事情正常工作的半步,它们可以将它们的依赖项包含在常规脚本标记中,并手动将它们定义到模块系统中。 I even wrote such a system 因为...嘿,这真的很容易。

今天有人向我指出,实际上应该可以只使用 Browserify 的客户端部分来实现这一点。我同意。但是,我真的无法在任何地方找到任何文档,也无法单独找到 Browserify 客户端的东西。

【问题讨论】:

  • 我怀疑这是不可能的......你必须在每次页面加载时在客户端运行整个 browserify 进程,这通常是秒级的。 Browserify 非常神奇,但我相信您需要服务器端捆绑才能使其工作......
  • @urban_racoons 但是browserify生成的包不是基本上每个js文件都被define(...)包围并连接在一起吗?为什么你不能从你的应用程序中手动调用定义?或者它做了更多的事情?我不太确定,因为——正如我所暗示的——我完全属于 AMD 阵营。

标签: client-side browserify javascript


【解决方案1】:

坐下来剖析构建的 browserify 文件后,我得出的结论是,不,我想做的事情是不可能的。

一方面,browserify 似乎没有公开定义甚至是要求关键字。另一方面,它对组合模块进行了一些小的重写,这在运行时很难实现。

【讨论】:

【解决方案2】:

我遇到了一个与 Browserify 配合得很好的动态模块加载器。您可以将其用于开发以在客户端全局公开“require”。效果很好。

https://github.com/manvalls/drq

【讨论】:

  • 当然,但这并不适用于使用依赖项的棕地代码未编写为异步回调的所述问题。这看起来很酷,但如果您是从一个新应用程序开始,为什么不做一些类似 jspm 的事情呢?
  • 我相信你是对的。在这个地方获得分数太难了!
【解决方案3】:

您的问题的解决方案可能是:

https://github.com/LarsBV/browser-node-loader

由于浏览器中的各种源映射错误以及太多/替代方案,我写了这个, gulp/browserify/watchify中的配置方式。

它有一个构建步骤,但只需要在有新依赖项时运行。

我不建议将这种方法用于生产,但它在开发中要容易得多。

这是非常新的,除了最新的 chrome、firefox 之外未经测试,并进行了一些调整 在生成的脚本中,我认为它甚至可以在 ie6 中工作。

【讨论】:

  • 谢谢,这很有趣,但与我想使用 browserfy 的目的完全相反。我不是在寻找模块加载。重写现有的杂乱项目以进行模块加载非常困难。我只想要它的模块系统部分。正如您所说-您的项目不适用于生产。我的目的是专门帮助将现有代码转换为更好的架构。
猜你喜欢
  • 2018-09-16
  • 1970-01-01
  • 2014-02-20
  • 2016-06-19
  • 2013-12-31
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多