9

I have 3 node files:

// run.js

require('./configurations/modules');
require('./configurations/application');

// modules.js

var express = module.exports.express = require('express');
var app = module.exports.app = express.createServer();

// app.js

app.configure(...)

Run.js requires both files, modules.js which require a module and creates a variable, and app.js which should use that variable. But I get an error on app.js cause app isn't defined.

Is there a way to make this possible?

700 Software
  • 85,281
  • 83
  • 234
  • 341
never_had_a_name
  • 90,630
  • 105
  • 267
  • 383

2 Answers2

9

Everything declared in a module is local to that module unless it is exported.

Exported objects from one module can be accessed from other modules that reference it.

$ cat run.js 
require('./configurations/modules');
require('./configurations/application');

$ cat configurations/modules.js 
exports.somevariable = {
  someproperty: 'first property'
};

$ cat configurations/application.js 
var modules = require('./modules');

modules.somevariable.something = 'second property';
console.log(modules.somevariable);

$ node run.js 
{ someproperty: 'first property',
  something: 'second property' }
Fernando Correia
  • 21,803
  • 13
  • 83
  • 116
0

It looks like you're defining the variable in modules.js, but trying to reference it in app.js. You'll need to have another require in app.js:

// app.js
var application = require('./path/to/modules'),
    app = application.app;

app.configure(...);
jmar777
  • 38,796
  • 11
  • 66
  • 64