নোড.জেএস প্যাকেজ.জসন প্রধান প্যারামিটার


147

আমি ইতিমধ্যে বেশ কিছু অনুসন্ধান করেছি। তবে এখনও নোড.জেএস এর প্যাকেজ.জসনের মূল প্যারামিটার সম্পর্কে সন্দেহ রয়েছে

  1. এই ক্ষেত্রটি পূরণ করা কীভাবে সহায়তা করবে? অন্য উপায়ে জিজ্ঞাসা করা, আমি যদি ক্ষেত্রটি উপস্থাপন করে তবে আমি কি অন্য স্টাইলে মডিউলটি শুরু করতে পারি?
  2. আমি কি মূল প্যারামিটারে একাধিক স্ক্রিপ্ট পূরণ করতে পারি? যদি হ্যাঁ, তবে সেগুলি কি দুটি থ্রেড হিসাবে শুরু করা হবে? যদি না হয় তবে আমি মডিউলে দুটি স্ক্রিপ্ট কীভাবে শুরু করতে পারি এবং সেগুলি সমান্তরালে চালাতে পারি?

আমি জানি যে দ্বিতীয় প্রশ্নটি বেশ অদ্ভুত। কারণ ওপেনশিফটে আমি একটি নোড.জেএস অ্যাপ্লিকেশনটি হোস্ট করেছি তবে অ্যাপ্লিকেশনটিতে দুটি প্রধান উপাদান রয়েছে। একটি হ'ল একটি REST এপিআই এবং একটি হ'ল একটি বিজ্ঞপ্তি সরবরাহকারী পরিষেবা।

আমি আশঙ্কা করছি যে বিজ্ঞপ্তি সরবরাহ করার প্রক্রিয়াটি যদি একক থ্রেড হিসাবে প্রয়োগ করা হয় তবে তারা REST এপিআইকে ব্লক করে দেবে। তবে তাদের একই মঙ্গোডিবি কার্তুজের সাথে সংযোগ করতে হবে। তদতিরিক্ত, আমি উভয় উপাদান যদি সম্ভব হয় একই গিয়ারে পরিবেশন করা যায় তবে আমি একটি গিয়ার সংরক্ষণ করতে চাই।

কোন পরামর্শ স্বাগত।

উত্তর:


149

থেকে npm ডকুমেন্টেশন :

প্রধান ক্ষেত্রটি হল একটি মডিউল আইডি যা আপনার প্রোগ্রামের প্রাথমিক প্রবেশ পয়েন্ট। এটি হ'ল, যদি আপনার প্যাকেজটির নাম রাখা হয় foo, এবং কোনও ব্যবহারকারী এটি ইনস্টল করে এবং তারপরে ("foo") প্রয়োজন হয়, তবে আপনার মূল মডিউলটির রফতানি বস্তুটি ফিরে আসবে।

এটি আপনার প্যাকেজ ফোল্ডারের মূলের তুলনায় একটি মডিউল আইডি হওয়া উচিত।

বেশিরভাগ মডিউলগুলির জন্য, এটি একটি প্রধান স্ক্রিপ্ট থাকা এবং প্রায়শই অন্যরকম না হয়ে সর্বাধিক উপলব্ধি করে।

এটি সংক্ষেপে বলতে:

  1. আপনার প্যাকেজটির প্রবেশ ফর্মটি এর মূল ফোল্ডারের থেকে পৃথক হলে mainআপনার কেবলমাত্র একটি প্যারামিটার প্রয়োজন । উদাহরণস্বরূপ, মানুষ প্রায়ই যাওয়ার প্রবেশ বিন্দু করা বা , এই ক্ষেত্রে সংশ্লিষ্ট স্ক্রিপ্ট হিসাবে বর্ণনা করা আবশ্যক মধ্যে মধ্যে ।package.jsonindex.jslib/index.jslib/<packagename>.jsmainpackage.json
  2. আপনার দুটি স্ক্রিপ্ট থাকতে পারে না main, কেবল কারণ এন্ট্রি পয়েন্টটি require('yourpackagename')দ্ব্যর্থহীনভাবে সংজ্ঞায়িত করা উচিত।

ধন্যবাদ, তারপরে আমি উপাদানটি শিশু প্রক্রিয়া হিসাবে প্রয়োগ করার বিষয়টি বিবেচনা করব।
গাভিন

