はじめに
npm install
やyarn install
で簡単にモジュールのインストールができますが、インターネットにつながっていることが前提。
とある事情でインターネットに接続できない環境でNode.jsのプロジェクトを開発する機会があり、少し手間取ったので備忘録としておいておきます。
起こった問題
インターネットに接続できる環境でNode.jsのプロジェクトを作成し、node_modulesをzip化しオフライン環境に持っていきました。
オフライン環境で展開し、さあスクリプトを実行しようとしたところエラー(Cannot find module)が発生。
原因
node_modules/.bin
配下のシンボリックリンクが切れてしまっていたことが原因。
スクリプト実行時にこの配下のファイルを参照して実行されるのですが、リンク先が見つからずエラーになっていたようです。
zip
コマンドを実行した際にシンボリックリンクが実ファイルに置き換わったがゆえ発生した問題。
対策
zip
コマンドでzip -r node_modules
としていたコマンドをzip -ry node_modules
に変更し再度実行。
-y
オプションについて
--symlinks
の短縮形。シンボリックリンクをたどらずに、シンボリックリンクのまま格納するオプションです。
https://atmarkit.itmedia.co.jp/ait/articles/1607/25/news021.html
シンボリックリンクのまま圧縮し、オフラインで展開し確認したところオンライン環境と同様スクリプトが動きました。
まとめ
文字ばかりで見にくい記事ではありますが、備忘録なのでお許しを…
悩んでた部分がかなり初歩的なところだったので恥ずかしい限りですが、node_modulesの中身が少し理解できました。