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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With