آموزش ساخت و منتشر کردن بسته‌های npm یا npm packages - قسمت 1 - توسعه و تست package برای npm



visibility  
mode_comment   ۰

آموزش ساخت و منتشر کردن بسته‌های npm یا npm packages - قسمت 1در این مطلب میخوایم نحوه ساخت و منتشر کردن بسته‌های npm رو از 0 تا 100 بهتون آموزش بدیم تا بتونین از این به بعد، کدهای خودتون رو بصورت package در اختیار دیگران قرار بدین.

package و module چه هستند؟

npm تعاریف ساده‌ای برای package و module داره و به راحتی میشه اونا رو فهمید. حالا میخوام بیشتر در مورد این موارد براتون توضیح بدم و فایلهای پیش‌فرض و پرکاربرد رو بهتون معرفی کنم.

  • یک package یا بسته در واقع یک دایرکتوری شامل برنامه‌ای هست که توسط package.json توضیح داده میشه.
  • یک ماژول یا module یک دایرکتوری با فایل package.json هست که شامل ویژگی main میشه که فایل اصلی مربوط به پروژه رو مشخص میکنه که میتونیم با استفاده از اون، از این ماژول در برنامه‌های Nodejs دیگر استفاده کنیم.
  • دایرکتوری node_modules جایی هست که Nodejs به دنبال ماژول‌ها میگرده.

در کل بیشتر بسته‌های npm یک ماژول هستند در حالی که هیچ ضرورتی برای اینکه حتما module باشند، وجود ندارد.

فرض میشه که Nodejs بر روی سیستم شما نصب هست. در برنامه‌های Node میتونیم بصورت زیر از ماژول‌ها استفاده کنیم:

همونطور که میبینید در کد بالا ماژول sampleModule رو وارد کرده و اون رو در متغیر sampleModule قرار دادیم و میتونیم از این متغیر استفاده کنیم.

راه اندازی و ساخت اولین npm packages

من در این مطلب برای سادگی و فهم بیشتر یک ماژول که فقط هدف اون حذف کردن space از رشته هست رو به وجود میارم و بعد اون رو با نام spacekiller در npm registry قرار میدم. خب برای اینکار یک دایرکتوری بنام spacekiller در Desktop به وجود میارم و وارد اون میشم و در command line دستور npm init -y رو میزنم، تا بدون سوال پرسیدن فایل package.json رو به وجود بیاره. خلاصه دستورات بصورت زیر هستند:

حالا فایل package.json رو باز میکنم و کدهای زیر رو در اون قرار میدم:

همونطور که میبینید در ویژگی name قبل از نام بسته که همون spacekiller هست، نام کاربری یا username خودم که @mamadoo هست نیز قرار دادم. در npm بسته‌ها با نامشون قرار داده میشن و دو بسته با یک نام نمیتونن در npm قرار بگیرن. پس شما قبل از انتخاب نام برای package خودتون، باید به npm سر بزنید و ببینید که بسته‌ای با نام مورد نظرتون وجود داره یا خیر. اگر وجود داره که باید اسم دیگری رو انتخاب کنید و اگر وجود نداره نیز میتونین از همین نام استفاده کنید.

حالا یک ویژگی بنام scope package وجود داره که میتونین بسته‌ها رو زیر نام کاربری خودتون تعریف کنید و با اینکار میتونین اسم‌های تکراری نیز قرار بدین. یعنی اگر یک پروژه با نام sample وجود داشته باشه، شما نمیتونین یک بسته با نام sample مجددا به وجود بیارید ولی میتونین یک پروژه با نام @username/sample به وجود بیارید.

ابزارهای معروف مانند Angular و Babel نیز از این ویژگی استفاده کردند.