1
সাইড-নোট 1, electronসন্মান প্রধান পরামিতি, অর্থাত্ electron .একটি subfolder থেকে ডান জিনিস শুরু হবে, সেখানে একটি উদাহরণ একটি "main": "dist/app/index.js",মধ্যে package.json(পাশাপাশি অন্যান্য প্ল্যাটফর্মের / অবকাঠামো জন্য সত্য রাখা পারে)।
ফ্রাঙ্ক নোক্ক

1
পার্শ্ব-নোট 2: You can't have two scripts as main...- সত্য। তবে, যদি আপনার প্যাকেজটি উদাহরণস্বরূপ একাধিক সিএলআই কমান্ড সরবরাহ করে থাকে (উন্নয়নের সময় অ্যাক্সেসযোগ্য সময়ে ./node_modules/.bin/<symlink>) "বিন" পরামিতিটি পরীক্ষা করে দেখুন
ফ্রাঙ্ক নোক্ক

আমার বিল্ড / ইনডেক্স.জেএস আছে তবে আমি যদি এটিকে সিআরসি / ইনডেক্স.জেজে পরিবর্তন করি তবে এটি কিছু করতে পারে। এটি এখনও বাল্ড / সূচককে নির্দেশ করছে। আমি এনএমপি লিঙ্কটি ব্যবহার করছি
কার্লোস

প্রত্যেকে .jsএখানে এক্সটেনশন ব্যবহার করছে তবে "মডিউল শনাক্তকারীদের" এক্সটেনশন নেই .. যা অস্পষ্টতাকে আমরা ব্যবহার করার কথা
বলেছিলাম

47

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

ধরা যাক আপনার নিম্নলিখিত ফাইলের কাঠামো রয়েছে:

my-npm-module
|-- lib
|   |-- module.js
|-- package.json

প্রধান পরামিতি ছাড়া package.json , আপনি মডিউল এন্ট্রি পয়েন্ট দিয়ে মডিউল লোড করতে হবে: require('my-npm-module/lib/module.js')

আপনি সেট করেন তাহলে package.json প্রধান পরামিতি নিম্নরূপ "main": "lib/module.js", আপনি মডিউল এই ভাবে লোড করতে সক্ষম হবে: require('my-npm-module')


20

যদি আপনার package.jsonফাইলটিতে উদাহরণস্বরূপ থাকে:

{
"name": "zig-zag",
"main": "lib/entry.js",
...
}

lib/entry.js আপনার প্যাকেজ প্রধান প্রবেশ পয়েন্ট হবে।

কল করার সময়

require('zig-zag');

নোডে, lib/entry.jsআসল ফাইলটি প্রয়োজনীয় হবে।


1
সুতরাং যদি কোডটি আমদানি করা না বোঝানো হয়, তবে আমরা কী 'মূল' প্যারামিটারটি ছেড়ে দিতে পারি?
কোকোডোকো

@ কোকোডোকো হ্যাঁ এই ক্ষেত্রে এটিই পরামর্শ দেওয়া হয়েছে
cquezel

7

mainকীটির একটি গুরুত্বপূর্ণ কাজ এটি আপনার প্রবেশের পয়েন্টের জন্য পথ সরবরাহ করে। এটি কাজ করার সময় খুব সহায়ক nodemon। আপনি যদি কাজ করে থাকেন nodemonএবং আপনি mainকী package.jsonহিসাবে আপনার প্রবিধানটি নির্দিষ্ট করে তা নির্ধারণ করেন "main": "./src/server/app.js", তবে আপনি কেবলমাত্র পিডাব্লুডির পরিবর্তেnodemon রুট দিয়ে সিএলআইতে টাইপ করে সার্ভারটি ক্র্যাঙ্ক করতে পারেন । nodemon ./src/server/app.js


3

আমি যতদূর জানি, এটি এনপিএমের জন্য আপনার নোড প্যাকেজ (লাইব্রেরি) এর প্রধান প্রবেশ পয়েন্ট। এটি কেবল তখনই প্রয়োজন যখন আপনার এনএমপি প্রকল্পটি নোড প্যাকেজ (গ্রন্থাগার) হয়ে যায় যা অন্যরা এনপিএমের মাধ্যমে ইনস্টল করতে পারে।


