Reputation: 4369
I have a small node script named /tmp/test.js
containing this:
console.log(require("w3cjs"));
If I do this from the command prompt:
nvm use v0.10.21
node /tmp/test.js
I get this output:
module.js:340
throw err;
^
Error: Cannot find module 'w3cjs'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/tmp/test.js:1:75)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
But if I do this:
node -e $(cat /tmp/test.js)
I get this output:
{ validate: [Function: validate],
setW3cCheckUrl: [Function: setW3cCheckUrl],
w3cjs: [Circular] }
(In other words - it works.)
Why the difference and how do I make the script work?
Upvotes: 3
Views: 8295
Reputation: 115950
When you run a script in a different directory, Node looks for local modules in the node_modules
folder of that script's directory.
Suppose your shell's working directory is currently /projects/foo
. When you run node /tmp/test.js
, Node looks for modules in /tmp/node_modules
, not in /projects/foo/node_modules
.
However, if you don't run a script file, but run some text on the command line with -e
, Node will check for a local module folder in your shell's current working directory, i.e., /projects/foo/node_modules
.
It appears that you have w3cjs
installed in your working directory, but not at /tmp
. You should either install it there, or install the module globally with npm
's -g
option.
Upvotes: 9