ওয়েবপ্যাকের হট মডিউল প্রতিস্থাপনটি আসলে কী?


245

আমি ওয়েবপ্যাকে হট মডিউল প্রতিস্থাপন সম্পর্কে কয়েকটি পৃষ্ঠা পড়েছি।
এমনকি এর নমুনা অ্যাপ্লিকেশন যে এটি ব্যবহার করে

আমি এগুলি সব পড়েছি এবং এখনও ধারণাটি পাই না।

আমি এটি দিয়ে কি করতে পারি?

  1. এটি কি কেবল উন্নয়নে নয়, উত্পাদনে ব্যবহার করার কথা?
  2. এটি কি লাইভরেলোডের মতো তবে আপনার নিজেরাই এটি পরিচালনা করতে হবে?
  3. ওয়েবপ্যাকডেভ সার্ভার কোনও উপায়ে LiveReload এর সাথে সংহত হয়েছে?

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


: Webpack সঙ্গে HMR প্রায় এই হিসাবে ভাল হিসাবে medium.com/@the1mills/...
আলেকজান্ডার মিলস

উত্তর:


408

প্রথমে আমি লক্ষ করতে চাই যে হট মডিউল রিপ্লেসমেন্ট (এইচএমআর) এখনও পরীক্ষামূলক বৈশিষ্ট্য।

এইচএমআর একটি চলমান অ্যাপ্লিকেশন (এবং মডিউল যুক্ত / অপসারণ) মধ্যে মডিউল বিনিময় করার একটি উপায়। আপনি মূলত কোনও পূর্ণ পৃষ্ঠা পুনরায় লোড ছাড়াই পরিবর্তিত মডিউলগুলি আপডেট করতে পারেন।

নথিপত্র

পূর্বশর্ত:

এটি এইচএমআরের পক্ষে তেমন কিছু নয়, তবে এখানে লিঙ্কগুলি রয়েছে:

আমি এই উত্তরগুলি ডকুমেন্টেশনে যুক্ত করব।

এটা কিভাবে কাজ করে?

অ্যাপের ভিউ থেকে

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

সংকলক (ওয়েবপ্যাক) ভিউ থেকে

সাধারণ সম্পদ ছাড়াও, এই সংস্করণে পূর্ববর্তী সংস্করণ থেকে আপডেট করার অনুমতি দেওয়ার জন্য সংকলকটিকে "আপডেট" প্রেরণ করা প্রয়োজন। "আপডেট" এর দুটি অংশ রয়েছে:

  1. আপডেট ম্যানিফেস্ট (জেসন)
  2. এক বা একাধিক আপডেট অংশ (জেএস)

ম্যানিফেস্টে নতুন সংকলন হ্যাশ এবং সমস্ত আপডেট খণ্ডের একটি তালিকা রয়েছে (2)।

আপডেট অংশগুলিতে এই অংশের সমস্ত আপডেট হওয়া মডিউলগুলির কোড রয়েছে (বা একটি মডিউল সরানো থাকলে একটি পতাকা)।

সংকলক অতিরিক্তভাবে নিশ্চিত করে যে মডিউল এবং খণ্ড আইডিগুলি এই বিল্ডগুলির মধ্যে সামঞ্জস্যপূর্ণ। এটি বিল্ডগুলির মধ্যে সংরক্ষণের জন্য একটি "রেকর্ডস" জেসন ফাইল ব্যবহার করে (বা এটি তাদের স্মৃতিতে সঞ্চয় করে)।

মডিউল ভিউ থেকে

এইচএমআর একটি অপ্ট-ইন বৈশিষ্ট্য, সুতরাং এটি কেবলমাত্র এইচএমআর কোডযুক্ত মডিউলগুলিকেই প্রভাবিত করে। ডকুমেন্টেশনগুলি মডিউলগুলিতে উপলব্ধ এমন এপিআই বর্ণনা করে। সাধারণভাবে, মডিউল বিকাশকারী হ্যান্ডলারগুলি লিখেন যা এই মডিউলের একটি নির্ভরতা আপডেট করা হলে ডাকা হয়। এই মডিউলটি আপডেট হওয়ার পরে তারা একটি হ্যান্ডলারও লিখতে পারে।

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

এইচএমআর রানটাইম ভিউ থেকে (প্রযুক্তিগত)