ধরা যাক আপনার একটি বিল্ড /, ডিস্ট /, বা লিব / ফোল্ডার সহ একটি গ্রন্থাগার রয়েছে। এই ফোল্ডারে আপনি আপনার লাইব্রেরির জন্য নিম্নলিখিত সংকলিত ফাইল পেয়েছেন:

-lib/
--bundle.js

তারপরে আপনার প্যাকেজ.জেসনে , আপনি এনপিএমকে কীভাবে গ্রন্থাগারটি অ্যাক্সেস করবেন তা জানান (নোড প্যাকেজ):

{
  "name": "my-library-name",
  "main": "lib/bundle.js",
  ...
}

আপনার জেএস প্রকল্পে এনপিএম সহ নোড প্যাকেজ ইনস্টল করার পরে, আপনি আপনার বান্ডিলযুক্ত বান্ডেল.জেএস ফাইল থেকে কার্যকারিতা আমদানি করতে পারেন :

import { add, subtract } from 'my-library-name';

আপনার লাইব্রেরির জন্য কোড বিভক্তকরণ (যেমন ওয়েবপ্যাক) ব্যবহার করার সময় এটি সত্যও রয়েছে । উদাহরণস্বরূপ, এই ওয়েবপ্যাক.config.js কোডটি একের পরিবর্তে একাধিক বান্ডেলে প্রকল্পের বিভাজন ব্যবহার করে।

module.exports = {
  entry: {
    main: './src/index.js',
    add: './src/add.js',
    subtract: './src/subtract.js',
  },
  output: {
    path: `${__dirname}/lib`,
    filename: '[name].js',
    library: 'my-library-name',
    libraryTarget: 'umd',
  },
  ...
}

তবুও, আপনি আপনার প্যাকেজ.জসনে আপনার লাইব্রেরিতে একটি প্রধান প্রবেশ প্রবেশ বিন্দু সংজ্ঞায়িত করবেন :

{
  "name": "my-library-name",
  "main": "lib/main.js",
  ...
}

তারপরে লাইব্রেরিটি ব্যবহার করার সময়, আপনি আপনার ফাইলগুলি আপনার প্রধান এন্ট্রি পয়েন্ট থেকে আমদানি করতে পারেন:

import { add, subtract } from 'my-library-name';

তবে আপনি প্যাকেজ.জসন থেকে মূল প্রবেশ পয়েন্টটি বাইপাস করতে এবং কোড বিভক্ত বান্ডিলগুলি আমদানি করতে পারেন:

import add from 'my-library-name/lib/add';
import subtract from 'my-library-name/lib/subtract';

সর্বোপরি, আপনার প্যাকেজ.জসনের মূল সম্পত্তিটি আপনার লাইব্রেরির আপনার মূল এন্ট্রি পয়েন্ট ফাইলটিতে কেবল পয়েন্ট করে।


0

ওপেনশিফ্টের জন্য, আপনি কেবলমাত্র একটি পিওআরটি এবং আইপি জুড়ি (প্রতি আবেদন অনুসারে) আবদ্ধ করতে পাবেন। মনে হচ্ছে আপনার প্রতিটি পরিষেবার শেষ পয়েন্টের জন্য অভ্যন্তরীণ রুটগুলি যুক্ত করে একক নোডেজ উদাহরণ থেকে উভয় পরিষেবা পরিবেশন করতে সক্ষম হওয়া উচিত।

আপনার অ্যাপ্লিকেশনটি এখানে শুরু করতে ওপেনশিফ্ট কীভাবে আপনার প্রকল্পের প্যাকেজ.জসন ব্যবহার করে সে সম্পর্কে আমার কিছু তথ্য রয়েছে: https://www.openshift.com/blogs/run-your-nodejs-projects-on-openshift-in-two-simple- stepsps #package_json


-5

কেবল এটিকে "সূচনা পয়েন্ট" হিসাবে ভাবেন।

অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের অর্থে, সি # বলুন, এটি অবজেক্ট শ্রেণির উদ্যোগ () বা নির্মাতা, এটাই "এন্ট্রি পয়েন্ট" বলতে বোঝায়।

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

public class IamMain  // when export and require this guy
{
    public IamMain()  // this is "main"
    {...}

    ...   // many others such as function, properties, etc.
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.