node.js require cannot find custom module

JavascriptMacosnode.jsRequire

Javascript Problem Overview


Here is the project structure:

/
  app.js
  package.json
  /node_modules
  /app
    config.json
    /frontend
      assets and html tpls
    /modules
      couch.js
      raeume.js
      users.js

I require config.json, raeume.js and users.js from app.js and it all works fine.

var config   = require('./app/config');
var raeume   = require('./app/modules/raeume');
var users    = require('./app/modules/users');

Then I require config.json and couch.js from user.js the same way and it won't find anything.

var couch     = require('./app/modules/couch');
var config    = require('./app/config');

I guess it should find it. After some research I saw a diverse landscape of problems inclusive how node is compiled. Thus included: I work on osx 10.8 with node v0.10.7.

Javascript Solutions


Solution 1 - Javascript

The path is relative to the directory in which you are requireing the files, so it should be something like:

var couch = require('./couch');
var config = require('../config');

A bit of clarification, if you write

var couch = require('./couch');

you are trying to require the couch module which resides in the current directory, if you write

var couch = require('couch');

you are trying to require the couch module installed via npm.

Solution 2 - Javascript

The current accepted answer is correct and properly answers the question.

Although not directly related to the original question, I'd like to add another point here for all those people who got the Cannot find module error for local files although the correct relative path was specified.

Assuming a file with the name couch.js exists in the current directory,

  • On case insensitive filesystems (like NTFS on Windows), both these lines will work -

    var couch = require('./couch');
    var couch = require('./Couch');
    
  • However, on a case-sensitive filesystem (like ext4 on Linux), require('./couch') will work but require('./Couch') will not.

There is a page in the NodeJS docs regarding this.

I hope this helps someone whose perfectly working code stopped working after moving from Windows/Mac to Linux. 

Solution 3 - Javascript

Here is how you do it :

var users    = require('./../modules/users');

Solution 4 - Javascript

It must be:

var config = require(../../app/config)

var couch = require(./couch) (same directory)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionthgieView Question on Stackoverflow
Solution 1 - JavascriptAlberto ZaccagniView Answer on Stackoverflow
Solution 2 - JavascriptManSamVampireView Answer on Stackoverflow
Solution 3 - JavascriptDory ZidonView Answer on Stackoverflow
Solution 4 - JavascriptNghiep NgoView Answer on Stackoverflow