Hooks
ডিফল্টভাবে, Volta Node, npm, এবং Yarn পাবলিক সোর্স এবং রেজিস্ট্রি (https://nodejs.org, https://yarnpkg.com, https://www.npmjs.com) থেকে ফেচ করে। তবে, আপনার পরিবেশের উপর নির্ভর করে, এটি প্রয়োজন হতে পারে Volta কে একটি ভিন্ন সোর্স (যেমন, অভ্যন্তরীণ টুলসের জন্য npm Enterprise) থেকে ডাউনলোড করতে বলতে। এর জন্য, Volta ডাউনলোড প্রক্রিয়ায় hooks প্রদান করে।
hooks নির্দিষ্ট করার স্থান
hooks সর্বদা hooks.json নামক একটি ফাইলে সেট করা হয়। এই ফাইল দুটি স্থানের একটিতে থাকতে পারে, আপনি যে স্কোপ চান তার উপর নির্ভর করে:
- Volta ডিরেক্টরি (
~/.volta/hooks.jsonLinux/MacOS এ,%LOCALAPPDATA%\Volta\hooks.jsonWindows এ) এ নির্দিষ্ট hooks সম্পূর্ণ সিস্টেম জুড়ে প্রযোজ্য হবে। - একটি প্রজেক্টের
.voltaসাবডিরেক্টরি (<PROJECT ROOT>/.volta/hooks.json) এ নির্দিষ্ট hooks শুধুমাত্র সেই প্রজেক্টের মধ্যে প্রযোজ্য হবে।<PROJECT ROOT>এখানে সেই প্রজেক্টেরpackage.jsonএর অবস্থান হিসেবে সংজ্ঞায়িত।
hooks ফাইল ফরম্যাট
hooks.json এর বিষয়বস্তু একটি অবজেক্ট হতে হবে, প্রতিটি টুল ধরনের জন্য ঐচ্ছিক কী সহ (বর্তমানে node, npm, এবং yarn)। প্রতিটি টুলে 3টি অ্যাকশন রয়েছে যার প্রতিটিতে একটি hook প্রয়োগ করা যেতে পারে:
indexসেই URL কে নির্দেশ করে যা সেই টুলের জন্য ডাউনলোড করতে উপলব্ধ ভার্সনগুলির তালিকা নির্ধারণ করতে ব্যবহৃত হয়। সেই URL অ্যাক্সেস করার সময় প্রতিক্রিয়া নির্বাচিত টুলের পাবলিক ইনডেক্সের ফরম্যাটের সাথে মিলতে হবে।latestসেই URL কে নির্দেশ করে যা সেই টুলের সর্বশেষ ভার্সন নির্ধারণ করতে ব্যবহৃত হয়।nodeএর জন্য, প্রতিক্রিয়াindexএর মতো একই ফরম্যাটে হতে হবে, নিশ্চিত করে যে সর্বশেষ ভার্সন তালিকার প্রথম উপাদান।yarnএর জন্য, প্রতিক্রিয়া কাঁচা ভার্সন নম্বর স্ট্রিং হতে হবে এবং আর কিছু নয়।distroসেই URL কে নির্দেশ করে যা টুল বাইনারি ডাউনলোড করতে ব্যবহৃত হয়।
শেষে, প্রতিটি অ্যাকশনে 3টি সম্ভাব্য hook রয়েছে (নীচে বর্ণিত) যেগুলি ব্যবহার করা যেতে পারে (যেকোনো সময়ে প্রতিটি অ্যাকশনের জন্য শুধুমাত্র একটি নির্দিষ্ট করা যেতে পারে)। একটি উদাহরণ hooks.json ফাইল হলো:
{
"node": {
"index": {
"bin": "/usr/local/node-lookup"
},
"latest": {
"prefix": "http://example.com/node/"
},
"distro": {
"template": "http://example.com/{{os}}/{{arch}}/node-{{version}}.tar.gz"
}
},
"npm": {
"index": {
"prefix": "http://example.com/npm/"
},
"latest": {
"bin": "~/npm-latest"
},
"distro": {
"template": "http://example.com/npm/npm-{{version}}.tgz"
}
},
"yarn": {
"index": {
"template": "http://example.com/yarn/{{os}}/{{arch}}/yarn-{{version}}.tgz"
},
"latest": {
"prefix": "http://example.com/yarnpkg/"
},
"distro": {
"bin": "~/yarn-distro"
}
}
}Hook ধরন
prefix Hooks
prefix hook একটি সহজ URL প্রতিস্থাপন। URL নির্দিষ্ট prefix ব্যবহার করে তৈরি হবে, সেই অ্যাকশনের জন্য পাবলিক ফাইল নাম অনুসরণ করে। উদাহরণস্বরূপ, উপরের hooks.json ব্যবহার করে, আমাদের সর্বশেষ yarn ভার্সন নির্ধারণের জন্য একটি prefix hook নির্দিষ্ট করা আছে। ডিফল্টভাবে, Volta সর্বশেষ ভার্সন https://yarnpkg.com/latest-version এ একটি অনুরোধ করে ফেচ করবে। hook ব্যবহার করে, Volta পরিবর্তে http://example.com/yarnpkg/latest-version অ্যাক্সেস করার চেষ্টা করবে, নির্দিষ্ট prefix http://example.com/yarnpkg/ এ latest-version যোগ করে।
template Hooks
template hook আপনাকে একটি URL এর টেমপ্লেট নির্দিষ্ট করতে দেয়, wildcards সহ যেগুলি প্রতিস্থাপিত হবে। উপলব্ধ wildcards হলো:
darwin,linux, বাwinদ্বারা প্রতিস্থাপিত হবে, অপারেটিং সিস্টেমের উপর নির্ভর করে।x86বাx64দ্বারা প্রতিস্থাপিত হবে, সিস্টেমের আর্কিটেকচারের উপর নির্ভর করে।(শুধুমাত্রdistroঅ্যাকশনের জন্য উপলব্ধ) নির্দিষ্ট টুলের ভার্সন দ্বারা প্রতিস্থাপিত হবে যা Volta ডাউনলোড করার চেষ্টা করছে।ফাইল নাম দ্বারা প্রতিস্থাপিত হবে যা Volta পাবলিক রেজিস্ট্রি থেকে ডাউনলোড করবে।(শুধুমাত্রdistroঅ্যাকশনের জন্য উপলব্ধ) ফাইল এক্সটেনশন দ্বারা প্রতিস্থাপিত হবে যা Volta ডাউনলোড করতে প্রত্যাশা করে।
TIP
filename এবং ext প্রতিস্থাপন শুধুমাত্র Volta 0.8.4 বা পরবর্তীতে উপলব্ধ
উদাহরণ থেকে node.distro hook ব্যবহার করে, 64-bit Linux সিস্টেমে node@10.15.3 ফেচ করার সময়, Volta টারবল ডাউনলোড করার চেষ্টা করবে: http://example.com/linux/x64/node-10.15.3.tar.gz
bin Hooks
bin hook একটি সর্বউদ্দেশ্য hook যা URL নির্ধারণ করতে একটি বাহ্যিক স্ক্রিপ্টে কল করবে। মান একটি এক্সিকিউটেবল স্ক্রিপ্টের পাথ যা কল করা হবে, এবং URL সেই স্ক্রিপ্টের stdout থেকে পড়া হবে। স্ক্রিপ্টের stderr ব্যবহারকারীকে দেখানো হবে, তাই এটি প্রগ্রেস বার বা অপেক্ষমান স্পিনার দেখাতে ব্যবহার করা যেতে পারে যদি প্রয়োজন হয়। যদি স্ক্রিপ্টের পাথ আপেক্ষিক হয় তবে এটি hooks.json ফাইলের সাপেক্ষে সমাধান করা হবে যেখানে এটি নির্দিষ্ট করা হয়েছে। এই প্রসঙ্গে, একটি আপেক্ষিক পাথের অর্থ হলো পাথ Linux/MacOS এ ./ বা ../ দিয়ে শুরু হয় এবং Windows এ .\ বা ..\ দিয়ে শুরু হয়। শেষে, distro অ্যাকশন hook এর জন্য, টুলের অনুরোধ করা ভার্সন সেই স্ক্রিপ্টে প্রথম আর্গুমেন্ট হিসেবে পাস করা হবে।
উদাহরণ hooks.json থেকে yarn.distro hook ব্যবহার করে, yarn@1.13.0 ফেচ করার সময়, Volta ~/yarn-distro "1.13.0" কল করবে এবং সেই hook দ্বারা ফেরত দেওয়া URL থেকে টারবল ডাউনলোড করার চেষ্টা করবে।