使用 Browserify 为 CasperJS+SlimerJS 捆绑代码?
Bundling code for CasperJS+SlimerJS using Browserify?
TLDR;我的问题是:有没有办法让 browserify 不使用自己的实现覆盖 require
,而是让它使用不同的方法名称(例如 browserifyRequire
)来满足其所有内部要求。要了解我为什么需要这样做,请继续阅读...
情景
我正在尝试使用 CasperJS 编写一些自动化测试并 运行 在 SlimerJS 中使用它们——而不是默认的 PhantomJS(尽管据我所知,我会 运行 进入以下问题与 PhantomJS 相同)。
我真的想弄清楚如何在 CoffeeScript 中编写这些内容。事实证明,如今 CasperJS 或 SlimerJS 与 CoffeeScript 配合得不好。文档的建议是在 运行ning casper 之前编译为 JS。好吧...不是很方便,但我可以应付。事实上,我还发现 require
在这些工具中解析路径的方式并不像在 Node 中那样简单,因此在 运行ning 之前进行捆绑应该也会有所帮助。
但是现在我在尝试 运行 捆绑代码时 运行 遇到了一系列新问题。我正在为此使用 Browserify。
问题
在我的测试代码中,我需要require('casper')
。 CasperJS 世界的标准实践。所以我不得不通过将 "browser": { "casper": false }
放入我的 package.json
来告诉 browserify 不要捆绑 CasperJS。到目前为止没有问题。但是接下来问题来了:
Browserify 覆盖了内置的 require
函数,提供了它自己的 require
实现,它完成了使 browserify 工作的所有事情。在遇到 require('casper')
指令之前,CasperJS 可以正常使用它。那是 CasperJS 必须执行 require
ing 而不是 browserify 的一次。那失败了。
不完整的解决方案
我很确定 CasperJS 无法处理 Browserify 覆盖 require
的事实,因为 CasperJS 实现了自己的 require
ing 方式。为了验证这个假设,我手动编辑了生成的包,将每个出现的 require
重命名为 browserifyRequire
—— 包括 browserify 对 require
的实现。我唯一保持不变的 require
是对 require('casper')
的调用,因为那是我需要 CasperJS 来处理 require
ing 的一次。事实上,这让事情按预期进行。
问题
同样,有没有办法让 browserify 为其内部使用不同的名称 require
?我想我可以编写一个脚本来在捆绑后进行此更改,但我更愿意弄清楚如何通过配置来完成此操作。
另一个问题
也许在 CasperJS 中有另一种捆绑和 运行ning CoffeeScript 的解决方案而不是 Browserify?我还没找到....
找到了一个合理的解决方案 — 可以 运行 作为 npm
脚本,例如 npm run build-test-bundle
添加到 package.json
"scripts": {
"build-test-bundle": "browserify -t coffeeify casper-coffee-test.coffee | derequire | sed 's/_dereq_..casper../require(\"casper\")/g' > casper-coffee-test.compiled.js"
},
此命令序列执行以下操作:
TLDR;我的问题是:有没有办法让 browserify 不使用自己的实现覆盖 require
,而是让它使用不同的方法名称(例如 browserifyRequire
)来满足其所有内部要求。要了解我为什么需要这样做,请继续阅读...
情景
我正在尝试使用 CasperJS 编写一些自动化测试并 运行 在 SlimerJS 中使用它们——而不是默认的 PhantomJS(尽管据我所知,我会 运行 进入以下问题与 PhantomJS 相同)。
我真的想弄清楚如何在 CoffeeScript 中编写这些内容。事实证明,如今 CasperJS 或 SlimerJS 与 CoffeeScript 配合得不好。文档的建议是在 运行ning casper 之前编译为 JS。好吧...不是很方便,但我可以应付。事实上,我还发现 require
在这些工具中解析路径的方式并不像在 Node 中那样简单,因此在 运行ning 之前进行捆绑应该也会有所帮助。
但是现在我在尝试 运行 捆绑代码时 运行 遇到了一系列新问题。我正在为此使用 Browserify。
问题
在我的测试代码中,我需要require('casper')
。 CasperJS 世界的标准实践。所以我不得不通过将 "browser": { "casper": false }
放入我的 package.json
来告诉 browserify 不要捆绑 CasperJS。到目前为止没有问题。但是接下来问题来了:
Browserify 覆盖了内置的 require
函数,提供了它自己的 require
实现,它完成了使 browserify 工作的所有事情。在遇到 require('casper')
指令之前,CasperJS 可以正常使用它。那是 CasperJS 必须执行 require
ing 而不是 browserify 的一次。那失败了。
不完整的解决方案
我很确定 CasperJS 无法处理 Browserify 覆盖 require
的事实,因为 CasperJS 实现了自己的 require
ing 方式。为了验证这个假设,我手动编辑了生成的包,将每个出现的 require
重命名为 browserifyRequire
—— 包括 browserify 对 require
的实现。我唯一保持不变的 require
是对 require('casper')
的调用,因为那是我需要 CasperJS 来处理 require
ing 的一次。事实上,这让事情按预期进行。
问题
同样,有没有办法让 browserify 为其内部使用不同的名称 require
?我想我可以编写一个脚本来在捆绑后进行此更改,但我更愿意弄清楚如何通过配置来完成此操作。
另一个问题
也许在 CasperJS 中有另一种捆绑和 运行ning CoffeeScript 的解决方案而不是 Browserify?我还没找到....
找到了一个合理的解决方案 — 可以 运行 作为 npm
脚本,例如 npm run build-test-bundle
添加到 package.json
"scripts": {
"build-test-bundle": "browserify -t coffeeify casper-coffee-test.coffee | derequire | sed 's/_dereq_..casper../require(\"casper\")/g' > casper-coffee-test.compiled.js"
},
此命令序列执行以下操作: