69

I am having issues including files to execute in my NodeJs project.

I have two files in the same directory:

a.js

var test = "Hello World";

and

b.js

require('./a.js');
console.log(test);

I execute b.js with node b.js and get the error ReferenceError: test is not defined.

I have looked through the docs http://nodejs.org/api/modules.html#modules_file_modules

What am I missing? Thanks in advance.

Patrick Lorio
  • 5,420
  • 11
  • 42
  • 71
  • FYI declaring a "var" or "let" like on a.js doesn't mean that it's accessible Globally (with require), but only inside the file a.js – Bill May 30 '19 at 09:42

3 Answers3

98

Change a.js to export the variable:

exports.test = "Hello World";

and assign the return value of require('./a.js') to a variable:

var a = require('./a.js');
console.log(a.test);

Another pattern you will often see and probably use is to assign something (an object, function) to the module.exports object in a.js, like so:

module.exports = { big: "string" };
rdrey
  • 8,971
  • 3
  • 38
  • 50
23

You are misunderstanding what should be happening. The variables defined in your module are not shared. NodeJS scopes them.

You have to return it with module.exports.

a.js

module.exports = "Hello World";

b.js

var test = require('./a.js');
console.log(test);
Andrew T Finnell
  • 13,117
  • 2
  • 32
  • 48
1

if you want to export the variable in another file.There are two patterns. One is a.js
global.test = "Hello World"; //test here is global variable,but it will be polluted

The other is
a.js module.exports.test = "Hello World"; or exports.test= "Hello World"; b.js var test = require('./a.js'); //test in b.js can get the test in a.js console.log(test);

philipzhao
  • 11
  • 1