1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

node_modulesをシンボリックリンクで共有する試み

Last updated at Posted at 2019-04-08

実現したいこと

  • 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

下記手順で実現できた。

  1. 任意の場所にnode_modulesのディレクトリを作る。
  2. 使用したいプロジェクトのpackage.jsonのある場所にシンボリックリンクを作成する。
  3. 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よりも制約が厳しく、以下の手順で実現した。
(他に良い方法をご存知でしたらお教えいただきたいです。。)

  1. 使用したいプロジェクトのpackage.jsonのある場所でnpm installする。
  2. 任意の場所にnode_modulesのディレクトリを作り、手順1のnode_modulesをコピーする。
  3. 使用したいプロジェクトの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が作成される+シンボリックリンク先のモジュールが壊れてしまった。

1
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?