web-dev-qa-db-fra.com

module.exports qui inclut toutes les fonctions sur une seule ligne

Il s'agit d'une question complémentaire à Dans Node.js, comment "inclure" les fonctions de mes autres fichiers?

Je voudrais inclure un fichier js externe qui contient des fonctions communes pour une application node.js.

À partir d'une des réponses de Dans Node.js, comment "inclure" les fonctions de mes autres fichiers? , cela peut être fait par

// tools.js
// ========
module.exports = {
  foo: function () {
    // whatever
  },
  bar: function () {
    // whatever
  }
};

var zemba = function () {
}

Il n'est pas pratique d'exporter chaque fonction. Est-il possible d'avoir une ligne unique qui exporte toutes les fonctions? Quelque chose qui ressemble à ceci;

module.exports = 'all functions';

C'est tellement plus pratique de cette façon. C'est aussi moins bogué si l'on oublie d'exporter certaines fonctions plus tard.

S'il ne s'agit pas d'une ligne unique, existe-t-il des alternatives plus simples qui rendent le codage plus pratique? Je veux juste inclure un fichier js externe composé de fonctions communes de manière pratique. Quelque chose comme include <stdio.h> en C/C++.

14
user781486

Vous pouvez d'abord écrire toutes vos déclarations de fonctions puis les exporter dans un objet:

function bar() {
   //bar
}

function foo() {
   //foo
}

module.exports = {
    foo: foo,
    bar: bar
};

Il n'y a cependant pas de one-liner magique, vous devez exporter explicitement les fonctions que vous souhaitez rendre publiques.

31
Timur Ridjanovic

J'ai fait quelque chose comme ceci:

var Exported = {
   someFunction: function() { },
   anotherFunction: function() { },
}

module.exports = Exported;

J'en ai besoin dans un autre fichier et je peux accéder à ces fonctions

var Export = require('path/to/Exported');
Export.someFunction();

Il s'agit essentiellement d'un objet contenant des fonctions, puis vous exportez l'objet.

11
Peter Huffer

Il convient de noter que dans ES6, vous pouvez désormais exporter des fonctions comme celle-ci:

export function foo(){}
export function bar(){}
function zemba(){}

Écrivez simplement export avant les fonctions que vous souhaitez exporter. Plus d'informations ici .

9
EpicDavi

Si vous utilisez ES6, vous pouvez faire quelque chose comme ça:

function bar() {
   //bar
}

function foo() {
   //foo
}

export default { bar, foo };
8
Weslei Prudencio

Une très vieille question mais je devais juste résoudre le même problème moi-même. la solution que j'ai utilisée était de définir une classe à l'intérieur du module pour contenir toutes mes fonctions et d'exporter simplement une instance de la classe.

classes.js ressemble à ceci:

class TestClass
{
   Function1() {
        return "Function1";
    } 
    Function2() {
        return "Function2";
    }
}

module.exports = new TestClass();

app.js ressemble à ceci:

const TestClass = require("./classes");
console.log( TestClass.Function1);

continuez à ajouter plus de fonctions à la classe et elles seront exportées :)

4
Joe Bourne