ব্লকলির বিল্ড স্ক্রিপ্ট

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

এই প্রক্রিয়ায়, সাম্প্রতিক ECMAScript বৈশিষ্ট্যগুলি ব্যবহার করে কোডগুলি - যেগুলি সমস্ত ব্রাউজারগুলির সাথে সামঞ্জস্যপূর্ণ নাও হতে পারে - ES6 এ স্থানান্তরিত হয়, যা সাধারণত সর্বাধিক ব্যবহৃত ব্রাউজারগুলির সাথে সামঞ্জস্যপূর্ণ৷ সুতরাং, এটি গুরুত্বপূর্ণ যে আপনি আপনার শেষ ব্যবহারকারীদের কাছে শুধুমাত্র ছোট কোডটি পরিবেশন করুন৷

গুগল/ব্লকলি রিপোজিটরিতে শুধুমাত্র সোর্স কোড থাকে। এটিতে পূর্বে বিল্ড পণ্যগুলিও ছিল, কিন্তু 2019 সাল থেকে মিনিফাইড বান্ডেলগুলি blockly NPM প্যাকেজ হিসাবে প্রকাশিত হয়েছে এবং 2022 সাল থেকে প্রতিটি গিটহাব রিলিজে একটি .tgz ফাইল হিসাবে সংযুক্ত করা হয়েছে, তাই আপনি হ্যাকিং না করলে ব্লকলি তৈরি করার দরকার নেই। ব্লকলি নিজেই—বিশেষ করে core , blocks , generators বা msg ডিরেক্টরির ফাইলগুলিতে।

Gulp টাস্ক চালানোর জন্য npm স্ক্রিপ্ট ব্যবহার করে Blockly নির্মাণ, পরীক্ষা এবং প্রকাশের প্রক্রিয়া স্বয়ংক্রিয়। এই পৃষ্ঠাটি নীতির স্ক্রিপ্ট এবং প্রত্যেকটি কী করে তা নথিভুক্ত করে।

কম্প্রেসড এবং আনকম্প্রেসড মোড

TypeScript কম্পাইলার দ্বারা উত্পন্ন পৃথক .js ফাইলগুলি থেকে সরাসরি ব্লকভাবে লোড করাকে "আনকম্প্রেসড মোড" হিসাবে উল্লেখ করা হয়। কারণ এটি বেশ কিছু ধীরগতির বিল্ড ধাপ এড়ায়, এটি একটি দ্রুত সম্পাদনা-সংকলন-চালিত চক্রকে সহজতর করে; এটি ডিবাগিংকেও সহজ করে কারণ জাভাস্ক্রিপ্ট কোডটি কার্যকর করা হচ্ছে মূল টাইপস্ক্রিপ্ট উত্সগুলির মতোই প্রায় পঠনযোগ্য, সোর্সম্যাপের উপর নির্ভর করার প্রয়োজনীয়তা দূর করে৷

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

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

দ্রুত শুরু

  • আপনি যদি স্থানীয় পরিবর্তন করে থাকেন এবং নিশ্চিত করতে চান যে তারা বিল্ড বা কোনো পরীক্ষা ভঙ্গ করেনি, চালান

    npm test
    

    ব্লকলি তৈরি করতে এবং এর টেস্ট স্যুট চালাতে।

  • আপনি যদি ব্রাউজারে স্থানীয় পরিবর্তনগুলি পরীক্ষা করতে চান তবে চালান

    npm start
    

    এটি ব্লকলি কম্পাইল করে এবং ব্লকলি খেলার মাঠের দিকে নির্দেশ করে একটি ওয়েব ব্রাউজার খোলে যা ব্লকলি আনকম্প্রেসড মোডে চলছে।

    core/ , blocks/ এবং generators/ -এ যেকোন ফাইল যা পরিবর্তিত হয় তা স্বয়ংক্রিয়ভাবে পুনরায় সংকলিত হয়; পরিবর্তনগুলি দেখতে ব্রাউজার ট্যাবটি পুনরায় লোড করুন।

  • আপনার ব্লকলি-এর স্থানীয়ভাবে পরিবর্তিত সংস্করণ তৈরি করতে এবং এটিকে সংকুচিত মোডে পরীক্ষা করতে, অন্য এনপিএম প্যাকেজের নির্ভরতা হিসাবে, চালান

    npm run package
    

    ব্লকলি প্যাকেজ তৈরি করতে, তারপর

    cd dist && npm link
    

    কম্পাইল করা ফাইলগুলি কোথায় পাওয়া যাবে তা npm-কে জানাতে, এবং তারপর চালানোর আগে আপনার প্রজেক্টের ডিরেক্টরিতে cd

    npm link blockly
    

    আপনার প্যাকেজটি প্রকাশিত blockly প্যাকেজের জায়গায় ব্লকলির সদ্য-সংকলিত সংস্করণ ব্যবহার করতে।

