2016-04-20 55 views
1

TLDR;我的問題是:有沒有一種方法可以讓browserify NOT override require具有自己的實現,而是使用不同的方法名稱(例如browserifyRequire)滿足其自身的內部需求。要找出爲什麼我需要這樣做,請繼續往下看......使用Browserify爲CasperJS + SlimerJS打包代碼?

我試圖使用CasperJS和SlimerJS運行他們一些自動化測試寫的情景 - 而不是默認的PhantomJS (儘管我知道,我會碰到與PhantomJS相同的以下問題)。

真的想弄清楚如何在CoffeeScript中編寫這些代碼。事實證明,現在CasperJS或SlimerJS在CoffeeScript上做得並不好。文檔的建議是在運行casper之前編譯爲JS。好的...不是很方便,但我可以處理它。事實上,我還發現require解決這些工具中的路徑並不像在Node中那樣簡單,所以在運行之前捆綁也應該有幫助。

但是現在我在嘗試運行捆綁代碼時遇到了一系列新問題。我正在使用Browserify。

的問題

在我的測試代碼,我需要require('casper')。 CasperJS世界的標準做法。所以我必須告訴瀏覽不要綁定CasperJS,把"browser": { "casper": false }放在我的package.json。到目前爲止沒有probs。但問題來了:

Browserify覆蓋了內置的require函數,它提供了它自己的require的實現,它可以完成所有使得瀏覽工作的事情。 CasperJS很好,直到它遇到require('casper')指令。這是CasperJS必須執行require'ing,而不是browserify。那失敗了。

的不完整的解決方案

我敢肯定那只是CasperJS無法處理與Browserify覆蓋require,因爲CasperJS實現自己require ING方式的事實。爲了測試該假設,我手動編輯了結果包,將require的每次重命名重命名爲browserifyRequire - 包括browserify的require的實現。我唯一保留的require是撥打require('casper'),因爲那是我需要CasperJS來處理require ing的一次。事實上,這使事情按預期工作。

問題

再次,有沒有一種方法,使browserify使用不同的名稱爲自己的內部require?我想我可以在捆綁後編寫一個腳本來做這個改變,但我更想知道如何通過配置來實現這一點。

替代的問題

的也許不是Browserify有捆綁和運行CoffeeScript的內部CasperJS另一種解決辦法?我還沒有找到一個....

回答

0

找到一個合理的解決方案 - 通過向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" 
}, 

命令序列可以運行作爲一個npm腳本之一,例如npm run build-test-bundle執行以下操作:

  1. browserify -t coffeeify casper-coffee-test.coffee構建束
  2. | derequire將browserify輸出管道輸入到derequirenpm,renam ES require功能的所有出現_dereq_
  3. | sed 's/_dereq_..casper../require(\"casper\")/g'管以前輸出到sed命令,它取代恢復正常需要所有的_dereq_("casper")
出現
相關問題