Je sais que gulp nécessite un flux de source de vinyle pour fonctionner correctement, mais est-il un moyen facile d'utiliser un fichier vinyle déjà existant ou un objet json au lieu du gulp.src bien connu cela prend seulement des globs?Comment utiliser la liste des objets comme flux source de gulp
Répondre
Après plusieurs recherches, je n'ai pas trouvé de bonne solution pour ce problème, j'ai donc décidé de partager ma solution avec vous.
Ce problème est résolu en deux étapes
1: Vous devez convertir tout ce que vous voulez pipe dans gulp dans un fichier de vinyle. Cela peut se faire comme si
const Vinyl = require('vinyl');
var vinyl = new Vinyl();
vinyl.cwd = '/';
vinyl.base = '/';
vinyl.path = '/yourfictivefilepath';
vinyl.contents = new Buffer(JSON.stringify(yourobject));
Pour plus d'informations sur cette étape: https://github.com/gulpjs/vinyl
2: Créer un flux de vos fichiers vinyle
je trouve que ces étapes peuvent être répétitives et peut rendre le code moins lisible donc j'ai décidé d'encapsuler ces étapes dans un paquet npm qui le fait pour vous.
Depuis gulp utilise des fichiers vinyles en entrée et en fait uses certaines de ses propriétés (comme .base
), il est inévitable de créer des fichiers de vinyle pour utiliser gulp. Donc je vous recommande cet accès pour atteindre votre objectif:
'use strict';
const gulp = require('gulp');
const header = require('gulp-header');//https://www.npmjs.com/package/gulp-header
gulp.task('default', function() {
gulp.src("a.json")//empty file
.pipe(header(JSON.stringify({a:1,b:2})))//inject your own content
.pipe(gulp.dest("dist/"))
});
Créer un fichier vide a.json
et l'utiliser comme source. Puis injectez votre propre contenu avec gulp-header
et faites ce que vous voulez avec.
Si vous voulez éviter des fichiers supplémentaires (a.json), essayez ceci:
'use strict';
const gulp = require('gulp');
const transform = require('gulp-transform');
const rename = require("gulp-rename");
gulp.task('default', function() {
return gulp.src("./gulpfile.js")
.pipe(transform(() => JSON.stringify({a:1,b:2})))
.pipe(rename("a.json"))
.pipe(gulp.dest("dist/"))
});