Middleware de Assets NodeJS


(Cleber Otaviano) #1

Bom dia galerinha!

Gostaria de saber se servir arquivos estáticos (css, imagens e js) através de manifest pattern com Nodejs + Express é a forma mais inteligente ou se existe uma forma com mais performance.

Estou usando Nunjucks como template engine.

Usei três arquivos de manifestos criados pelo Gulp:

assets = {
    styles: function () {
        var stylesManifest = JSON.parse(fs.readFileSync('./dist/styles.manifest.json', 'utf8'));

        Object.keys(stylesManifest).map(function(value, index) {
            stylesManifest[value] = "/dist/" + stylesManifest[value];
        });

        return stylesManifest;
    },
    scripts: function () {
        var scriptsManifest = JSON.parse(fs.readFileSync('./dist/scripts.manifest.json', 'utf8'));

        Object.keys(scriptsManifest).map(function(value, index) {
            scriptsManifest[value] = "/dist/" + scriptsManifest[value];
        });

        return scriptsManifest;
    },
    images: function () {
        var imagesManifest = JSON.parse(fs.readFileSync('./dist/images.manifest.json', 'utf8'));

        Object.keys(imagesManifest).map(function(value, index) {
            imagesManifest[value] = "/dist/" + imagesManifest[value];
        });

        return imagesManifest;
    }
};

app.use(function(req, res, next) {
    app.locals.assets = {
        css: assets.styles(),
        js: assets.scripts(),
        images: assets.images()
    };
    next();
});

Se alguém souber, valeu!


(William Bruno) #2

Não cara! não é.

Deixar o NodeJS servir estáticos não é uma boa idéia.
O melhor e mais performático é deixar esse trabalho para o Nginx.

Você quer que o NodeJS e o Event Loop dele se preocupem em tratar as operações, consultas e I/O, servir estáticos é só ler do disco e cuspir. Para isso, o Nginx faz um trabalho muito melhor e mais rápido.


(Diego Eis) #3

Concordo com o @wbruno... Esse trabalho de servir assets é do webserver. Não é porque dá pra fazer que você deve fazer. Mas não manjo nada de Node. Aí deixo para os universitários. :wink:


(Alan Cezar Araujo) #4

Se a sua intenção é só subir um localhost com arquivos estáticos á partir de qualquer diretório, uma opção rápida é o Python 2.7

python -m SimpleHTTPServer 8080

Mão na roda nesse caso!

Agora se for pra subir em produção, acredito que o @wbruno já deu uma ótima resposta.
Não manjo de Nginx mas só ouço elogios com relação á performance.


(Cleber Otaviano) #5

Galerinha do bem, muito obrigado.

=D