yarn import

`yarn.lock` ファイルを npm でインストールした既存の `node_modules` フォルダから生成します。

yarn import

このコマンドは lock ファイルと既存の依存関係ツリーとの差異を可能な限り最小化して、npm-shrinkwrap.json に現在依存しているプロジェクトの移行を支援します。

モチベーション

現在多くのプロジェクトが npm shrinkwrap を使用しているか、もしくは壊れやすい依存関係ツリーを持っているために node_modules をソースコード管理下に置いています。 yarn install が極端に異なる論理的な依存関係ツリーを生成するため、これらのプロジェクトでは簡単には Yarn に移行できません。 全部のツリーが Yarn の yarn.lock で表現できるものではなく、一部の有効なツリーはインストール時に自動的に排除されてしまうでしょう。 このような微妙な差異やその他の事柄が、手動での移行作業のとても大きな障壁となります。

yarn import のねらいは、標準の require.resolve() の解決ルールに則って 、node_modules 内で見つかるバージョンを使用して yarn.lock ファイルを生成することによって、この挑戦の負担を軽減することです。 Yarn の解決メカニズムが既存の依存関係ツリーとの同一性を満たせない場合、警告を出力して手動で変更を確認するように通知します。 既存の node_modules ツリーは前もって有効性をチェックされ、結果として出力される lock ファイルは yarn install を問題(互換性の欠如、解決できない依存関係、重複の自動削除など)がなく実行できるようになっているはずです。

$ yarn import
yarn import vx.x.x
success Folder in sync.
warning Using version "2.2.4" of "lru-cache" instead of "2.7.3" for "ngstorage > grunt > minimatch"
warning Using version "2.0.6" of "readable-stream" instead of "2.2.9" for "ngstorage > karma > chokidar > readdirp"
[...]
success Saved lockfile.
✨  Done in 11.96s.