2017-04-01 2 views

Répondre

6

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.

https://www.npmjs.com/package/gulp-to-stream

1

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/")) 
});