web-dev-qa-db-ja.com

babel vs babel-core vs babel-runtime

私のnode webpackプロジェクトは、3つのbabelライブラリを使用しています。これらの違いは何ですか、どのように使用されていますか?

"dependencies": {
  "babel-runtime": "^5.8.24"
}

"dev-dependencies": {
  "babel": "^5.8.23",
  "babel-core": "^5.8.23"
}
59
Kevin Wu

babel-coreはAPIです。 v5の場合、babelパッケージはCLIであり、babel-core。 v6では、babel-cliパッケージはCLIです(CLI binコマンドはまだbabelですが)babelパッケージは何もしません。 babel-runtimeすでに変換されたコードをサポートするための単なるランタイム(ポリフィルとヘルパー)であると思います。

46
JMM

TL; DRここで比較するものは次のとおりです。

  1. babel(5.x.xで使用)vs babel-cli + babel-core(6.x.xで1つを選択)
  2. babel-polyfill(非ライブラリ用)vs babel-runtime + babel-plugin-transform-runtime(ライブラリ用)

https://babeljs.io/blog/2015/10/31/setting-up-babel-6

Babelパッケージはもうありません。以前は、コンパイラ全体とすべての変換に加えて多数のCLIツールでしたが、これは不必要に大きなダウンロードにつながり、少し混乱を招きました。これで、2つの個別のパッケージ、babel-cliとbabel-coreに分割しました。

npm install --global babel-cli

または

npm install --save-dev babel-core

CLIからBabelを使用する場合はbabel-cliをインストールできます。Node APIを使用する場合はbabel-coreをインストールできます。

babel-runtimeは、グローバルスペースを汚染するbabel-polyfillとは異なり、グローバルスペースを汚染しないpolyfillのみを許可します。 http://babeljs.io/docs/plugins/transform-runtime/ から:

[babel-runtime]は、グローバルを汚染することなくコードを自動的にポリフィルします。 (このプラグインはライブラリ/ツールで推奨されます)

Babel-runtimeを使用する場合は、以下も行う必要があります

npm install --save-dev babel-plugin-transform-runtime

ほとんどの場合、babel-plugin-transform-runtimeを開発の依存関係(--save-devを使用)としてインストールし、babel-runtimeを本番の依存関係(--saveを使用)としてインストールする必要があります。

変換プラグインは通常、開発でのみ使用されますが、ランタイム自体はデプロイ/公開されたコードに依存します。

また、babel-runtime + babel-plugin-transform-runtimeとbabel-polyfillは一般に相互に排他的です。つまり、どちらか一方のみを使用する必要があります。ここのコメントから http://jamesknelson.com/the-six-things-you-need-to-know-about-babel-6/

Babel-polyfillまたはbabel-runtimeを使用する必要があります。これらは相互に排他的です。もちろん、自分が何をしているかを知っている場合を除きます。しかし、それらは本質的に同じものです。これらは単なるヘルパーです。 babel-polyfillはグローバルを変更することで同じ目標を達成しますが、babel-runtimeはモジュール的に変更します。ライブラリを開発している場合を除き、ポリフィルを使用することをお勧めします。

21
Kevin

バベル6について知っておくべき6つのこと 引用するために、それを非常によく説明しました

Babel npmパッケージはもう存在しません。代わりに、Babelは複数のパッケージに分割されています。

babel-cliにはbabelコマンドラインインターフェースが含まれ、babel-coreにはNode APIが含まれ、必要な場合はフックbabel-polyfillが必要です。偶発的な競合を避けるため、package.jsonからbabelやbabel-coreなどの以前のBabelパッケージを削除してから、npmをアンインストールしてください。

1
Qiulang