A. npm shrinkwrap
npm shrinkwrap
を実行すると package.json に列挙されている依存を読みとり、実際にインストールされるべきモジュールのバージョンが列挙された npm-shrinkwrap.json
というファイルが作られる。
npm install
はこのファイルが存在すればこちらを優先して読むようになっている (--no-shrinkwrap
オプションを与えることで無視することもできる)。
いくつか気をつける点があって:
devDependencies
も固定するにはnpm shrinkwrap
を実行する際に--dev
オプションを与える必要があるnpm-shrinkwrap.json
が存在しない場合、package.json
の依存関係を読み取る。つまり、Bundler などのように固定された依存関係が保存されたファイルが存在しない場合にエラーないし警告を出す仕組みは (現在のところ) ない
特に後者は気を利かせてフォールバックしてほしくない時に npm だけではどうしようもないという問題がある。