متخصص جاوا اسکریپت
با جاوا اسکریپت جادوگری کنید! آیا می دونید با زبان جاوااسکریپت می تونید، برای فرانت اند و بک اند وبسایت ها برنامه نویسی کنید؟ همینطور اپلیکیشن دسکتاپ و موبایل بسازید؟ اگر دوست داری اینکارها رو انجام بدی و React, ElectronJS, ReactNative, NodeJS,MongoDB و ... رو تو یه دوره یاد بگیری، متخصص جاوااسکریپت سون لرن رو حتما ببین : متخصص جاوا اسکریپت arrow_back

محتویات فایل package.json رو بصورت زیر بروز رسانی میکنم:

میبینید که author و description و keywords رو مقداردهی کردم. با استفاده از keywords کاربران راحتتر میتونن بسته شما رو پیدا کنند. حالا یک فایل بنام index.js در ریشه پروژه به وجود میارم و کدهای زیر رو درون اون قرار میدم:

همونطور که میبینید یک تابع بنام spacekiller به وجود آوردم. این تابع یک رشته رو میگیره و space ها رو از اون حذف میکنه. اگر وروردی رشته نباشه هم یک ارور به وجود میاد. در نهایت این تابع رو با استفاده از module.exports خروجی گرفتیم تا بتونیم در دیگر پروژه‌ها از اون استفاده کنیم.

برای اینکه ببینیم تابع بالا به درستی کار میکنه، یک فایل بنام test.js به وجود میارم و کدهای زیر رو در اون قرار میدم:

همونطور که میبینید در ابتدا فایل index.js رو وارد این فایل کردم و اون رو در متغیر spacekiller قرار دادم. حالا یک متن با space رو به این تابع پاس دادم و خروجی اون رو در متغیر stringWithoutSpaces قرار دادم. حالا اگر در command line دستور node test.js رو اجرا کنم، خروجی بصورت زیر خواهد بود:

همونطور که میبینید فضاهای خالی از رشته مورد نظر حذف شده‌اند. دیدید که ابزار ساده ما به درستی کار میکنه. حالا وقتش رسیده که در سیستم خودمون تست کنیم و ببینیم که package ما به درستی کار میکنه یا نه. پس با ما همراه باشید.

تست کردن package یا ماژول

دستور npm link یک ویژگی هست که به شما این امکان رو میده که قبل از publish کردن package در npm اون رو در سیستم خودتون بصورت local تست کنید. این دستور دایرکتوری مربوط به package شما رو در node_modules سراسری یا global شما قرار میده و لینک میکنه.

حالا برای تست کردن این package باید یک دایرکتوری دیگه به وجود بیارید و این بسته رو بصورت local در اون نصب کنید و مجددا اون رو تست کنید. برای اینکار یک دایرکتوری بنام test-spacekiller در Desktop به وجود میارم و دستور npm init -y رو درون اون میزنم تا فایل package.json ساخته بشه. حالا در command line دستور npm link @mamadoo/spacekiller رو اجرا کنید. بصورت زیر:

حالا اگر ساختار پروژتون رو نگاه کنید، بصورت زیر خواهد بود:

میبینید که بسته local در پوشه node_modules قرار گرفته و در واقع یک symlink می‌باشد. حالا یک فایل بنام test.js میسازم و کدهای زیر رو درونش قرار میدم:

همونطور که میبینید در اینجا بجای ./ از @mamadoo/spacekiller استفاده کردم. برای تست نیز میتونین node test.js رو در command line اجرا کنید و خواهید دید که اوکی هست.

خب بعد از اینکه package رو locally تست کردیم و از درست بودن اون مطمئن شدیم، میتونیم اون رو منتشر یا Publish کنیم.

برای اینکه بسته تستی بالا رو که با استفاده از npm link نصب کردیم، پاک کرده و به حالت اول برگردونیم، میتونیم از دستور npm unlink استفاده کنیم. بصورت زیر:

میبینید که با اینکار بسته تستی از پروژه پاک میشه و حالا میتونین بسته واقعی رو بعد از publish شدن، نصب کنید.

در قسمت بعد در مورد publish کردن بسته در npm و github توضیح میدم و چیزای خوبی یاد خواهید گرفت.

comment دیدگاه کاربران

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.