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 だけではどうしようもないという問題がある。