[解決済み] なぜ "npm install" は package-lock.json を書き換えてしまうのですか?
質問
にアップグレードしたばかりです。
npm@5
. 現在、私は
パッケージロック.json
のすべてを含むファイルです。
パッケージ.json
. を実行したとき、私はそれを期待します。
npm install
に何をインストールすべきかを決定するために、依存関係のバージョンがロックファイルから引き出されます。
ノードモジュール
ディレクトリに格納されます。 不思議なのは、実際に私の
パッケージロック.json
ファイルを作成します。
例えば、ロックファイルにはtypescriptが指定されており、バージョン
2.1.6
. そして
npm install
コマンドを実行すると、バージョンが
2.4.1
. これではロックファイルの意味がないように思えます。
何が足りないのでしょうか? どうすればnpmがロックファイルを実際に尊重するようになるのでしょうか?
解決方法は?
アップデート3:
他の回答でも指摘されているように
npm ci
コマンドは、CIコンテキストで高速かつ再現性のあるビルドを実現するための追加手段として、npm 5.7.0から導入されました。詳細は
ドキュメント
と
npmブログ
をご覧ください。
アップデート2 ドキュメントを更新し、明確にするための課題は GitHub issue #18103 .
アップデート1: 以下に説明されている動作は npm 5.4.2 で修正されました: 現在意図されている動作は以下の通りです。 GitHub issue #17979 .
オリジナルの回答です。
の挙動は
package-lock.json
で変更されました。
npm 5.1.0
で説明したように
課題番号16866
. あなたが観察した動作は、バージョン5.1.0の時点でnpmが意図したものであることが明らかです。
ということは
package.json
をオーバーライドすることができます。
package-lock.json
の依存関係に新しいバージョンが見つかった場合は、常に
package.json
. 依存関係を効果的に固定したい場合は、バージョンをプレフィックスなしで指定する必要があります。
1.2.0
ではなく
~1.2.0
または
^1.2.0
. という組み合わせになります。
package.json
と
package-lock.json
を使えば、再現性のあるビルドができます。はっきり言って
package-lock.json
だけでは、もはやルートレベルの依存関係をロックすることはできません!
この設計上の決定が良かったかどうかは議論の余地がありますが、この混乱から生じた議論がGitHubの
課題番号17979
. (私の目には、これは疑問のある決定であり、少なくとも名前
lock
はもう通用しない)
もうひとつ余談ですが、npmjs.org ではなく GitHub から直接パッケージを取得する場合など、immutable パッケージをサポートしないレジストリに対する制限もあります。以下を参照してください。 パッケージロックに関するこの文書 をご覧ください。
関連
-
[解決済み】「安全なTLS接続が確立される前にクライアントのネットワークソケットが切断されました」(ノード10
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] nodejsでfindAllのソート順を続編にする
-
[解決済み] npm installで「満たされていない依存関係があります」と表示されるのはなぜですか?
-
[解決済み] npm installの-saveオプションは何ですか?
-
[解決済み] インストールされているnpmパッケージのバージョンを検索する
-
[解決済み] npmはどこにパッケージをインストールするのですか?
-
[解決済み] NPMパッケージの以前の正確なバージョンをインストールするにはどうすればよいですか?
-
[解決済み] GitHubからnpmパッケージを直接インストールする方法
-
[解決済み] npmパッケージの依存関係にローカルモジュールを指定する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Discord.js が特定のチャンネルにメッセージを送信する場合
-
[解決済み】Nodejsの解決方法:Error: ENOENT: そのようなファイルまたはディレクトリがありません
-
[解決済み】Passport.js - エラー: ユーザーのセッションへのシリアライズに失敗しました。
-
[解決済み】Heroku + node.jsのエラー(Webプロセスが起動後60秒以内に$PORTにバインドできなかった)。
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
[解決済み] TypeError: コールバックはnodejsの関数ではありません。
-
[解決済み] AWS s3 api error: specified bucket does not exist.
-
[解決済み] npm install エラー - ローカルの発行者証明書を取得できません。
-
[解決済み] NodeJsのSequelizeでautoIncrementはどのように動作するのですか?
-
[解決済み] npm-shrinkwrap.jsonとpackage-lock.jsonの違いは何ですか?