new wings

プログラミングを始めたので、感想を書いてくと思います

ローカルのgitリポジトリからnpmインストールする

とてもニッチなnpm installとyarn add
あまりにも実用性がない

httpssshも介さずにgitリポジトリからnpmパッケージをインストールする方法はある。

1. fileスキーム的なあれでgitリポジトリからインストールする

  • gitリポジトリからインストールするのでpackage.jsonに書かれたprepareスクリプトが動く。 prepare スクリプトは devDependencies に書かれたモジュールをインストールして動いてくれる。
  • git管理下のファイルだけがコピーされる。(node_modules以下が無駄にコピーされないことがえらい。)
  • 作業用のリポジトリでも git init --bare --shared で作ったリポジトリでもなんでも指定できる。
  • ファイルサーバーに置いたリポジトリからインストールできる。
D:\path\to\mylib
└.git

または

D:\path\to\mylib
├hooks
├info
├objects
├refs
├config
├description
└HEAD

みたいなところからインストールする。

npm install

# 絶対パス指定
npm install git+file:///D:\path\to\mylib
npm install git+file:///D:/path/to/mylib

# 相対パス指定...できない?

# IPアドレスでUNCパスを指定
npm install git+file:///\\192.168.1.1\path\to\mylib
npm install git+file:///\\192.168.1.1/path/to/mylib

# ファイルサーバーの名前(例えばserverとする)でUNCパスを指定
npm install git+file:///\\server\path\to\mylib
npm install git+file:///\\server/path/to/mylib

# いずれの方法も package.json に絶対パスやIPアドレス、ファイルサーバー名などが残ることに注意
# "dependencies": {
#   "mylib": "git+file:///\\\\192.168.1.1\\path\\to\\mylib"
# }

yarn add

npm と違い、 git+file:/// ではなく git+file: とする。

# 絶対パス指定
yarn add git+file:D:\path\to\mylib
yarn add git+file:D:/path/to/mylib

# 相対パス指定
yarn add git+file:..\path\to\mylib
yarn add git+file:../path/to/mylib

# IPアドレスでUNCパスを指定...できない?
# ネットワークドライブに割り当てて絶対パス指定すればyarn addできる。

# ファイルサーバーの名前でUNCパスを指定...できない?
# ネットワークドライブに割り当てて絶対パス指定すればyarn addできる。

ファイルサーバー補足

ファイルサーバーのIPアドレスが192.168.1.1で名前がserverだとする。通常、エクスプローラー等でファイルサーバーにアクセスするときには\\192.168.1.1\path\to\your\fileだとか\\server\path\to\your\fileのようにUNCパスと呼ばれる方法でパスを書く。ファイルサーバーに置かれたgitのリモートリポジトリからnpm installできる。ただし、ファイルサーバーでユーザー認証の必要がある場合には下記コマンドを打つ前に認証を通しておかなくてはいけない。ファイルサーバーをネットワークドライブに割り当てればUNCパスを使わなくていい。

2. fileスキーム的なあれでpackage.jsonを含むフォルダからインストールする

  • ググるとよく見つかる方法。
  • package.jsonに書かれたprepareスクリプト動かない 。よくない。
  • gitリポジトリとは無関係に単純に指定したパスのフォルダをごっそりインストール先のnode_modulesフォルダにコピーしてくる。
    • インストール元のnode_modulesフォルダが無駄にコピーされる。よくない。
D:\path\to\mylib
├node_modules
├package.json
└index.js

みたいなところからインストールする。

npm install

# 絶対パス指定
npm install file:///D:\path\to\mylib
npm install file:///D:/path/to/mylib
npm install D:\path\to\mylib
npm install D:/path/to/mylib

# 相対パス指定
npm install file:///..\path\to\mylib
npm install file:///../path/to/mylib
npm install ..\path\to\mylib
npm install ../path/to/mylib

# 絶対パスは相対パスに変換されて package.json に書かれる。

yarn add

npm と違い、 file:/// ではなく file: とする。

# 絶対パス指定
yarn add file:D:\path\to\mylib
yarn add file:D:/path/to/mylib
yarn add D:\path\to\mylib
yarn add D:/path/to/mylib

# 相対パス指定
yarn add file:..\path\to\mylib
yarn add file:../path/to/mylib
# yarn add ..\path\to\mylib # この指定方法はダメ
yarn add ../path/to/mylib

# 絶対パスは相対パスに変換されないでそのまま package.json に書かれる。

デバッガーか何かですか?