2016-07-14 4 views
1

これは私が作ることができる最も簡単な方法です。 babel js -d lib --presets es2015バベルは、特定のシーンにアンダースコアを付けた変数に接頭辞を付けます。

"use strict"; 

var _a = { 
    a: function a() { 
     _a.b; 
    } 
}; 

のorignal

var a = { 
    a: function() { 
     a.b; 
    } 
}; 

それは広範囲にそれを使用しています私の既に書かれたコードを台無しにグローバル変数を変更します。親と子が同じ名前を持ち、子の中のいずれかの親プロパティのフォームにアクセスしようとした場合にのみ発生することに注意してください。

名前が同じでない場合(a)、またはルートオブジェクトのプロパティ(a.b)にアクセスしない場合は、アンダースコアが追加されません。

また、アンダースコアにはes2015プリセットが付いていることがわかりましたが、これは私が持っている唯一のプラグインなので意味があります。

+0

の1に

var a = { 

正確にあなたの質問は何ですか? – Timo

+0

アンダースコアを追加するのを止めるにはどうしたらいいですか?私のコードはすべてそのグローバル変数を使用します。名前を変更しないことが重要です。 – Achshar

答えて

2

Babelは、ファイルの最上位スコープはグローバルスコープではなくモジュールスコープであると想定しているため、変数名の変更は安全です。何かをグローバルにしたい場合は、それを明示的に表現する方がよいでしょう。

global.a = { 
window.a = { 
+0

これはそれでした!ありがとう! :) – Achshar

+0

私はこの論理に疑問を呈するケースを見ました。大部分は、角度の依存性注入ロジックと関係しています。 Angularは関数の引数を明示的に見ます。そのため、論理がアンダースコアを作成するときに除外する必要があることがあります。アンダースコアを含めるか除外するためのオプションがあるかどうか知っていますか?私は正確なプラグインがこれをしているかどうかも分かりません。 – trysis

+0

あなたはおそらくhttps://www.npmjs.com/package/babel-plugin-angularjs-annotateに興味があります。残念ながら、あなたが見ている行動は避けられません。有効なES6機能を作成するには、名前を変更する必要があります。 '.toString'の動作AngularはECMAScript仕様では保証されていませんが、それに頼るのは貧しい選択でした。 – loganfsmyth

関連する問題