javascript - 使用 Browserify 捆绑 CasperJS+SlimerJS 代码?

标签 javascript node.js browserify casperjs slimerjs

TLDR;我的问题是:有没有一种方法可以使 browserify 不使用自己的实现覆盖 require ,而是让它使用不同的方法名称(例如 browserifyRequire )来满足其自己的所有内部需求。要了解为什么我需要这样做,请继续阅读...

场景

我正在尝试使用 CasperJS 编写一些自动化测试并在 SlimerJS 中运行它们——而不是默认的 PhantomJS(尽管据我所知,我会遇到与 PhantomJS 相同的以下问题)。

真的想弄清楚如何在 CoffeeScript 中编写这些内容。事实证明,CasperJS 或 SlimerJS 如今与 CoffeeScript 配合不佳。文档的建议是在运行 casper 之前编译为 JS。好吧...不是很方便,但我可以应付。事实上,我还发现 require 在这些工具中解析路径的方式并不像在 Node 中那么简单,因此在运行之前进行捆绑也应该有所帮助。

但现在我在尝试运行捆绑代码时遇到了一系列新问题。我正在使用 Browserify 来实现这一点。

问题

在我的测试代码中,我需要require('casper')。 CasperJS 世界中的标准实践。因此,我必须通过将 "browser": { "casper": false } 放入我的 package.json 中,告诉 browserify 不要捆绑 CasperJS。到目前为止没有问题。但问题来了:

Browserify 覆盖内置的 require 函数,提供自己的 require 实现,该实现可以完成使 browserify 工作的所有操作。 CasperJS 可以正常使用,直到遇到 require('casper') 指令。这是 CasperJS 必须执行 require'ing 的一次,而不是 browserify。但这失败了。

不完整的解决方案

我非常确定 CasperJS 无法处理 Browserify 覆盖 require 的事实,因为 CasperJS 实现了自己的 require 方式。为了测试这个假设,我手动编辑了生成的包,将每次出现的 require 重命名为 browserifyRequire —— 包括 browserify 的 require 实现。我唯一保持不变的 require 是对 require('casper') 的调用,因为这是我需要 CasperJS 处理 require 的一次。事实上,这使得事情按预期进行。

问题

同样,有没有办法让 browserify 使用不同的名称作为其内部 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"
},

该命令序列执行以下操作:

  1. browserify -t Coffeeify casper-coffee-test.coffee 构建 bundle
  2. | derequire 将 browserify 输出传送到 derequire ,一个将所有出现的 require 函数重命名为 _dereq_
  3. npm
  4. | sed 's/_dereq_..casper../require(\"casper\")/g' 将先前的输出通过管道传输到 sed命令,它替换恢复正常所有出现的_dereq_("casper")

关于javascript - 使用 Browserify 捆绑 CasperJS+SlimerJS 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36752852/

相关文章:

reactjs - 组织一个 React JS 项目 - 构建单个 JS 文件

javascript - JQuery 检测在 iFrame 体内所做的更改

javascript - ng-repeat 只显示第一个迭代的数据

javascript - 使用 ActiveX DeleteFile 时权限被拒绝

javascript - 将 google-api-nodejs-client 与 browserify 捆绑在一起不起作用

javascript - 在 PhantomJS 脚本上使用 `require(' 网页进行 Browserify')`

javascript - 如何在滚动页面的其余部分时将 div 卡在同一位置?

使用nodeJS进行AJAX调用并表示成功,但不显示数据

node.js - FireStore 如果不存在则创建一个文档

Node.js - 使用 azure DocumentDB 和 readDocument(链接、选项、回调)时传递分区键