বোর দের - এমডি, এস 6, গ্লোবাল এবং নোডের মধ্যে পার্থক্য


291

আমি আমার প্রথম বাওয়ার উপাদান তৈরি করছি। bower initস্ক্রিপ্টটি চালানোর পরে আমাকে জিজ্ঞাসা করে 'এই প্যাকেজটি কোন ধরণের মডিউল প্রকাশ করে?' এই বিকল্পগুলির সাথে:

  • AMD
  • es6
  • globals
  • নোড

এই বিকল্পগুলির মধ্যে পার্থক্য কী?

উত্তর:


121

যদি আপনি না জানেন তবে এটি সম্ভবত গ্লোবালগুলি আপনার পক্ষে সঠিক উত্তর।

যে কোনও উপায়ে, আপনার বুঝতে হবে:

[হালনাগাদ]

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

এখনই, প্যাকেজের ফাইলটিতে moduleTypeসম্পত্তি সেট করা ছাড়া এটির কোনও প্রভাব নেই bower.json

মূল টান-অনুরোধের জন্য https://github.com/bower/bower/pull/934 দেখুন ।

[আপডেট # 2]

মন্তব্যের জবাব দেওয়ার জন্য কয়েকটি অতিরিক্ত পয়েন্ট:

  • এই মুহূর্তে এএফআইকে moduleTypeসম্পত্তি সম্পর্কে কোনও বৈধতা দেওয়া হয়নি - যার অর্থ হল যে লোকেরা প্রযুক্তিগতভাবে এর জন্য তারা যে মানটি চায় তা ব্যবহার করার অনুমতিপ্রাপ্ত, এমনকি angularjsযদি তারা এটি করতে আগ্রহী মনে করে তবে
  • আবাস কমিটি অতিরিক্ত অন্তর্ভুক্তি দিকে প্রখর হতে হবে বলে মনে হয় non-interoperable/proprietary moduleTypes(মনে সুরকার, কৌণিক, ইত্যাদি) - যা সহজেই অনুমেয়, কিন্তু এখনো আবার, কিছুই সত্যিই ব্যবহার থেকে মানুষ রোধ করে moduleTypeমান তারা চান
  • পূর্বের ব্যতিক্রম হ'ল (কিছুটা) সাম্প্রতিক অন্তর্ভুক্তি yui moduleType, সুতরাং, সেখানে একটি "ব্যতিক্রম" তৈরি করা হবে, ধরে নিই যে তারা সম্মিলিত পরিকল্পনার অংশ um

আমি যদি একটি তালিকাভুক্ত প্যাকেজ পরিচালকের জন্য কোনও প্যাকেজ লেখার জন্য এবং তা বোভারে প্রকাশ করতে চাই তবে আমি কী করব?

আমি কোনও এসআই 6 মডিউল লেখব এবং আমার প্রয়োজন প্যাকেজ ফর্ম্যাটটিকে আউটপুট করতে / প্যাচ এস 6-ট্রান্সপ্লার ব্যবহার করুন । তারপরে আমি / অথবা:

  • আমার প্যাকেজ প্রযুক্তিটিকে পছন্দ হিসাবে অন্তর্ভুক্ত করার জন্য বোওয়ার বলদের অনুরোধ করুন (এটি লক্ষ্য হিসাবে এস transp-ট্রান্সপোর্টার দ্বারা সমর্থিত সত্যের ভিত্তিতে)
  • আমার এর প্যাকেজটি এর এস module মডিউল সংস্করণ এবং এর পরিবর্ধিত XXX সংস্করণ উভয়ই প্রকাশ করুন এবং এ es6হিসাবে ব্যবহার করুনmoduleType

দাবি অস্বীকার: আমার কাছে অ্যাঙ্গুলারজ মডিউলগুলি লেখার বাস্তব জীবনের অভিজ্ঞতা নেই।


4
অ্যাঙ্গুলারজেএস মডিউল / প্যাকেজ তৈরি করার জন্য কী গ্লোবালগুলি সঠিক উত্তর হতে পারে?

1
"অসমর্থিত প্যাকেজ পরিচালকদের সাথে কী করা উচিত" - এই প্রশ্ন সম্পর্কে অতিরিক্ত চিন্তাভাবনা নিয়ে আমি আমার পোস্ট আপডেট করেছি - আবারও, এই ক্ষেত্রটি এখনই বাধ্যতামূলক নয় বা কোনও কিছুর জন্য এখনই ব্যবহৃত হয় না - এর মানটি কেবল তথ্যমূলক। হিসাবে angularjsনিজেই, আমি ব্যবহার করতে পারে globals, হ্যাঁ, কিন্তু আমার আপডেটের পড়ুন। আশা করি এইটি কাজ করবে.
ম্যাঙ্গলেড দেউতজ

আমি নোড ব্যবহার করছি তার মানে কি আমি নোড মডিউলগুলি প্রকাশ করছি? আমি কৌনিকটিও ব্যবহার করছি, যা আমি বোরওয়ার ব্যবহার করে ইনস্টল করছিলাম যখন আমি লক্ষ্য করলাম যে আমার কাছে একটি বার্তা ছিল যা আমাকে বলছিল যে "সংরক্ষণ করার জন্য কোনও বোভার.জসন ফাইল নেই, একটি তৈরি করতে বোরো আরকিউ" ব্যবহার করুন "। (অথবা, এটি যদি পৃথক প্রশ্ন হয় তবে আমি একটি প্রশ্ন লিখতে পারি thought আমি ভেবেছিলাম এটি সম্ভবত আপনার উত্তরের সাথে সম্পর্কিত
হওয়ায়

27

প্রাথমিক

আমি bower initপ্রথমবারের জন্যও ব্যবহার করছি ।

কিছু জাভাস্ক্রিপ্ট কোড মডিউলাইজ করার জন্য বিকল্পগুলির বিভিন্ন উপায়ে উল্লেখ করা উচিত:

  • এএমডি: এএমডি ব্যবহার করে defineযেমন প্রয়োজনীয়গুলিও।
  • নোড: নোড.জেএস ব্যবহার করে require
  • গ্লোবালস: একটি বৈশ্বিক পরিবর্তনশীল (উইন্ডো.জেউকিউরির মতো) উন্মোচন করতে জাভাস্ক্রিপ্ট মডিউল প্যাটার্ন ব্যবহার করে।
  • es6: আসন্ন EcmaScript6 মডিউল বৈশিষ্ট্যটি ব্যবহার করে।

আমার ক্ষেত্রে আমি একটি নোড.জেএস মডিউল প্রবাহ লিখেছি কিন্তু আমি একটি ডিস্ট / ড্লোফ্লো.জেএস ফাইল তৈরি করতে ব্রাউসরিফাই ব্যবহার করছি যা বিশ্বব্যাপী প্রবাহের রফতানি করে : তাই আমি গ্লোবালগুলি নির্বাচন করেছি

অন্যান্য আপডেট

উইন্ডো গ্লোবাল অবজেক্ট হিসাবে আমি যে কমান্ডটি ব্রাউজফ্রাইয়ের ফ্লাওয়ার ব্যবহার করতাম

browserify -s dflow -e index.js -o dist/dflow.js

ব্রাউজারের অভ্যন্তরেও প্রয়োজনীয় ব্যবহার প্রয়োজন বলে আমি এটিকে পরিবর্তন করেছি , তাই এখন আমি ব্যবহার করছি

browserify -r ./index.js:dflow -o dist/dflow.js

তাই আমি পরিবর্তিত bower.moduleType করার নোড আমার মধ্যে bower.json ফাইল।

মূল অনুপ্রেরণাটি ছিল যে যদি আমার মডিউলের নামের কোনও ড্যাশ থাকে, উদাহরণস্বরূপ আমার প্রকল্পের ফ্লো-ভিউ , আমার ফ্লোভিউতে বিশ্বব্যাপী নাম উটলাইজ করা দরকার

এই নতুন পদ্ধতির আরও দুটি সুবিধা রয়েছে:

  1. নোড এবং ব্রাউজার ইন্টারফেস একই। ক্লায়েন্ট সাইড এবং সার্ভার উভয় পক্ষের প্রয়োজন ব্যবহার করে, আমাকে কোড উদাহরণগুলি একবারই লিখতে দিন এবং উভয় প্রসঙ্গে সহজেই এগুলি পুনরায় ব্যবহার করতে দিন।
  2. আমি এনএমপি স্ক্রিপ্টগুলি ব্যবহার করি এবং তাই আমি ${npm_package_name}ভেরিয়েবলের সুবিধা নিতে পারি এবং ব্রাউজ করার জন্য ব্যবহার করা স্ক্রিপ্টটি একবার লিখতে পারি।

এটি অন্য একটি বিষয়, তবে, এটি পরবর্তী উপকারের জন্য কীভাবে কার্যকর তা বিবেচনা করার জন্য আপনি সত্যই মূল্যবান: npm.scripts.browserifyআমার প্যাকেজটিতে আমি যে বৈশিষ্ট্যটি ব্যবহার করি তা ভাগ করে নিতে দিন j

"browserify": "browserify -r ./index.js:${npm_package_name} -o dist/${npm_package_name}.js"


1
আপনি প্রকৃত পক্ষে সংজ্ঞায়নের অভ্যন্তরটি ব্যবহার করতে পারেন: define(function(require, exports, module) { "use strict"; module.exports = { Collection: require("./collection"), View: require('./view') }; });
ডোরন সেগাল

7

কেবলমাত্র রেফারেন্সের জন্য, এটি মডিউলটির প্রকারগুলি সম্পর্কে নির্দিষ্টভাবে নির্দিষ্ট করে:

mainজাভাস্ক্রিপ্ট ফাইলে সংজ্ঞায়িত মডিউলের ধরণ । নিম্নলিখিত স্ট্রিংগুলির একটি বা একটি অ্যারে হতে পারে:

  • globals: জাভাস্ক্রিপ্ট মডিউল যা গ্লোবাল নেমস্পেসে যুক্ত করে window.namespaceবা this.namespaceসিনট্যাক্স যুক্ত করে
  • amd: এএমডির মত দিয়ে জাভাস্ক্রিপ্ট মডিউল সামঞ্জস্যপূর্ণ RequireJS ব্যবহার define()সিনট্যাক্স
  • node: জাভাস্ক্রিপ্ট মডিউলটি নোড এবং কমনএক্সের সাথে module.exportsসিনট্যাক্স ব্যবহার করে সামঞ্জস্যপূর্ণ
  • es6: জাভা স্ক্রিপ্ট মডিউল ECMAScript 6 মডিউলগুলির সাথে সামঞ্জস্যপূর্ণ , ব্যবহার exportএবং importসিনট্যাক্স
  • yui: জাভা স্ক্রিপ্ট মডিউলটি YUI মডিউলগুলির সাথে সামঞ্জস্য করে YUI.add()সিনট্যাক্স ব্যবহার করে

প্রাসঙ্গিক লিঙ্ক: https://github.com/bower/spec/blob/master/json.md# মডুলটাইপ

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