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
,而不是 browserify。那失败了。
不完整的解决方案
我很确定 CasperJS 无法处理 Browserify 覆盖的事实require
,因为 CasperJS 实现了自己的require
ing 方式。为了验证这个假设,我手动编辑了生成的包,将每次出现的 重命名require
为browserifyRequire
- 包括 browserify 的require
. 我唯一require
没有改变的是对 的调用require('casper')
,因为那是我需要 CasperJS 处理require
ing 的一次。事实上,这使事情按预期工作。
问题
同样,有没有办法让 browserify 使用不同的名称作为它自己的内部名称require
?我想我可以在捆绑后编写一个脚本来进行此更改,但我更愿意通过 config.xml 弄清楚如何做到这一点。
另一个问题
也许除了 Browserify 之外,还有另一种在 CasperJS 中捆绑和运行 CoffeeScript 的解决方案?我还没有找到一个......