web-dev-qa-db-ja.com

Node.jsで複数のmodule.exportsを宣言する

私が達成しようとしているのは、その中に複数の機能を含む1つのモジュールを作成することです。

module.js:

module.exports = function(firstParam) { console.log("You did it"); },
module.exports = function(secondParam) { console.log("Yes you did it"); }, 
// This may contain more functions

main.js:

var foo = require('module.js')(firstParam);
var bar = require('module.js')(secondParam);

私が抱えている問題は、firstParamがオブジェクト型であり、secondParamがURL文字列であるということですが、それが常に間違っていると文句を言うのです。

この場合、どうすれば複数のmodule.exportsを宣言できますか?

173
Ali

次のようなことができます。

module.exports = {
    method: function() {},
    otherMethod: function() {}
}

それともちょうど:

exports.method = function() {};
exports.otherMethod = function() {};

それから呼び出し側プログラムでは:

var MyMethods = require('./myModule.js');
var method = MyMethods.method;
var otherMethod = MyMethods.otherMethod;
399
mash

複数の関数をエクスポートするには、次のようにそれらをリストするだけです。

module.exports = {
   function1,
   function2,
   function3
}

そして別のファイルでそれらにアクセスするには:

var myFunctions = require("./lib/file.js")

そして、次のようにして各関数を呼び出すことができます。

myFunctions.function1
myFunctions.function2
myFunctions.function3
94
Devorah

@mash回答に加えて、私はあなたがいつも以下をすることを勧めます:

const method = () => {
   // your method logic
}

const otherMethod = () => {
   // your method logic 
}

module.exports = {
    method, 
    otherMethod,
    // anotherMethod
};

ここに注意してください。

  • methodからotherMethodを呼び出すことができます、そしてあなたはこれをたくさん必要とするでしょう
  • 必要に応じて、メソッドを非公開として素早く非表示にすることができます。
  • これはほとんどのIDEにとってあなたのコードを理解し自動補完することをより容易にします;)
  • インポートにも同じ方法を使用できます。

    const {otherMethod} = require('./myModule.js');

29

私が達成しようとしていたことがこれによって達成されることができるので、これは私の参考のためだけです。

module.js

こんなことができる

    module.exports = function ( firstArg, secondArg ) {

    function firstFunction ( ) { ... }

    function secondFunction ( ) { ... }

    function thirdFunction ( ) { ... }

      return { firstFunction: firstFunction, secondFunction: secondFunction,
 thirdFunction: thirdFunction };

    }

main.js

var name = require('module')(firstArg, secondArg);
15
Ali

他の関数の間で手動で委任する関数を書くことができます。

module.exports = function(arg) {
    if(arg instanceof String) {
         return doStringThing.apply(this, arguments);
    }else{
         return doObjectThing.apply(this, arguments);
    }
};
6
icktoofay

ファイルがES6エクスポートを使用して書き込まれている場合は、次のように書くことができます。

module.exports = {
  ...require('./foo'),
  ...require('./bar'),
};
6
Jon Sakas

それを行うことができる1つの方法はそれを置き換えるのではなくモジュール内に新しいオブジェクトを作成することです。

例えば:

    var testone = function()
{
    console.log('teste one');
};
var testTwo = function()
{
    console.log('teste Two');
};
module.exports.testOne = testOne;
module.exports.testTwo = testTwo;

と呼ぶ

var test = require('path_to_file').testOne:
testOne();
6
Jesse Teixeira

これを使って

(function()
{
  var exports = module.exports = {};
  exports.yourMethod =  function (success)
  {

  }
  exports.yourMethod2 =  function (success)
  {

  }


})();
5
Siddharth

2種類のモジュールのインポートとエクスポート

タイプ1(module.js):

// module like a webpack config
const development = {
  // ...
};
const production = {
  // ...
};

// export multi
module.exports = [development, production];
// export single
// module.exports = development;

タイプ1(main.js):

// import module like a webpack config
const { development, production } = require("./path/to/module");

タイプ2(module.js):

// module function no param
const module1 = () => {
  // ...
};
// module function with param
const module2 = (param1, param2) => {
  // ...
};

// export module
module.exports = {
  module1,
  module2
}

タイプ2(main.js):

// import module function
const { module1, module2 } = require("./path/to/module");

importモジュールの使い方は?

const importModule = {
  ...development,
  // ...production,
  // ...module1,
  ...module2("param1", "param2"),
};
2
MNF

また、あなたはこのようにそれをエクスポートすることができます

const func1 = function (){some code here}
const func2 = function (){some code here}
exports.func1 = func1;
exports.func2 = func2;

またはこのような匿名関数の場合

    const func1 = ()=>{some code here}
    const func2 = ()=>{some code here}
    exports.func1 = func1;
    exports.func2 = func2;
1
bahri noredine

module.js:

const foo = function(firstParam) { ... }
const bar = function(secondParam) { ... } 

//export modules
module.exports = {
    foo,
    bar 
}

main.js:

// import modules
var { foo, bar } = require('module');

// pass your parameters
var f1 = foo(firstParam);
var f2 = bar(secondParam);
1
Anthony Awuley
module.exports = (function () {
    'use strict';

    var foo = function () {
        return {
            public_method: function () {}
        };
    };

    var bar = function () {
        return {
            public_method: function () {}
        };
    };

    return {
        module_a: foo,
        module_b: bar
    };
}());
0
balthazarbux

module1.js:

var myFunctions = { 
    myfunc1:function(){
    },
    myfunc2:function(){
    },
    myfunc3:function(){
    },
}
module.exports=myFunctions;

main.js

var myModule = require('./module1');
myModule.myfunc1(); //calling myfunc1 from module
myModule.myfunc2(); //calling myfunc2 from module
myModule.myfunc3(); //calling myfunc3 from module
0
Puria jahanbani