私はnpmの左パッドの失敗について読んできましたが、どうなったのか多少混乱しています。私は、npmが実際にどのように動作するか誤解していると思います。左パッドの開発者がパッケージを公開しなかった場合、私はnpm install left-pad
がもう動作しないと仮定します。しかし、すでにインストールしているユーザーの場合、left-padはnode_modulesフォルダに残っていませんか? Babelの開発者は、パッケージが消えたことを認識するために、npmのために左パッドを取り外して再取り付けする必要はありませんか?私は明らかに何かを見逃しているが、私は何が分からない。npmの左パッドブレークコードの未公開はどうでしたか?
答えて
npm install babel
を実行すると、左パッドはバベルにバンドルされず、むしろpackage.jsonファイルの依存関係として表現されます。したがって、npmは左パッドを見つけてダウンロードする必要があります。したがって、左パッドを使用している場合や、左パッドを使用している場合は、初めて使用することはできません。これはローカルディレクトリに既に存在する場合は安全だが、プロジェクトは別の場所に構築されるとすぐに正しく構築されないことになります。たとえば、新しいチェンジセットごとにゼロからクリーンビルドを実行するCIサーバーは、左パッドに依存するすべてのプロジェクトを構築できません。また、初めてプロジェクトをチェックアウトしたり、新しいサーバーにデプロイすると、ビルドできなくなります。
これは、左パッドに直接依存していた場合に修正するのは簡単です。置換えを作成し、置換えを使用するようにコードを更新するだけです。しかし、それがあなたの依存ツリーの中で深く必要とされるとき、例えばバベルによって、バブルや他のモジュールを自分でリファクタリングして、左パッド置換えを使うことはできないでしょう。さまざまなノードモジュール開発者のすべてが自分のモジュールを別のもので更新して再発行するのを待たなければなりません。
ニュース記事のように黙っているわけではありませんが、大変不便ですし、左パッドが既にキャッシュされている開発者ワークスペース外の多くのシステムでレンチを投げます。
Ninja'd。あなたが依存関係の依存について話すのを忘れました、もし私がその出来事を覚えていれば、それが主な問題でした。しかし、良い解説:) – DrakaSAN
@DrakaSANそれは本当に良い点です、ありがとう。更新されます。 –
ありがとう!これは理にかなっています(:あなたがすでに依存関係をリファクタリングするのは本当に難しいでしょうか?以前からコピーがあるので、そのモジュールをコミットするだけでプロジェクト全体のローカルモジュールにすることはできません) –
@Lazarは言ったように、あなたは正しく理解しました。
バベルが左パッドに頼っていて、バベルをインストールしようとすると、それは失敗します。
まあ、私はいつもそれを回避策として自分で書き直すことができました。
しかし、バベルが使用しているモジュールで使用されているモジュールで使用されているモジュール、またはそれ以上のモジュールであれば、あなたは本当の悪夢に直面します。左パッドに依存しているすべてのモジュールデベロッパーがコードを更新するのを待たされます。
[proxyquire](https://github.com/thlorenz/proxyquire)、[SystemJS](https://github.com/systemjs/systemjs)、[JSPM](https://)などのツールは、 github.com/jspm/jspmなど)は、実際に、制御、エイリアス、およびスワップアウトされる任意の依存関係のサブグラフを提供します。したがって、技術的な問題の大部分は、依存関係を管理するためのNPMに依存しています。なぜなら、Node.jsの 'require'アルゴリズムに効果的にデリゲートする方法(つまり、ファイルをディスクに書き込むだけです)です。したがって、この時間枠の間に、経過的に依存するバージョンのBabelを使用することはまだ可能でした。 –
問題のnpm Blog articleはほとんどの質問に答えます。
- 1. npm publishはnpmリポジトリにのみ公開したい
- 2. 公開サーバのGit、Node.js、NPM
- 3. travis:バージョンバンプでnpmに公開
- 4. 公開したNPMパッケージのローカルインストールをテストするにはどうすればよいですか?
- 5. TranspileネイティブモジュールをES5に公開してからnpmに公開しますか?
- 6. NPMでの公開のためのReactコンポーネントのインポートモジュール
- 7. npmを公開し、他のPCにインストールした後にエラー
- 8. 公開したNPMモジュールを更新するにはどうすればよいですか?
- 9. ジェンキンからnpmを公開する
- 10. 公開サイトと左メニュー
- 11. npmパッケージを公開する場合は、
- 12. Npmは最新のものを公開します
- 13. map.clear()で未知のimageData参照が公開されました
- 14. 公開方法NPMスコープパッケージ/ NPMスコープが見つかりません?
- 15. npmモジュール(node.js)を変更して公開できますか?
- 16. スコープ付きnpmパッケージを無料で公開しますか?
- 17. npmパッケージをwebpackにバンドルしてオブジェクトとして公開するにはどうすればいいですか?
- 18. 公開するJquery ajaxコール - 未公開の記事
- 19. npmは自分のモジュールを公開できません
- 20. Angular-CLIプロジェクトをNPMモジュールとして公開するにはどうすればよいですか?
- 21. 未公開アプリのFCMメッセージングはうまく機能していますか?
- 22. 未実装:DSA公開鍵
- 23. Laravel 5.3のコードでは、公開/未公開ステータスに基づいてコンテンツアクセスを制御しますか?
- 24. PlayStoreの未公開アプリのアルファテストビルド
- 25. npmはスタンドアロンのアプリケーションを公開するのに適していますか?
- 26. 公開npmパッケージの一部の機能を変更しました
- 27. Glass GDKの静的カードを公開して公開するにはどうすればよいですか?
- 28. NPMにAureliaコンポーネントを公開しますか?
- 29. Google Play - 未公開アプリのダウンロードリンク
- 30. 未公開のiOSアプリをAppStoreにリンク
あなたはNPMを誤解しているわけではありません。あなたはその時のクリックベイトのタイトルを誤解しています。これは、 'package.json'から' npm install'を試してみたら、文字通り実行時ではなく 'left-pad'を参照してしまうと壊れることになります。私は「どの人がインターネットを壊したか」という行に沿ってタイトルを見てきました。一口。 –