はじめに
yarn
でグローバルインストールしたモジュールをNode.js
で参照しようとした際に、Cannot find module
エラーに出くわしました。
yarn add
で、開発プロジェクト内にモジュールをローカルインストールすると問題ないのだが、グローバルインストールしたモジュールは参照できませんでした。つまり、PATH
に問題があるとみて対処しました。
メモよりの投稿です。
環境
OS: MacOS
Pakcage Manager: yarn
エラー
次のように、require
でfuga
モジュールをグローバル参照しようとした。
const fuga = require('fuga');
node
コマンドでjs
ファイルを実行すると、fuga
モジュールを見つけられないと怒られる。
❯ node hoge.js
Error: Cannot find module 'fuga'
対処法
1. グローバルなインストールディレクトリを確認
yarn globalから引用すると、
yarn global dir コマンドは、グローバルな node_modules を含むグローバルなインストールディレクトリの出力を表示します。デフォルトでは、~/.config/yarn/global になります。
❯ yarn global dir
/Users/takuyanin/.config/yarn/global
2. NODEにグローバルなモジュールパスを設定
❯ export NODE_PATH=$HOME/.config/yarn/global/node_modules
もしくは、.zshenv
に記述。
3. グローバルなモジュールパスを確認
global.module.paths
に目的パスが含まれていることを、念のために確認。
❯ node
> global.module.paths
[ '/Users/takuyanin/.config/yarn/global/repl/node_modules',
'/Users/takuyanin/.config/yarn/global/node_modules', 👈パスが確認できる
'/Users/takuyanin/.config/yarn/node_modules',
'/Users/takuyanin/.config/node_modules',
'/Users/takuyanin/node_modules',
'/Users/node_modules',
'/node_modules',
'/Users/takuyanin/.node_modules',
'/Users/takuyanin/.node_libraries',
'/Users/takuyanin/.nvm/versions/node/v10.15.3/lib/node' ]
>
おわりに
基本的には、プロジェクト内に直接インストールすると思うが、ふとした拍子にグローバルインストールしたモジュールを参照しようとすると、少しハマったので、簡単にまとめました。