2015-09-11 6 views
18

ノードv4.0.0がリリースされました。このノードのバージョンは、util.isArrayutil.isRegEx、utilのような多くの機能を非難しました。 isDate,util.isBooleanなどが挙げられる。なぜ多くのutil.is *関数がnode.js v4.0.0で廃止されましたか?

なぜこれがノードに起こったのか知りたいですか?

これらのことはES6にもネイティブでサポートされていますか?

ノードはこれらのものの代わりにより良い解決策を提供していますか?

+0

[changelog](https://github.com/nodejs/node/blob/v4.0.0/CHANGELOG.md#20140501-version-01113-unstable)が表示された場合は、 'util:made util.isArray a direct alias Array.isArray(Evan Carroll)のための '。ノードはJS関数を直接呼び出していたので、エイリアスを保持する必要はありません。直接ネイティブ関数を呼び出してください。 – Tushar

答えて

23

util.is*()機能を廃止する決定は、2015年4月にNode.js技術運営委員会(TSC)で最初に行われました。その時点ではまだio.jsでしたが、現在は同じ委員会になっていますNode.js TSCと彼らが話していたコードベースは、Node.js 4.0.0となったものです。

minutes from the meetingはオンラインです。だからあなたはそれを読むことができ、秤量された賛否両論を見ることができます。それらの数分で問題の明確な声明バートBelderからかもしれません:

私たちはこれらを廃止したい理由はそれは後方互換性がないことになるので、我々は本当にそれを修正したくないということですので、これは実際にありますコアになるには大きすぎます。

(残念ながら、分の文脈が不足しているようですが、私は他のソースからいくつかの文脈を掘り下げて参考にすることができます。)

UPDATE:推論は、このようなものであるようないくつかのTSC minutes from Februarydiscussion in a pull request from the same monthから判断すると、それはそう:

ねえ、util.isObject()返す関数についてfalseのように見えます。それは正しくありません。関数はオブジェクトです。それはtrueを返す必要があります。しかし、その変更を加えることで、Nodeエコシステムの大きな部分が破損する可能性があります。その動作に依存しているかもしれないnpmのすべてのモジュールを考えてみてください。驚くべきことに生態系を破壊する危険を避けるために、何とか大量のコードを見直さなければなりません。そして、急激な変化は完全に後方互換性のないものになります。すべては、実際にコアに属していなくても、ユーザーランドモジュールによって簡単に提供される便利な機能のためのものです。 (core-util-isなどを参照してください)util.isObject()を修正するだけで、ブレークチェンジとセブン・バンプを導入するのではなく、最初に実行していたはずのことをコアにしてはいけません。

util.is*()の機能には、他のコーナーケースが潜んでいる可能性がありました。

プロジェクトの哲学は、一般的に最小のコアを持つことです。すべてのことが等しい、何かがユーザランドモジュールによってあまり問題なく提供されることができれば、それはコアではなくユーザランドモジュールに居なければなりません。

これは私がテキストの一部から多くの推論を引き出すことですが、そのことは多かれ少なかれ廃止予定だと思います。

1

node.js専門家が、これらの機能は、(彼らは名前が言うんならば)簡単にthe changelogによると

[] instanceof Array; // true 
/* or */ Array.isArray([]); // true 

(/(?:)/g) instanceof RegExp; // true 

new Date() instanceof Date; // true 

new Boolean(true) instanceof Boolean; // true 
/* or */ typeof false == 'boolean'; 
/* or even */ var bool1 = true, bool2 = false; 
!!bool1 === bool1; // true 
!!bool2 === bool2; // true 

に置き換えることができない。

util.is*()機能が廃止されました、このリリースのドキュメンテーションの廃止予定の警告から始めて、npmレジストリでより堅牢な選択肢を探すことをお勧めします。

彼らは述べ、this dialogにつながる推論の一部が含まれているこのpull requestリンク:私たちはこれらを廃止したい理由は、私たちは本当にそれがなるので、それを修正したくないということです

を後方互換性がないので、これは実際にはコアになるには大きすぎます。

要するに、これらの機能はバグであり、バグを修正して後方互換性を破る代わりに、代わりに非難することにしました。

これらのことを十分に頻繁にチェックする必要がある場合は、必要に応じて独自の関数を記述できます。

+2

あなたは本当の質問に答えていないと思います。なぜ、多くの関数がノードの新バージョンv4.0.0でutilから廃止されたのですか? – Tushar

+0

@Tusharはい、それは部分的な答えです。「ES6にこれらのものがネイティブでサポートされていますか? ://stackoverflow.com/help/how-to-answer)。あなたはいつでも自分の答えを編集したり自分のことを投稿することができます。私の答えは決して悪いことではなく、完全ではないからです。 – Xufox

+0

タイプチェックにはhttp://toddmotto.com/understanding-javascript-types-and-reliable-type-checking/を追加できます。下にスクロールする – Tushar

関連する問題