使用 Browserify 捆绑 CasperJS+SlimerJS 的代码
Bundling code for CasperJS+SlimerJS using Browserify?
TLDR;我的问题是:有没有办法让浏览器化不用自己的实现覆盖require
,而是让它使用不同的方法名称(例如 browserifyRequire
)的所有内部要求。要了解为什么我需要这样做,请继续阅读...
场景
我正在尝试使用 CasperJS 编写一些自动化测试并在 SlimerJS 中运行它们——而不是默认的 PhantomJS(尽管据我所知,我在 PhantomJS 中会遇到相同的以下问题)。
我真的很想弄清楚如何在CoffeeScript中编写这些。事实证明,CasperJS或SlimerJS现在在CoffeeScript上表现不佳。文档的建议是在运行 casper 之前编译为 JS。还行。。。不是很方便,但我可以处理它。事实上,我还发现require
在这些工具中解析路径的方式并不像在 Node 中那样简单,因此在运行之前捆绑也应该有所帮助。
但是现在我在尝试运行捆绑代码时遇到了一组新问题。我正在使用浏览器化。
问题所在
在我的测试代码中,我需要require('casper')
.CasperJS世界中的标准做法。所以我不得不告诉浏览器不要捆绑CasperJS,把"browser": { "casper": false }
放在我的package.json
里。到目前为止没有问题。但接下来的问题来了:
Browserify 覆盖内置的 require
函数,提供自己的require
实现,该实现可以完成使浏览器化工作的所有操作。CasperJS在遇到require('casper')
指令之前都很好。这是CasperJS必须做require
的一次,而不是浏览器化。这失败了。
不完整的解决方案
我很确定CasperJS无法处理Browserify覆盖require
的事实,因为CasperJS实现了自己的require
方式。为了验证这一假设,我手动编辑了生成的捆绑包,将出现的require
重命名为browserifyRequire
- 包括浏览器对require
的实现。我唯一没有改变require
就是对require('casper')
的调用,因为那是我需要CasperJS来处理require
的一次。事实上,这使得事情按预期进行。
问题
同样,有没有办法让浏览器化为其自己的内部require
使用不同的名称?我想我可以编写一个脚本来在捆绑后进行此更改,但我更愿意弄清楚如何通过配置来做到这一点。
另一个问题
也许除了Browserify之外,还有另一种解决方案可以在CasperJS中捆绑和运行CoffeeScript?我还没有找到一个....
找到了一个合理的解决方案——一个可以作为npm
脚本运行的解决方案,例如通过添加到package.json
来npm run build-test-bundle
"scripts": {
"build-test-bundle": "browserify -t coffeeify casper-coffee-test.coffee | derequire | sed 's/_dereq_..casper../require('"casper'")/g' > casper-coffee-test.compiled.js"
},
此命令序列执行以下操作:
-
browserify -t coffeeify casper-coffee-test.coffee
构建捆绑包 -
| derequire
通过管道将浏览器输出发送到 derequire,这是一个将require
函数的所有匹配项重命名为_dereq_
npm
-
| sed 's/_dereq_..casper../require('"casper'")/g'
将以前的输出通过管道传输到 sed 命令,该命令将替换回正常需要所有出现的_dereq_("casper")
- 从桌面读取python文件时高亮显示代码
- 如何将函数包装在函数中以避免代码重复
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 货币代码为欧元-金额的格式不应包含小数
- Regex代码只允许一个空格
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 从var向代码隐藏函数传递值
- 如何动态插入jquery代码
- 如何在php变量中嵌入JQuery代码
- 代码不会验证
- 如何从rails中的代码中删除新行( )
- 使用 Browserify 捆绑 CasperJS+SlimerJS 的代码
- 为什么获胜't我的CasperJS代码登录到Quora
- 为什么casperjs会用无效的javascript代码静默地终止?
- 如何在casperjs脚本的末尾执行代码
- 我如何从这个casperjs代码中删除堆栈溢出(使用setTimeout)
- 如何添加json没有复制(包括CasperJS代码)
- CasperJS:下拉列表;选择一个选项,代码可以在浏览器中工作,但不能在幻影中工作
- 为什么代码不起作用(使用 casperjs 提交表单)
- 在Casperjs的evaluate函数中执行JQuery或JS代码不能正确地使用suggestion字段