sanfilippopablo
sanfilippopablo

Reputation: 1449

Node.js and dependecies management

Here is what i'm concerned about:

I'm writing a webapp in Node.js using express 4.

The question is for managing dependecies in all the code, but let me show you an example. I'm managing dependencies like this:

server.js:

var express = require('express');

var app = express();

app.use('/auth', require('./routes/auth'));
app.use('/profile', require('./routes/profile'));

routes/auth.js:

var express = require('express');

var router = express.Router();
// add routes to router
module.exports = router;

routes/profile.js:

var express = require('express');

var router = express.Router();
// add routes to router
module.exports = router;

How you can see, i'm importing express every time i need it in every module. I'm showing you the example with express, but i'm doing it with others modules.

Makes it better if i manage dependencies like this?

server.js:

var express = require('express');
var app = express();

app.use('/auth', require('./routes/auth')(express));
app.use('/profile', require('./routes/profile')(express));

routes/auth.js:

module.exports = function (express) {
    router = express.Router();
    // add routes to router
    return router;
}

routes/profile.js:

module.exports = function (express) {
    router = express.Router();
    // add routes to router
    return router;
}

I have to admit that my doubts are due to my lack of knowledge about Javascript and Node.js and my background with Python, where we do like the first form.

Any advice would be appreciated.

Upvotes: 1

Views: 94

Answers (1)

greelgorke
greelgorke

Reputation: 374

There is no real difference in performance, since Node.js' require caches every module on first call. However, the second approach has the benefits of explicit dependency injection, i.E. you could test every module in higher isolation by providing a mocked version of express. Plus you are ready for providing further dependencies like configuration or database objects.

Upvotes: 2

Related Questions