নোড.জেএসে একাধিক মডিউল.এক্সপোর্টগুলি ঘোষণা করুন


243

আমি যা অর্জন করতে চাইছি তা হ'ল একটি মডিউল তৈরি করা যাতে এতে একাধিক ফাংশন থাকে।

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একটি ইউআরএল স্ট্রিং, তবে যখন আমার কাছে থাকে তখন সর্বদা অভিযোগ করা হয় যে টাইপটি ভুল।

এই ক্ষেত্রে আমি কীভাবে একাধিক মডিউল.এক্সপোর্টগুলি ঘোষণা করতে পারি?


2
আমি স্পষ্টতই এই দৃষ্টান্তের কিছু মূল অংশটি মিস করছি কারণ এটি আমাকে কাজ করতে এড়াতে যা লাগে তা দূরে সরিয়ে দেয়।
জোশুয়া পিন্টার

উত্তর:


540

আপনি যেমন কিছু করতে পারেন:

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

বা শুধু:

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

তারপরে কলিং স্ক্রিপ্টে:

const myModule = require('./myModule.js');
const method = myModule.method;
const otherMethod = myModule.otherMethod;
// OR:
const {method, otherMethod} = require('./myModule.js');

25
সর্বদা ব্যবহার করুন module.exports = {}এবং না module.method = ...stackoverflow.com/a/26451885/155740
স্কটি

9
আমি module.methodএখানে কোথাও ব্যবহার করছি না ... কেবল exports.method, যা কেবলমাত্র একটি রেফারেন্স module.exports.method, তাই একইভাবে আচরণ করে। পার্থক্যটি কেবলমাত্র আমরা সংজ্ঞায়িত করি না module.exports, তাই {}যদি আমি ভুল না করি তবে এটি ডিফল্ট হয় ।
ম্যাশ

: @mash ব্যবহার করে অন্য ফাইল এই কাজ করবে var otherMethod = require('module.js')(otherMethod);? অর্থাৎ, সেই লাইনের কি otherMethodকেবল ফাংশনটির প্রয়োজন হবে যেমন এটি পৃষ্ঠায় একমাত্র ফাংশন এবং রফতানি হয়েছে module.exports = secondMethod;:?
ওয়াইপ্রেসাম্বল

3
@YPCrumble কাজ করতে পারতেন তা var otherMethod = require('module.js').otherMethod
ম্যাশ

অন্যান্য প্রোগ্রামে যে ম্যাচিংয়ের প্রয়োজনীয়তা রয়েছে তা কি আপনি দেখতে পাচ্ছেন?
নিলওয়াল্টার্স

137

একাধিক ক্রিয়াকলাপ রফতানি করতে আপনি কেবল এগুলি তাদের তালিকা করতে পারেন:

module.exports = {
   function1,
   function2,
   function3
}

এবং তারপরে তাদের অন্য একটি ফাইলে অ্যাক্সেস করতে:

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

এবং তারপরে আপনি প্রতিটি ফাংশন কল করে কল করতে পারেন:

myFunctions.function1
myFunctions.function2
myFunctions.function3

1
নিখুঁত উত্তর, এই উত্তরটি আমাকে সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত।
বিষ্ণু রঙ্গনাথন

আপনি ছেলেরা কিভাবে ব্যবহার করেছেন require("./lib/file.js")? আমার ব্যবহার করা দরকার require("../../lib/file.js"), অন্যথায় এটি কাজ করবে না।
আন্তোনিও ওয়

11
অ্যাক্সেস করার সময় আপনি এটিও করতে পারেন: const { function1, function2, function3 } = require("./lib/file.js")যা আপনাকে সরাসরি কল করতে দেয় (উদাহরণস্বরূপ function1পরিবর্তে myFunctions.function1)
ডেভিড ইয়েসার

এটিই সবচেয়ে পরিষ্কার এবং সহজ পদ্ধতির!
জিউস

42

@ ম্যাস জবাব ছাড়াও আমি আপনাকে সর্বদা নিম্নলিখিত কাজগুলি করার পরামর্শ দিই:

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

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

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

এখানে নোট করুন:

  • আপনি কল করতে পারেন methodথেকে otherMethodএবং আপনি এই অনেক প্রয়োজন হবে
  • আপনার প্রয়োজনের সময় আপনি ব্যক্তিগত হিসাবে দ্রুত কোনও পদ্ধতি লুকিয়ে রাখতে পারেন
  • বেশিরভাগ আইডিই'র পক্ষে আপনার কোডটি বোঝার এবং স্বতঃপূরণ করা সহজ))
  • আপনি আমদানির জন্য একই কৌশলটি ব্যবহার করতে পারেন:

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


নোট করুন যে এটি es6 অবজেক্ট ইনিশিয়ালাইজার শর্টকাট ব্যবহার করে - developer.mozilla.org/en-US/docs/Web/JavaScript/References/…
ক্রিসমার্ক

1
এটি মেথডের অন্য পদ্ধতিতে অ্যাক্সেস করার পদ্ধতি হিসাবে এটি উত্তম উত্তর। যে ইশারা জন্য ধন্যবাদ।
জেফ বিগেলি 21'23

15

এটি কেবলমাত্র আমার রেফারেন্সের জন্য যা আমি অর্জন করার চেষ্টা করছিলাম তা এর দ্বারা সম্পাদিত হতে পারে।

মধ্যে 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);

10

module.js:

const foo = function(<params>) { ... }
const bar = function(<params>) { ... } 

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

main.js:

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

// pass your parameters
var f1 = foo(<params>);
var f2 = bar(<params>);

8

ফাইলগুলি ES6 রফতানি ব্যবহার করে লেখা থাকলে আপনি লিখতে পারেন:

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

8

আপনি যেভাবে এটি করতে পারেন তা হল মডিউলটি প্রতিস্থাপনের পরিবর্তে একটি নতুন অবজেক্ট তৈরি করা।

উদাহরণ স্বরূপ:

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

এবং কল করতে

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

অন্যান্য উত্তরের তুলনায় এটি আমার কাছে খুব সাধারণ পদ্ধতির কাছে উপস্থিত হয়েছিল! সত্যই নিস
এইচএন সিং

6

অন্যান্য ফাংশনগুলির মধ্যে ম্যানুয়ালি প্রতিনিধিত্ব করা একটি ফাংশন আপনি লিখতে পারেন:

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

এটি ফাংশন ওভারলোডিং অর্জনের একটি উপায়, তবে এটি খুব ... মার্জিত নয়। আমি মনে করি ম্যাশের উত্তরটি ক্লিনার এবং আরও ভাল উদ্দেশ্য হিসাবে কাজ করে।
নেপক্সক্স

5

এটা ব্যবহার কর

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

  }
  exports.yourMethod2 =  function (success)
  {

  }


})();

3

দুই ধরণের মডিউল আমদানি এবং রফতানি।

টাইপ 1 (মডিউল.জেএস):

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

কীভাবে আমদানি মডিউল ব্যবহার করবেন?

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

3

এছাড়াও আপনি এটি যেমন এক্সপোর্ট করতে পারেন

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;

2

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

2

এটি করার একাধিক উপায় রয়েছে, নীচে একটি উপায় উল্লেখ করা হয়েছে। কেবল ধরে নিন আপনার কাছে .js ফাইল রয়েছে।

let add = function (a, b) {
   console.log(a + b);
};

let sub = function (a, b) {
   console.log(a - b);
};

আপনি নিম্নলিখিত কোড স্নিপেট ব্যবহার করে এই ফাংশনগুলি রপ্তানি করতে পারেন,

 module.exports.add = add;
 module.exports.sub = sub;

এবং আপনি এই কোড স্নিপেট ব্যবহার করে রফতানি ফাংশনগুলি ব্যবহার করতে পারেন,

var add = require('./counter').add;
var sub = require('./counter').sub;

add(1,2);
sub(1,2);

আমি জানি এটি একটি দেরীতে জবাব, তবে আশা করি এটি সাহায্য করবে!


0
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

আপনি যদি সাধারণ বস্তুর পরিবর্তে মডিউল ফাইলে একটি শ্রেণি ঘোষণা করেন

ফাইল: UserModule.js

//User Module    
class User {
  constructor(){
    //enter code here
  }
  create(params){
    //enter code here
  }
}
class UserInfo {
  constructor(){
    //enter code here
  }
  getUser(userId){
    //enter code here
    return user;
  }
}

// export multi
module.exports = [User, UserInfo];

মূল ফাইল: index.js

// import module like
const { User, UserInfo } = require("./path/to/UserModule");
User.create(params);
UserInfo.getUser(userId);

0

আপনি এই পদ্ধতিরও ব্যবহার করতে পারেন

module.exports.func1 = ...
module.exports.func2 = ...

অথবা

exports.func1 = ...
exports.func2 = ...

0

কারও সহায়তার জন্য এখানে যুক্ত করা:

এই কোড ব্লকটি সাইপ্রাস index.js প্লাগইনগুলিতে>> সাইপ্রেস- এনটিএলএম - অউথ এবং সাইপ্রেস এনভি ফাইল ফাইল নির্বাচন করে একাধিক প্লাগইন যুক্ত করতে সহায়তা করবে

const ntlmAuth = require('cypress-ntlm-auth/dist/plugin');
const fs = require('fs-extra');
const path = require('path');

const getConfigurationByFile = async (config) => {
  const file = config.env.configFile || 'dev';
  const pathToConfigFile = path.resolve(
    '../Cypress/cypress/',
    'config',
    `${file}.json`
  );
  console.log('pathToConfigFile' + pathToConfigFile);
  return fs.readJson(pathToConfigFile);
};

module.exports = async (on, config) => {
  config = await getConfigurationByFile(config);
  await ntlmAuth.initNtlmAuth(config);
  return config;
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.