- 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になる・・・
さて困りました。
仕様です
top level this が undefined になっちゃう振る舞いは仕様上正しいんだけど、 babel がやるバグだと思ってissueあげちゃう人が多くて、 フラストレーション溜まってるらしいから上げないようにしようね。 https://t.co/3Wm6OKqbza
— Yosuke FURUKAWA (@yosuke_furukawa) 2015, 4月 27
どうすれば
仕様なのはわかったけど結構困る。
結局、うまいやり方が思いつかんかったのでこうしました。
コメントでナイスなやり方を教えていただきましたのでそれを。
(function (global) { // 今まで通り書ける! })(typeof global !== 'undefined' ? global : window);
もっと分岐が必要になったらもっとtry/catchすればええんや!!1
うまいやり方あったら教えてください。