1

TLDR; 私の質問は次のとおりです。 browserifyrequireを独自の実装でオーバーライドせず、代わりにbrowserifyRequire独自の内部要件すべてに別のメソッド名 (例: ) を使用する方法はありますか? なぜこれを行う必要があるのか​​ を知るために、読んでください...

シナリオ

デフォルトのPhantomJSとは対照的に、CasperJSを使用してSlimerJSで実行する自動テストを作成しようとしています(私が知っている限りでは、PhantomJSでも同じ次の問題に遭遇します)。

これらをCoffeeScriptで記述する方法を知りたいです。結局のところ、CasperJS や SlimerJS は、最近の CoffeeScript ではうまく機能しません。ドキュメントの推奨事項は、casper を実行する前に JS にコンパイルすることです。わかりました...あまり便利ではありませんが、私はそれを処理できます。実際、requireこれらのツールでパスを解決する方法は、Node.js の場合ほど単純ではないこともわかっています。そのため、実行前にバンドルすることも役立つはずです。

しかし今、バンドルされたコードを実行しようとすると、新しい一連の問題に直面しています。そのためにBrowserifyを使用しています。

問題

私のテストコードでは、する必要がありrequire('casper')ます。CasperJS の世界での標準的なプラクティス。そのため、CasperJS をバンドルしないように browserify に指示する必要がありまし"browser": { "casper": false }package.json。これまでのところ問題はありません。しかし、次の問題が発生します。

Browserify は組み込み関数をオーバーライドし、browserify を機能させるすべてのことを行うrequire独自の実装を提供します。requireCasperJS は、require('casper')ディレクティブに遭遇するまで問題ありません。requireこれは、CasperJS が browserifyではなく 'ing'を行う必要があるのは 1 回だけです。そして、それは失敗します。

不完全な解決策

requireCasperJSは独自の方法を実装しているため、CasperJSはBrowserifyがオーバーライドするという事実に対処できないと確信していますrequire。その仮説をテストするために、結果のバンドルを手動で編集し、すべての出現箇所の名前をrequiretoに変更しましたbrowserifyRequire(browserify のrequire. CasperJSrequirerequire('casper')ing require. 実際、これにより期待どおりに機能するようになりました。

質問

繰り返しますが、browserify に独自の internal に別の名前を使用させる方法はありrequireますか? バンドル後にこの変更を行うスクリプトを作成できると思いますが、構成を介してこれを行う方法を見つけたいと思います。

別の質問

たぶん、Browserify の代わりに、CasperJS 内で CoffeeScript をバンドルして実行するための別のソリューションがありますか? 私はまだ1つを見つけていません....

4

1 に答える 1

0

合理的な解決策を見つけました — たとえば、に追加することにより、npmスクリプトとして実行できるものnpm run build-test-bundlepackage.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"
},

この一連のコマンドは、次のことを行います。

  1. browserify -t coffeeify casper-coffee-test.coffeeバンドルをビルドします
  2. | derequirebrowserify の出力をderequireにパイプし、npmすべてのrequirefunctionの名前を deequire に変更します。_dereq_
  3. | sed 's/_dereq_..casper../require(\"casper\")/g'以前の出力をsedコマンドにパイプします_dereq_("casper")
于 2016-04-29T00:10:39.707 に答える