Node.jsでプロジェクト内の共通モジュールの依存関係どうするかハマったのでメモ

Node.jsでプロジェクト内の共通モジュールの依存関係どうするかハマったのでメモ

AWS Lambdaで複数APIを作るプロジェクト内で共通モジュールの依存関係どうやったら良いかで悩んだのでメモです。

共通モジュールはcommonフォルダ配下に配置するとします。

project
├─src
├─common
├─index.js // エントリポイント
├─package.json
├─dateutil.js // 共通モジュール
└─pstringutil.js // 共通モジュール
├─main
├─xxx.js
└─yyy.js
├─test
├─main
├─xxx.test.js
└─yyy.test.js

view raw
gistfile1.txt
hosted with ❤ by GitHub

各共通モジュールは以下のようなイメージです。class定義してmodule.exportsしています。

// stringutil.js
class stringutil() {
// 定義
}
module.exports = stringutil;

view raw
gistfile1.txt
hosted with ❤ by GitHub

index.jsで各ファイルをmodule.exportsします。

module.exports = {
StringUtil : require('./stringutil'),
DateUtil : require('./dateutil')
}

view raw
index.js
hosted with ❤ by GitHub

共通モジュールが増えたらindex.jsに記述を追加してあげます。

package.json

commonフォルダ配下にpackage.jsonを用意してあげます。

{
"name": "common",
"version": "1.0.0",
"description": "",
"main": "index.js",
"private":true,
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": ""
}

view raw
package.json
hosted with ❤ by GitHub

index.jsを指定、private:trueとしておきます。

プロジェクトのルートでnpmコマンドを実行します。

npm install .\common

view raw
gistfile1.txt
hosted with ❤ by GitHub

これでプロジェクトルートのpackage.jsonのdependenciesにcommonが追加されます。

"dependencies": {
"common": "file:common"
}

view raw
gistfile1.txt
hosted with ❤ by GitHub

node_modules配下にシンボリックリンクが作成されるのでcommonフォルダ配下を修正すれば即反映されるので便利です。

逆に考えると、プロジェクトルートのpackage.jsonに最初から上記依存関係を記述してあげて、npm iしてあげればシンボリックリンクが作成されます。

Node.jsでプロジェクト内の共通モジュールの依存関係どうするかハマったのでメモ

これで共通モジュールを使用する側のjsファイルから使用することができます。

以下、使用例です。

const {StringUtil, DateUtil} = require('common')

view raw
gistfile1.txt
hosted with ❤ by GitHub

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA