J'utilise gulp depuis un certain temps maintenant et je sais comment importer un autre module de nœud, par exemple

var sass = require('gulp-sass');

C'est bien, mais mon gulpfile se remplit de code que j'aimerais déplacer dans un fichier séparé et «exiger». Plus précisément, j'écris un plugin postcss, que je travaille déjà lorsqu'il est déclaré en tant que fonction à l'intérieur du gulpfile. Ma question est de savoir comment mettre ma fonction dans un fichier externe et l'exiger comme je le fais avec un module de nœud. Dois-je "exporter" la fonction dans le fichier requis? Dois-je utiliser des modules ES6 ou quelque chose comme ça?

En passant, je me rends compte que si je faisais cela, je devrais probablement (A) le transformer en un module de nœud approprié et le mettre sur un référentiel NPM privé, mais cela semble inutile, ou (B) le transformer en une bonne gorgée plugin, mais cela nécessiterait d'apprendre à créer un plugin gulp et d'apprendre sur les flux et autres. Les deux sont probablement meilleurs mais prendraient plus de temps, j'ai donc décidé de garder la fonction simple et locale pour l'instant.

1
jonhobbs 7 mars 2016 à 18:27

3 réponses

Meilleure réponse

Créez d'abord un nouveau fichier js (ici ./lib/myModule.js):

//./lib/myModule.js
module.exports =  {
    fn1: function() { /**/ },
    fn2: function() { /**/ },
}

Vous pouvez également passer quelques arguments à votre module:

// ./lib/myAwesomeModule.js
var fn1 = function() {
}
module.exports =  function(args) {
    fn1: fn1,
    fn2: function() { 
        // do something with the args variable
    },
}

Alors exigez-le dans votre gulpfile:

//gulpfile.js
var myModule = require('./lib/myModule')

// Note: here you required and call the function with some parameters
var myAwesomeModule = require('./lib/myAwesomeModule')({
    super: "duper",
    env: "development"
});

// you could also have done
/*
var myAwesomeModuleRequire = require('./lib/myAwesomeModule')
var myAwesomeModule = myAwesomeModuleRequire({
    super: "duper",
    env: "development"
});
*/

gulp.task('test', function() {
   gulp.src()
    .pipe(myModule.fn1)
    .pipe(myAwesomeModule.fn1)
    .gulp.dest()
}
5
cl3m 7 mars 2016 à 15:41

Tout d'abord, vous devez ajouter export default <nameOfYourFile> à la fin de votre fichier

Ensuite, pour l'utiliser, écrivez import gulp from 'gulp'

Si vous avez un message d'erreur, installez babel-core et babel-preset-es2015 avec NPM et ajoutez un "presets": ["es2015"] prédéfini dans votre fichier de configuration .babelrc.

0
kingdaro 18 avril 2018 à 18:40

Je résout mon problème en installant:

npm i babel-plugin-add-module-exports

Ensuite, j'ajoute "plugins": [["add-module-exports"]] au .babelrc

0
ngocsangyem 10 mai 2019 à 05:02