【发布时间】:2016-04-20 19:00:59
【问题描述】:
TLDR;我的问题是:有没有办法让 browserify 不会用自己的实现覆盖require,而是让它使用不同的方法名称(例如browserifyRequire)来满足自己的所有内部需求。要了解我为什么需要这样做,请继续阅读...
情景
我正在尝试使用 CasperJS 编写一些自动化测试并在 SlimerJS 中运行它们——而不是默认的 PhantomJS(尽管据我所知,我会遇到与 PhantomJS 相同的以下问题)。
我真的想弄清楚如何在 CoffeeScript 中编写这些。事实证明,CasperJS 或 SlimerJS 现在在 CoffeeScript 上表现不佳。文档的建议是在运行 casper 之前编译为 JS。好的...不是超级方便,但我可以处理它。事实上,我还发现require 在这些工具中解析路径的方式并不像在 Node 中那样简单,因此在运行之前进行捆绑也应该有所帮助。
但现在我在尝试运行捆绑代码时遇到了一系列新问题。为此,我正在使用 Browserify。
问题
在我的测试代码中,我需要require('casper')。 CasperJS 世界的标准实践。所以我不得不告诉browserify不要捆绑CasperJS,把"browser": { "casper": false }放在我的package.json中。到目前为止没有问题。但问题来了:
Browserify 覆盖了内置的require 函数,提供了自己的require 实现,它完成了使browserify 工作的所有事情。在遇到require('casper') 指令之前,CasperJS 可以很好地处理它。这是 CasperJS 必须执行 require'ing 的一次,而不是 browserify。这失败了。
不完整的解决方案
我很确定 CasperJS 无法处理 Browserify 覆盖 require 的事实,因为 CasperJS 实现了自己的 requireing 方式。为了验证这个假设,我手动编辑了生成的包,将每次出现的require 重命名为browserifyRequire——包括browserify 对require 的实现。我唯一保持不变的require 是对require('casper') 的调用,因为这是我需要CasperJS 处理requireing 的一次。事实上,这使事情按预期工作。
问题
再一次,有没有办法让 browserify 为自己的内部 require 使用不同的名称?我想我可以在捆绑后编写一个脚本来进行此更改,但我更愿意通过配置弄清楚如何做到这一点。
另一个问题
也许除了 Browserify 之外,还有另一种在 CasperJS 中捆绑和运行 CoffeeScript 的解决方案?我还没找到……
【问题讨论】:
标签: javascript node.js browserify casperjs slimerjs