実現したいこと
- npm installを1回だけして、node_modulesを異なる場所から参照して使いまわす。
- グローバルインストールは極力使わない。
- Windows10で動かす。
- **とにかく手を抜く。**120分で検証できなかったらあきらめる。(いちばんだいじなこと)
環境その1
- Windows 10
- Node.js v6.9.2
- npm v3.10.9
環境その2
- Windows 10
- Node.js v8.11.4
- npm v5.6.0
結論
環境その1
下記手順で実現できた。
- 任意の場所にnode_modulesのディレクトリを作る。
- 使用したいプロジェクトのpackage.jsonのある場所にシンボリックリンクを作成する。
-
npm install
する。
$ フォルダ作成
mkdir C:\npm_modules\projectA\node_modules
$ シンボリックリンク作成
mklink C:\workspace\projectA\node_modules C:\npm_modules\projectA\node_modules
$ npm install
cd C:\workspace\projectA
npm install
$ ビルド
npm run build
環境その2
環境その1よりも制約が厳しく、以下の手順で実現した。
(他に良い方法をご存知でしたらお教えいただきたいです。。)
- 使用したいプロジェクトのpackage.jsonのある場所で
npm install
する。 - 任意の場所にnode_modulesのディレクトリを作り、手順1のnode_modulesをコピーする。
- 使用したいプロジェクトのpackage.jsonのある場所にシンボリックリンクを作成する。
$ npm install
cd C:\workspace\projectB
npm install
$ node_modulesを任意の場所にコピー
robocopy /mir C:\workspace\projectB\node_modules C:\npm_modules\projectB\node_modules
$ シンボリックリンク作成(projectAとprojectBは同じ資材)
mklink /D C:\workspace\projectA\node_modules C:\npm_modules\projectB\node_modules
$ ビルド
cd C:\workspace\projectA
npm run build
なぜ二つの環境で検証したのか
npmのバージョン5より前のときは自由にシンボリックリンクでnode_modulesの場所を指定していろいろできたが、5以降はできなくなったという噂を聞いたので。
npm install fails when node_modules is a symlink
今回の簡単な検証ではバージョン5以降ではシンボリックリンクで事前にnode_modulesを設置してnpm install
ができなくなっていた。
また、バージョン5にて使用したいプロジェクトにてnpm install
をすると、シンボリックリンクが上書きされてローカルに中途半端なnode_modulesが作成される+シンボリックリンク先のモジュールが壊れてしまった。