মডিউল সিস্টেম রানটাইমের জন্য মডিউল parentsএবং ট্র্যাক করার জন্য অতিরিক্ত কোড নির্গত হয় children

পরিচালনার পক্ষে, রানটাইম দুটি পদ্ধতি সমর্থন করে: checkএবং apply

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

প্রস্তুত অবস্থায় প্রতিটি নতুন অংশের জন্য অনুরোধের জন্য আপডেট অংশটিও ডাউনলোড করা হয়।

applyপদ্ধতি পতাকা সব অবৈধ হিসাবে মডিউল আপডেট করা হয়েছে। প্রতিটি অবৈধ মডিউলের জন্য মডিউলে আপডেট হ্যান্ডলার বা প্রতিটি পিতামাতার আপডেট হ্যান্ডলার হওয়া দরকার। অন্যথায় অবৈধ বুদবুদ আপ এবং সমস্ত পিতামাতাকেও অবৈধ হিসাবে চিহ্নিত করে। আর কোনও "বুদ্বুদ আপ" না হওয়া পর্যন্ত এই প্রক্রিয়াটি অব্যাহত থাকে। এটি কোনও এন্ট্রি পয়েন্ট পর্যন্ত বুদবুদ হলে, প্রক্রিয়া ব্যর্থ হয়।

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

উত্পন্ন আপডেট খণ্ড

আমি এটি দিয়ে কি করতে পারি?

আপনি এটি লাইভরেলোড প্রতিস্থাপন হিসাবে বিকাশে ব্যবহার করতে পারেন। আসলে ওয়েবপ্যাক-ডেভ-সার্ভার একটি হট মোড সমর্থন করে যা পুরো পৃষ্ঠাটি পুনরায় লোড করার চেষ্টা করার আগে এইচএমআর দিয়ে আপডেট করার চেষ্টা করে। আপনাকে কেবল webpack/hot/dev-serverএন্ট্রি পয়েন্ট যুক্ত করতে হবে এবং এর সাথে ডেভ-সার্ভারটি কল করতে হবে --hot

আপনি এটি আপডেট পদ্ধতি হিসাবে উত্পাদনতে ব্যবহার করতে পারেন। এখানে আপনাকে নিজের ব্যবস্থাপনার কোড লিখতে হবে যা আপনার অ্যাপের সাথে এইচএমআরকে সংহত করে।

কিছু লোডার ইতোমধ্যে গরম-আপডেটযোগ্য মডিউলগুলি তৈরি করে। উদাহরণস্বরূপ style-loaderস্টাইলশিট বিনিময় করতে পারে। আপনার বিশেষ কিছু করার দরকার নেই।

ধরুন আমি পৃষ্ঠাটি পুনরায় লোড না করে এবং লাইভরেলোডের মতো প্লাগইন ব্যবহার না করেই যখন আমার সিএসএস (একটি স্টাইলশিট) এবং জেএস মডিউলগুলি ডিস্কে সংরক্ষণ করি তখন আপডেট করতে চাই। এটি কি হট মডিউল প্রতিস্থাপনটি আমাকে সহায়তা করতে পারে?

হ্যাঁ

আমার কোন ধরণের কাজ করা দরকার এবং এইচএমআর ইতিমধ্যে কী সরবরাহ করে?

এখানে একটি সামান্য উদাহরণ: https://webpack.js.org/guides/hot-module-replacement/

কোনও মডিউল কেবলমাত্র যদি আপনি এটি "গ্রহণ" করেন তবে আপডেট করা যায়। সুতরাং আপনার module.hot.acceptপিতামাতার বা পিতামাতার মডিউলে আপনার প্রয়োজন ... উদাহরণস্বরূপ একটি রাউটার একটি ভাল জায়গা বা একটি মতামত।

আপনি যদি কেবল ওয়েবপ্যাক-ডেভ-সার্ভার দিয়ে এটি ব্যবহার করতে চান তবে কেবল webpack/hot/dev-serverএন্ট্রি পয়েন্ট হিসাবে যুক্ত করুন । অন্যথায় আপনার কিছু এইচএমআর পরিচালনা কোড দরকার যা কল করে checkএবং apply