বিস্তারিত স্ক্রিপ্ট রেফারেন্স

এই বিভাগটি Blockly-এর package.json ফাইলের নীতির scripts তারা কী করে তার ব্যাখ্যা সহ তালিকাভুক্ত করে।

এই স্ক্রিপ্ট দুটি জায়গায় ফাইল তৈরি করে:

  • build/ সাবডিরেক্টরিতে থাকা ফাইলগুলি হল মধ্যস্থতাকারী ফাইল যা স্থানীয় পরীক্ষার জন্য ব্যবহৃত হয় বা বিল্ড পাইপলাইনের পরবর্তী অংশগুলি দ্বারা গৃহীত হয়।
  • dist/ subdirectory-এ ফাইলগুলি প্রকাশিত npm প্যাকেজের বিষয়বস্তু তৈরি করে।

ব্লকলি গিট রিপোজিটরিতে কোনও ডিরেক্টরিই ট্র্যাক করা হয় না।

clean

npm run clean build/ এবং dist/ ডিরেক্টরি মুছে দিয়ে আগের যেকোনো বিল্ডকে পরিষ্কার করে। আর্কেন বিল্ড ব্যর্থতাগুলি ঠিক করার জন্য দরকারী, বিশেষত একটি উত্স ফাইলের নাম পরিবর্তনের কারণে সৃষ্ট।

messages

npm run messages msg/json/ এ বার্তা ফাইলগুলিকে msg/messages.js এ করা কোনও পরিবর্তন সহ আপডেট করে এবং প্রতিবার ফাইলটি পরিবর্তন করার পরে চালানো উচিত।

langfiles

npm run langfiles msg/json এ বার্তা ফাইল থেকে build/msg/ এ কম্পাইল করা ভাষা ফাইল তৈরি করে।

tsc

npm run tsc core/ , blocks/ এবং generators/ ডিরেক্টরির বিষয়বস্তুতে টাইপস্ক্রিপ্ট কম্পাইলার চালায় এবং build/src/ তে পৃথক .js ফাইল আউটপুট করে।

minify

npm run minify চালায় closure-make-deps এবং closure-calculate-chunks কিভাবে কম্পাইল করা .js ফাইলগুলিকে খণ্ডে (মিনিফাইড বান্ডেল) ভাগ করতে হয় তা নির্ধারণ করে, তারপরে এটি নিম্নরূপ খণ্ডগুলি তৈরি করতে closure-compiler চালায়:

  • build/src/core/ become dist/blockly_compressed.js এর বিষয়বস্তু।
  • build/src/blocks/ become dist/blocs_compressed.js এর বিষয়বস্তু।
  • build/src/generators/javascript/ (প্লাস build/src/generators/javascript.js ) এর বিষয়বস্তু dist/javascript_compressed.js হয়ে যায়।
  • এবং একইভাবে dart , lua , php এবং python জন্য।

তৈরি করা চুকগুলি ইউনিভার্সাল মডিউল সংজ্ঞার সাথে সামঞ্জস্যতা নিশ্চিত করতে একটি মোড়ক ব্যবহার করে তাই প্যাকেজে অন্তর্ভুক্ত করার আগে কোনও অতিরিক্ত প্রক্রিয়াকরণের প্রয়োজন নেই৷

build

npm run build minify এবং langfiles কাজ চালায়। ব্লকলি খেলার মাঠ লোড করার জন্য যা যা প্রয়োজন তা সংকুচিত বা আনকম্প্রেস মোডে করা উচিত।

package

npm run package clean এবং build কাজ চালায় এবং তারপর:

  • একটি UMD র‍্যাপার ফাইলগুলিকে build/msg/ এ প্রয়োগ করে, র‍্যাপ করা সংস্করণগুলিকে dist/msg/ এ রেখে।
  • প্রযোজ্য ক্ষেত্রে UMD র‌্যাপার সহ dist/ এ বিভিন্ন অতিরিক্ত সমর্থন ফাইল যোগ করে।

publish

npm run publish ব্লকলি টিম blockly এনপিএম প্যাকেজ প্রকাশ করতে ব্যবহার করে। এটি Google-অভ্যন্তরীণ অবকাঠামোর উপর নির্ভর করে তাই বহিরাগত বিকাশকারীদের জন্য উপযোগী নয়।

lint

npm run lint ESLint চালায়, সমস্যা খুঁজে পেতে ব্লকলি সোর্স কোডের স্ট্যাটিক বিশ্লেষণ করে।

test

npm test (বা npm run test ) package টাস্ক চালায় এবং তারপর বিভিন্ন স্বয়ংক্রিয় পরীক্ষা চালায় (ESLint চালানো সহ)। ব্লকলি রিপোজিটরির বিরুদ্ধে পুল অনুরোধ হিসাবে জমা দেওয়া যেকোন কোডে এটি চালানো এবং পাস করা উচিত।