کدنویسی و انتشار پکیج NPM – از صفر تا صد
NPM یک ابزار مدیریت پکیج برای Node.js است و یک ریپازیتوری مرکزی محسوب میشود که میتوانید ریپوهای خود را روی آن منتشر کرده و ریپازیتوریهای دیگران را از آنجا دانلود کنید. هر ریپویی که روی NPM منتشر میشود، به صورت پیشفرض عمومی است. امکان انتشار ریپوهای خصوصی نیز وجود دارد، اما این کار هزینه دارد. در این مقاله با روش کدنویسی و انتشار پکیج NPM آشنا میشویم.
پیشنیازها
در این مقاله دو پیشنیاز داریم که پس از آماده شدن آنها میتوانیم به کار عملی بپردازیم:
پکیج یا ماژول
تفاوت ظریفی بین پکیجها و ماژولها وجود دارد که در این بخش آن را توضیح میدهیم.
بر اساس مستندات npmjs پکیج یک فایل یا دایرکتوری است که به وسیله فایل package.json توصیف میشود. در واقع پکیج باید دارای package.json باشد تا بتواند در رجیستری NPM منتشر شود.
ماژول یک فایل یا دایرکتوری تحت دایرکتوری node_modules است که میتواند از سوی تابع require بارگذاری شود. ماژول باید یا یک فایل جاوا اسکریپت و یا یک پوشه شامل package.json با فیلد nain و یا یک پوشه با فایل index.js باشد.
بنابراین همه پکیجها، ماژول محسوب میشوند، اما همه ماژولها نمیتوانند پکیج باشند، زیرا هیچ الزامی به گنجاندن فایل package.json در ماژولها وجود ندارد.
چه چیزی منتشر میکنیم؟
از آنجا که نقطه تمرکز ما در این مقاله بر روی انتشار پکیجهای NPM است، یک پروژه ساده به نام Calculator ایجاد میکنیم. این ماشین حساب 4 متد برای جمع، تفریق، ضرب و تقسیم خواهد داشت.
در ادامه روش تبدیل این پروژه به یک پکیج و انتشار آن رh هم به صورت نسخه جاوا اسکریپت و هم تایپ اسکریپت بررسی میکنیم.
نسخه جاوا اسکریپت
چنان که پیشتر اشاره کردیم، هر پکیج به یک فایل package.json نیاز دارد. بنابراین ترمینال یا خط فرمان را باز کرده و با دستور npm init چنین فایلی ایجاد میکنیم. این دستور چند سؤال از ما میپرسد که پاسخ داده و مقدار yes وارد میکنیم:
// make a direcotry mkdir calculator // cd into direcory cd calculator // initialize package.json npm init
بدین ترتیب فایل زیر ایجاد میشود:
فایل package.json
اگر به فیلد main در فایل package.json فوق توجه کنید، میبینید که این فایل اصلی یا آغازین پکیج است. در ادامه فایل index.js را ایجاد میکنیم.
فایل index.js
اکنون پکیج ما آماده است. پیش از انتشار پکیج باید وارد حساب npm خود شویم. این کارها باید در پوشه ریشه پروژه که فایل package.json قرار دارد انجام دهید:
// login into your account npm login // publish your package npm publish
زمانی که آن را منتشر کنید نام و نسخه پکیج را از روی فیلدهای نام و نسخه در فایل package.json میگیرد:
اینک وارد حساب npm خود میشویم تا پکیجمان را ببینیم.
نسخه تایپ اسکریپت
کل فرایند در مورد نسخه تایپ اسکریپت نیز مشابه است، به جز این که کل کد در تایپ اسکریپت نوشته شده است و باید آن را از جاوا اسکریپت به تایپ اسکریپت ترجمه کرده و فایل تعریف نوع را در زمان انتشار بگنجانیم.
به این منظور باید پکیجهای وابستگی dev را به صورت ts-node و typescript نصب کنیم تا پروژه از جاوا اسکریپت به تایپ اسکریپت ترجمه شود:
// make a direcotry mkdir calculator // cd into direcory cd calculator // initialize package.json npm init // install dv dependencies npm i ts-node typescript --save-dev
نسخه تایپ اسکریپت فایلها به صورت زیر است:
فایل index.js
فایل package.json
فایل tsconfig.json
پکیج ts-node از فایل tsconfig.json برای ترجمه تایپ اسکریپت به جاوا اسکریپت استفاده میکند و همه فایلها را زیر پوشه dist گردآوری میکند.
// build the project tsc // you can add build script to package.json npm run build // publish npm publish
همواره به خاطر داشته باشید که کد خود را روی Github قرار دهید و این اطلاعات را در فایل package.json قرار دهید تا هر گونه باگ یا مشکل از سوی جامعه اوین سورس متذکر شود.
استفاده از پکیج در پروژههای دیگر Node.js
اکنون دو پکیج داریم که یکی در زبان جاوا اسکریپت و دیگری در زبان تایپ اسکریپت است. در این بخش هر دو آنها را تست میکنیم:
// install npm i bachinacalculator –save
پکیج را ایمپورت کرده و مورد استفاده قرار میدهیم:
خروجی به صورت زیر است:
نسخه تایپ اسکریپت را نیز میتوانید به همین روش نصب کرده و مورد استفاده قرار دهید. اما باید آن را در پروژه تایپ اسکریپت ایمپورت کنید.
بهروزرسانی پکیجها و نسخهبندی معناشناختی
اینک متوجه میشویم که فایل readme برای پکیجهای خود نداریم، بنابراین این فایل را اضافه کرده و پکیج را بهروزرسانی میکنیم.
اکنون فایل README.md را اضافه کردهایم و باید نسخه پروژه را پیش از انتشار افزایش دهیم. در نمودار زیر نسخهبندی معناشناختی توضیح داده شده است:
فایل README.md را به پروژه خود اضافه کردهایم و با توجه به این که این یک وصله محسوب میشود عدد patch را در فایل package.json افزایش میدهیم.
به این ترتیب میتوانیم نسخه بهروز شده پکیج را در NPM ببینیم که فایل README.md به آن اضافه شده و جدیدترین نسخه محسوب میشود.
اگر به زبانه version بروید، میتوانید سابقه نسخهها را در آنجا ببینید.
جمعبندی و معرفی بهترین رویهها
- برای انتشار پکیجها روی NPM به یک حساب روی این رجیستری نیاز دارد. به صورت پیشفرض همه پکیجها عمومی هستند.
- پکیجها و ماژولها متفاوت هستند. همه ماژولها پکیج نیستند، چون باید دارای فایل package.json باشند.
- میتوانیم پکیجها را هم در زبان جاوا اسکریپت و هم تایپ اسکریپت منتشر کنیم.
- در زبان تایپ اسکریپت باید تعاریف نوع را همراه با سورس کد داشته باشیم.
- فایل package.json همه اطلاعات پکیج شامل نام، نسخه، وابستگیها و غیره را در خود دارد.
- همواره از رویکرد نسخهبندی معناشناختی برای تعیین نسخه پکیج پیروی کنید.
- همواره ریپوی گیتهاب مربوط به کد منبع پکیج را تعیین کرده و issue-ها را باز کنید.
سخن پایانی
ایجاد کد ماژولار به طوری که بتوان از بخشهایی از کد به صورت مجدد استفاده کرد، همواره رویه خوبی تلقی میشود، چون باعث میشود از اختراع مجدد چرخ دوری کنیم. پکیجهای NPM این ماژولار بودن را افزایش میدهند و قابلیت استفاده مجدد از کد را ارتقا میبخشند.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای JavaScript (جاوا اسکریپت)
- مجموعه آموزشهای برنامهنویسی
- آموزش JavaScript ES6 (جاوا اسکریپت)
- ساخت کتابخانه React و انتشار آن در NPM — راهنمای گام به گام
- آموزش Node.js: معرفی NPM — بخش سوم
==