মতামত: কী এত সুন্দর করে তোলে?

  • এটি LiveReload কিন্তু প্রতিটি মডিউল ধরণের জন্য।
  • আপনি উত্পাদন এটি ব্যবহার করতে পারেন।
  • আপডেটগুলি আপনার কোড বিভাজনকে সম্মান করে এবং আপনার অ্যাপ্লিকেশনটির ব্যবহৃত অংশগুলির জন্য আপডেটগুলি ডাউনলোড করে।
  • আপনি আপনার অ্যাপ্লিকেশনটির একটি অংশের জন্য এটি ব্যবহার করতে পারেন এবং এটি অন্যান্য মডিউলগুলিকে প্রভাবিত করে না
  • যদি এইচএমআর অক্ষম থাকে, সমস্ত এইচএমআর কোডটি কম্পাইলার দ্বারা সরানো হয় (এতে মোড়ানো if(module.hot))।

আদেশ সহকারে

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

145
একটি উত্তর একটি নরক।
ড্যান আব্রামভ

13
ব্যাখ্যার জন্য আবারও ধন্যবাদ, আমি একটি ভিডিও তৈরি করেছি যাতে একটি প্রতিক্রিয়া অ্যাপ্লিকেশন লাইভ-এডিট করার জন্য এইচএমআরের শক্তি প্রদর্শন করা হয়।
ড্যান আব্রামভ

1
বেশ দুর্দান্ত ... আমি একটি প্রতিক্রিয়া লোডার তৈরি করার কথা ভেবেছিলাম যা উপাদানগুলি প্রতিক্রিয়া জানাতে এইচএমআর এবং অ্যাসিঙ্ক লোড যুক্ত করে।
টোবিয়াস কে।

4
আমি এই উত্তরটি ডকুমেন্টেশনে অনুলিপি করেছি: webpack.github.io/docs/hot-module-replacement-with-webpack.html
টোবিয়াস কে।

2
আপনি যখন requireএইচএমআর আপডেট হ্যান্ডলারটি একটি ট্রাই-ক্যাচ ব্লকে আবদ্ধ করেন, আপনি আপডেট হওয়া মডিউলগুলিতে ত্রুটিগুলি ধরতে পারেন ।
টোবিয়াস কে।

10

গৃহীত উত্তর যাইহোক যাইহোক সবকিছু ঠিক ব্যাখ্যা করে নীচের বিবরণটি এইচএমআর কী তা দ্রুত বুঝতে সাহায্য করে।

হট মডিউল প্রতিস্থাপন জাভাস্ক্রিপ্ট বিকাশের অন্যতম নতুন কৌশল যা বিকাশকারীদের দৃষ্টি আকর্ষণ করে। এটি রানটাইম পরিবর্তনের সাথে মডিউলগুলি প্রতিস্থাপন করে পৃষ্ঠা রিফ্রেশের সংখ্যা হ্রাস করে উন্নয়নের সহায়তা করে।

এইচএমআর সম্পর্কে অনুসন্ধান করার সময় আমি একটি নিবন্ধ পেয়েছি যা ইন্টারনেট সম্পর্কে ধারণাটি ব্যাখ্যা করে আপনি এটি এখান থেকে পেতে পারেন এবং একটি জিআইএফ চিত্র যুক্ত করেছেন যা কোনও ব্যাখ্যা ছাড়াই ধারণাটি ব্যাখ্যা করে।

এখানে এটি কাজ করে আছে - লক্ষ্য করুন যে টাইমারটি 0 পুনরায় লোড হওয়ার পরে যেমন পুনরায় সেট হয় না এবং সিএসএস অটো রিফ্রেশও পরিবর্তন করে। হট মডিউল রিপ্লেসমেন্ট জিআইএফ

ওয়েবপ্যাক এইচএমআর পেতে সহায়তা করে। আপনি এখানে ডক্স খুঁজে পেতে পারেন

এটি নিম্নলিখিত অর্জনে সহায়তা করে

  • সম্পূর্ণ পুনঃলোডের সময় হারিয়ে যাওয়া অ্যাপ্লিকেশনের স্থিতি পুনরুদ্ধার করুন।

  • যা পরিবর্তন হয়েছে কেবল তা আপডেট করে মূল্যবান বিকাশের সময় সাশ্রয় করুন।

  • দ্রুত টুইঙ্ক স্টাইলিং - ব্রাউজারের ডিবাগারে স্টাইল পরিবর্তন করার সাথে প্রায় তুলনীয়।

এইচএমআর অর্জনের জন্য ওয়েবপ্যাক গাইড এখানে

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