[フロントエンド] npm linkを使って、効率的にnpmモジュールを開発する
こんにちは、@yoheiMuneです。
ここでは、開発中のモジュールを
そんな時に使えるコマンドが
この状態で開発すれば
最後になりますが本ブログでは、Node.js、Python、Swift、Go言語、フロントエンド、Linux、インフラ、Java、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時に、解決の糸口を見つけられる」そんな目標でブログを書き続けています。今後も役立つネタを書いていきますので、ぜひ本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
npm link
というコマンドがあるんですね、初めて知りました。npmモジュール開発が効率的にできたので、ブログにも用途や使い方をまとめておきたいと思います。目次
npm linkとは
npm linkはシンボリックリンクを貼る仕組みで、開発中のnpmモジュールと、それを組み込むアプリケーションとをつなぎ合わせることができる仕組みです。ここでは、開発中のモジュールを
mymodule
、それを組み込むアプリをmyapp
として、以下のディレクトリ構成だとします。+ ~/git/ - mymodule/ <--- 開発中のモジュール - myapp/ <--- 開発中のアプリ - node_modules/ - mymodule/ (※2) <--- 開発中のモジュールに依存している通常であれば
myapp
からmymodule
を使う場合には、npm install mymodule
で読み込めばOKです。しかし、myapp
とmymodule
を同じタイミングで開発したい場合、開発中のmymodule
はnpmに公開されていない(=開発中を毎回公開するのは手間である)ため、myapp
への取り込みができません。そんな時に使えるコマンドが
npm link
です。シンボリックリンクを活用することで、開発中のmymodule
をmyapp
から利用できるようにします。npm linkの使い方
npmリンクは「参照される側(mymodule
)」と「参照する側(myapp
)」それぞれで作業を行います。参照される側(mymodule)での作業
参照される側では、シンボリックリンクの作成を行います。mymodule
のディレクトリ内で以下のコマンドを実行します。# mymoduleのフォルダ内にて $ npm link /Users/yoheimune/.nvm/versions/node/v8.1.0/lib/node_modules/mymodule -> /Users/yoheimune/git/mymodule上記を実行するとグローバルなnode_modulesに、
mymodule
へのシンボリックリンクが作成されます。※ グローバルなフォルダのパスは、環境によって異なります。ここではnvmでの例です。
参照する側(myapp)での作業
参照する側では、上記で作成したシンボリックリンクを使えるようにします。以下のコマンドを実行します。# myappのフォルダ内にて $ npm link mymodule /Users/yoheimune/git/pdfanno/node_modules/mymodule -> /Users/yoheimune/.nvm/versions/node/v8.1.0/lib/node_modules/mymodule -> /Users/yoheimune/git/mymodule少し長い出力ですが、リンクが繋がって
myapp
からmymodule
が参照できていることがわかります。この状態で開発すれば
mymodule
の変更がmyapp
にも自動的に反映され、効率的に開発ができます。便利ですね!npm linkを解除する
myapp
でnpmリンクの利用を辞めたい場合には、npm install
コマンドを実行します。シンボリックリンクは削除され通常通りnpmモジュールを参照するようになります。参考資料
npm link
の詳細は、公式ドキュメントをご確認ください。最後に
実際にはpdfanno(=アプリ)とanno-ui(=モジュール)の開発で必要になって、探していたら見つけました。npm
って色々なコマンドがあるんですね。最後になりますが本ブログでは、Node.js、Python、Swift、Go言語、フロントエンド、Linux、インフラ、Java、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時に、解決の糸口を見つけられる」そんな目標でブログを書き続けています。今後も役立つネタを書いていきますので、ぜひ本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!