Frameworks como Ruby on Rails injetam automaticamente todos os arquivos JS e CSS no HTML. Isso também é possível em uma pilha baseada em JS usando Gulp e dois plug-ins.
Wiredep para bibliotecas externas e gulp-inject para nossos próprios arquivos.
Wiredep
O Wiredep irá escanear nosso arquivo de configuração do Bower em busca de dependências, determinar a ordem a ser incluída e inseri-los no arquivo HTML. Isso é possível graças ao campo principal na biblioteca bower.json que informa os arquivos de ação primária necessários para usar o pacote.
{
"name": "jquery",
"version": "2.1.4",
"main": "dist/jquery.js"
}
Em seu gulpfile.js , definimos a seguinte tarefa.
var gulp = require('gulp');
var wiredep = require('wiredep').stream;
var paths = {
(...)
};
gulp.task('inject-vendor', function() {
gulp.src(paths.index)
.pipe(wiredep({}))
.pipe(gulp.dest('./www'));
});
E em nosso index.html adicionamos a seguinte anotação.
<html>
<head>
<! -- bower:css -->
<! -- endbower -->
</head>
<body>
(...)
<! -- bower:js -->
<! -- endbower -->
</body>
</html>
Agora, toda vez que executarmos a tarefa, os arquivos de bibliotecas aparecerão dentro da anotação. Podemos até fazê-lo rodar automaticamente sempre que uma nova dependência é instalada, adicionando as seguintes linhas ao nosso arquivo .bowerrc .
{
"script": {
"postinstall": "gulp inject-vendor"
}
}
Gulp-Inject
O Gulp-inject lerá todos os arquivos e os injetará em espaços reservados, como o Wiredep. Isso é feito com outra tarefa de gole.
var inject = require('gulp-inject');
(...)
gulp.task('inject-own', function() {
gulp.src(paths.index)
.pipe(inject(gulp.src(paths.sources, {read: false})))
.pipe(gulp.dest('./www'));
});
E em nosso index.html .
<html>
<head>
<!-- bower:css -->
<!-- endbower -->
<!-- inject:css -->
<!-- endinject -->
</head>
<body>
<!-- bower:js -->
<!-- endbower -->
<!-- inject:js -->
<!-- endinject -->
</body>
</html>