Help us understand the problem. What is going on with this article?

node.jsのrequire相対パスうざい問題

More than 1 year has passed since last update.

requireの../多すぎ問題

var hogeModel = require('../../../../../app/model/hoge');

../多すぎ!何階層登ればいいのか分からん!面倒くさい!という問題について。

どのディレクトリのファイルからも

var hogeModel = require('app/model/hoge');

でrequireしたいわー、という話。

node_modulesの下で開発

node_modules以下にファイルを置く。

node_modules/app/model/hoge.js 

のように。

git対策として.gitignoreではappを除外する

.gitignore
node_modules
!node_modules/app

これから始める案件ならば割り切ってこういうふうにするのも良いのでは?

node_modulesにシンボリックリンク

lib以下にファイルを置く

lib/app/model/hoge.js

node_modulesにシンボリックリンクを作成

$ ln -s ../lib/app node_modules/app

gitではシンボリックリンクを管理できないので、npm-scriptでnpm installしたときにシンボリックリンク作るようにすると良さそう。

NODE_PATHを指定して起動する。

lib以下にファイルを置き

lib/app/model/hoge.js

環境変数NODE_PATHを指定して起動する

$ env NODE_PATH=./lib node app.js

で起動する。または、package.jsonで

{
  "script": {
    "start": "env NODE_PATH=./lib node app.js"
  }
}

と設定して、npm startで起動する。

$ npm start

--

本件については以下のような議論があると教えてもらったのだが…

Better local require() paths for Node.js

実は元々6番を使っていたのだが、非公開メソッドを使うのどうよ?という意見により ../../ 式に変更したという経緯があるので却下。

2番、3番、7番のようなrequireに渡す文字列をゴニョゴニョ加工する系の対策は、WebStormでファイルジャンプできなくなるため却下。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away