🧊

Babelで top level this が undefinedになって困った件

  • ES6使いたいしBabelでやろう
  • でも実行環境は今と同じ
  • よってnodeでもブラウザでも動くようにしたい

よーし、

;(function(global) {
  
  class Foo {};

  let isNode    = 'process'  in global,
      isBrowser = 'document' in global;
  
  if (isNode) {
    module.exports = Foo;
  }
  else if (isBrowser) {
    global.Foo = Foo;
  }
  
}(this.self || global)); // このグローバルなthisがバベるとundefinedになる・・・

さて困りました。

仕様です

どうすれば

仕様なのはわかったけど結構困る。

結局、うまいやり方が思いつかんかったのでこうしました。
コメントでナイスなやり方を教えていただきましたのでそれを。

(function (global) {

  // 今まで通り書ける!

})(typeof global !== 'undefined' ? global : window);

もっと分岐が必要になったらもっとtry/catchすればええんや!!1

うまいやり方あったら教えてください。