Search code examples
javascriptnode.jsnode-modulesforever

Foreverjs tries to find module in /node_modules/my-module/node_modules/my-module


I use foreverjs to start my services. Also I use nodejs v5 with nvm. Running on mac.

Everything working fine yesterday, but today (after npm update) I suddenly have an errors like /node_modules/my-service-one/node_modules/my-service-onewhen I'm try to npm start.

The project structure is:

 .
 |-package.json
 |-services.json
 |+-node_modules
   |-forever
   |-my-service-one
   |-my-service-two

Config for foreverjs (services.json):

[
  {
    "append": true,
    "uid": "my-service-one",
    "script": "index.js",
    "sourceDir": "node_modules/my-service-one"
  },
  {
    "append": true,
    "uid": "my-service-two",
    "script": "index.js",
    "sourceDir": "node_modules/my-service-two"
  }
]

And I launch it with npm start(package.json):

...
"scripts": {
  "start": "node_modules/forever/bin/forever start services.json",
}
...

But when I try to make npm start, I have an error:

Error: Cannot find module '/Users/my_user/project_name/node_modules/my-service-one/node_modules/my-service-one/index.js'

WTF is this: /node_modules/my-service-one/node_modules/my-service-one? Why? It should use /node_modules/my-service-one/index.js. So why?


UPD: What I've already try(without result):

  • rm -rf node_modules;
  • Restart;
  • Use node v4, v5, v6;
  • npm cache clean;
  • Find other node_modules in wrong places inside project;
  • Google it;

This is bad question perhaps, but I'm really didn't know why it's happens. Thanks.


Solution

  • Have you tried to launch this modules with forever from command line?

    This path issue looks like a bug for me, I think the obvious duct-tape type fix is use absolute path in services.json instead of relative. It will look terrible but it should work.

    But I think it's better to install forever globally (with -g key) and then use a simple shell script to start your services with forever (two lines with something forever start /Users/my_user/project_name/node_modules/my-service-one/index.js) - this way works fine for me.

    And also it's quite easy to start this script at the boot-up, or even write a script to start and stop your modules as a service.


    UPD: This also may helps: sourceDir: './'