2016-08-30 7 views
4

私はnpmの左パッドの失敗について読んできましたが、どうなったのか多少混乱しています。私は、npmが実際にどのように動作するか誤解していると思います。左パッドの開発者がパッケージを公開しなかった場合、私はnpm install left-padがもう動作しないと仮定します。しかし、すでにインストールしているユーザーの場合、left-padはnode_modulesフォルダに残っていませんか? Babelの開発者は、パッケージが消えたことを認識するために、npmのために左パッドを取り外して再取り付けする必要はありませんか?私は明らかに何かを見逃しているが、私は何が分からない。npmの左パッドブレークコードの未公開はどうでしたか?

+2

あなたはNPMを誤解しているわけではありません。あなたはその時のクリックベイトのタイトルを誤解しています。これは、 'package.json'から' npm install'を試してみたら、文字通り実行時ではなく 'left-pad'を参照してしまうと壊れることになります。私は「どの人がインターネットを壊したか」という行に沿ってタイトルを見てきました。一口。 –

答えて

6

npm install babelを実行すると、左パッドはバベルにバンドルされず、むしろpackage.jsonファイルの依存関係として表現されます。したがって、npmは左パッドを見つけてダウンロードする必要があります。したがって、左パッドを使用している場合や、左パッドを使用している場合は、初めて使用することはできません。これはローカルディレクトリに既に存在する場合は安全だが、プロジェクトは別の場所に構築されるとすぐに正しく構築されないことになります。たとえば、新しいチェンジセットごとにゼロからクリーンビルドを実行するCIサーバーは、左パッドに依存するすべてのプロジェクトを構築できません。また、初めてプロジェクトをチェックアウトしたり、新しいサーバーにデプロイすると、ビルドできなくなります。

これは、左パッドに直接依存していた場合に修正するのは簡単です。置換えを作成し、置換えを使用するようにコードを更新するだけです。しかし、それがあなたの依存ツリーの中で深く必要とされるとき、例えばバベルによって、バブルや他のモジュールを自分でリファクタリングして、左パッド置換えを使うことはできないでしょう。さまざまなノードモジュール開発者のすべてが自分のモジュールを別のもので更新して再発行するのを待たなければなりません。

ニュース記事のように黙っているわけではありませんが、大変不便ですし、左パッドが既にキャッシュされている開発者ワークスペース外の多くのシステムでレンチを投げます。

+0

Ninja'd。あなたが依存関係の依存について話すのを忘れました、もし私がその出来事を覚えていれば、それが主な問題でした。しかし、良い解説:) – DrakaSAN

+0

@DrakaSANそれは本当に良い点です、ありがとう。更新されます。 –

+0

ありがとう!これは理にかなっています(:あなたがすでに依存関係をリファクタリングするのは本当に難しいでしょうか?以前からコピーがあるので、そのモジュールをコミットするだけでプロジェクト全体のローカルモジュールにすることはできません) –

1

@Lazarは言ったように、あなたは正しく理解しました。

バベルが左パッドに頼っていて、バベルをインストールしようとすると、それは失敗します。

まあ、私はいつもそれを回避策として自分で書き直すことができました。

しかし、バベルが使用しているモジュールで使用されているモジュールで使用されているモジュール、またはそれ以上のモジュールであれば、あなたは本当の悪夢に直面します。左パッドに依存しているすべてのモジュールデベロッパーがコードを更新するのを待たされます。

+0

[proxyquire](https://github.com/thlorenz/proxyquire)、[SystemJS](https://github.com/systemjs/systemjs)、[JSPM](https://)などのツールは、 github.com/jspm/jspmなど)は、実際に、制御、エイリアス、およびスワップアウトされる任意の依存関係のサブグラフを提供します。したがって、技術的な問題の大部分は、依存関係を管理するためのNPMに依存しています。なぜなら、Node.jsの 'require'アルゴリズムに効果的にデリゲートする方法(つまり、ファイルをディスクに書き込むだけです)です。したがって、この時間枠の間に、経過的に依存するバージョンのBabelを使用することはまだ可能でした。 –

関連する問題