瞬間.JSとそのメンテナンスモードエントリ


数日前、瞬間.JSチームはプロジェクトのentry to maintenance modeを発表しました.この移行を決めた理由の一つは、

However, Moment was built for the previous era of the JavaScript ecosystem. The modern web looks much different these days. Moment has evolved somewhat over the years, but it has essentially the same design as it did when it was created in 2011. Given how many projects depend on it, we choose to prioritize stability over new features.


非常に古いと広く使用されるプロジェクトの新機能以上の安定性と互換性を維持するためのオプションは新しいです.実際には、request NPMモジュールは、数ヶ月前に同様の移行を行った.
一旦プロジェクトがリリースされると、それが広く採用されるとき、そのライフサイクルのポイントが来るかもしれません.連続して、DEVSも問題の流入と若干の引き要求を得ます.彼らは彼らに対処するために時計回りに働いて、一般にそれで良い仕事をします.
同じエネルギーはエンドユーザには帰せません.開発者が新しい機能、新しいバージョン、または何かを減額させるとき、多くのユーザーにとっては、依存関係ライブラリのベストプラクティスと同期して独自のプロジェクトの使用を維持するインセンティブはほとんどありません.結果として、レガシーや古いAPIを使用したプロジェクトの巨大なトレイルがあります.古いクォークに依存するか、依存関係の長いバグの影響があります.まだパッケージマネージャとGitHubでホストされます.
これにより、ライブラリ開発者が変更を中断するのを防ぐことができます.
より多くの機能が追加されるように、レガシーな振る舞いは浮上し続けなければなりません、そして、結局、CodeBaseはそれが凍らなければならないとき、時が来るように薄弱になります.ただし、依存関係ライブラリを撤回するのと同じではありません.なぜなら、プロジェクトは多くのプロジェクトを中断し、下流プロジェクトのユーザにとってはかなりの混乱を引き起こすからです.
公平であること、瞬間.JSは大きな図書館であり、Chromeの灯台は、他の日付と時刻のライブラリが3倍小さいことを示している.

大きなサイズは、JavaScriptのDate()のコンストラクタよりも日付を作成するのにより多くの柔軟性を提供します.また、複数のロケールとタイムゾーンが束ねられているためです.ほとんどのアプリケーションは、おそらくそれらのすべてで時間を表示する必要はありませんし、特にJavaReptには、Web用にバンドルされている、あなたのCDNの帯域幅には、各ユーザーに送信数ダースのキロバイトを流すことによって多くを保存します.瞬間.JSはそれらを作成する簡単な方法を提供しながら、このすべてを行った.ここでは、両方のリターン3 PM(現在の時刻を想定しているコードの2つのスニペットは、午後3時)です.最初はモーメントを使い、もう一方はJSでネイティブ日付オブジェクトを使います.
(各ペアの2番目のスニペットはhttps://dockyard.com/blog/2020/02/14/you-probably-don-t-need-moment-js-anymoreから貼られた)
// Moment.js
moment().format('h A')
// 3 PM
// Native Date object
Intl.DateTimeFormat('en', { hour: 'numeric' }).format(new Date())
// 3 PM
ご覧のように、最初のスニペットは書くにはずっと短いです.ネイティブの日付オブジェクトの合併症を明示的に示すもう一つの例は、時間とAM/PMと共にタイムゾーン名を得ています.タイムゾーンがPSTであると仮定しましょう.
// Moment.js, requires moment-timezone
var a = moment.tz("America/Los_Angeles");
a.format('h A z'); // 3 PM PST
// Native Date object
let [, tzName] = /.*\s(.+)/.exec((new Date()).toLocaleDateString(navigator.language, { timeZoneName: 'short' }));
let date = Intl.DateTimeFormat('en', { hour: 'numeric' }).format(new Date())
`${date} ${tzName}` // 3 PM PST
最初のスニペットも書くのが簡単で、regexesを含みません.
それで、あなたはすぐに移行するべきですか?あなたが帯域幅を節約するように、あなたがあなたのために働くものを使用してより裕福です.私はいつも言うように、ちょうどそれのために移行しないでください.モーメントは離れて行くつもりはない、それはちょうど新しい機能を取得するつもりはないです.
次の数週間、私は可能なmomentjs選択肢を見て、彼らをここで議論して、彼らがどのように瞬間に対して積み重なるかについて見ます.

そして、我々はしました


読書ありがとう.あなたがこのポストのどんなエラーでも見るならば、私が彼らを訂正することができるように、知らせてください.