سرفصل‌های آموزشی
آموزش npm
public و private بودن پکیج ها در npm

public و private بودن پکیج ها در npm

خود مستند npm به این مبحث scopes and package visibility می‌گوید که می‌توانیم آن را «قابلیت مشاهده» ترجمه کنیم. این که یک پکیج برای چه کسانی قابل‌مشاهده است، به اسکوپ، و همچنین سطح دسترسی‌شان بستگی دارد (public یا private). و اما چند نکته در این درباره:

• پکیج‌های بدون اسکوپ همگی public هستند.
• پکیج‌های private همگی اسکوپ‌دار هستند، ولی پکیج‌های اسکوپ‌دار می‌توانند public هم باشند. در واقع پکیج‌های اسکوپ‌دار بصورت پیش‌فرض private هستند، ولی می‌توان موقع انتشار، با اضافه کردن گزینه access public-- آن‌ها را public نمود. در مقابل گزینه access restricted-- هم سطح دسترسی را به private تبدیل می‌کند، و البته می‌توان این کار را از طریق سایت npm نیز انجام داد.

• برای ایجاد یک اسکوپ شخصی در npm، حتماً باید حساب کاربری پولی داشته باشیم.
• برای ایجاد یک اسکوپ ارگانی در npm نیازی به داشتن حساب کاربری پولی نیست. ولی برای انتشار پکیج private بر روی آن لازم است که حساب کاربری پولی داشته باشیم.
• برای انتشار یک پکیج اسکوپ‌دار، لازم است که آن اسکوپ از قبل در npm registry وجود داشته باشد، یعنی از قبل آن اسکوپ را ایجاد کرده باشیم. حالا اگر خواستیم بصورت private این پکیجِ اسکوپ‌دار را منتشر کنیم، حتماً نیاز است که از قبل عضویت پولی داشته باشیم. اما اگر صراحتاً مشخص کنیم که پکیجمان بصورت public منتشر شود (یعنی گزینه access public-- را زده باشیم)، دیگر نیازی به حساب پولی نیست و همینکه آن اسکوپ را در سایت npm ایجاد کرده باشیم کفایت می‌کند. این موضوع یک نکته ظریف دارد که برداشت نگارنده است و امیدواریم گیج‌کننده نباشد: 

گفتیم که برای انتشار یک پکیجِ اسکوپ‌دار، نیاز است که حتماً از قبل آن اسکوپ وجود داشته باشد. از طرفی می‌دانیم که دو نوع اسکوپِ شخصی و ارگانی داریم. برای ایجاد اسکوپ ارگانی نیاز نیست حتماً حساب پولی داشته باشیم، بنابراین انتشار پکیج public در اسکوپ ارگانی بدون پول هم شدنی‌ست! اما برای ایجاد اسکوپ شخصی، حتماً نیاز به حساب پولی داریم، بنابراین حتی انتشار پکیج public در یک اسکوپ شخصی، نیازمند حساب پولی می‌باشد!
دیاگرام زیر، خلاصه‌ای از توضیحات بالاست: (کارهایی که نیاز به عضویت پولی دارند با رنگ بنفش و علامت دلار مشخص شده‌اند)

برای مطالعه دقیق‌تر در این مورد، به توضیحات npm مراجعه کنید:

https://docs.npmjs.com/package-scope-access-level-and-visibility

جدول زیر نیز ترجمه جدول مربوط به public registry از سایت npm است:

اسکوپ سطح دسترسی امکان مشاهده و دانلود (خواندن) امکان انتشار (نوشتن)
Org Private اعضایی از تیم در org که سطح دسترسی خواندن دارند اعضایی از تیم در org که سطح دسترسی خواندن و نوشتن دارند
Org Public همه افراد اعضایی از تیم در org که سطح دسترسی خواندن و نوشتن دارند
User Private صاحب پکیج (package owner) و کاربرانی که دسترسی خواندن به آن‌ها داده شده صاحب پکیج و کاربرانی که دسترسی خواندن و نوشتن به آن‌ها داده شده
User Public همه افراد صاحب پکیج و کاربرانی که دسترسی خواندن و نوشتن به آن‌ها داده شده
Unscoped Public همه افراد صاحب پکیج و کاربرانی که دسترسی خواندن و نوشتن به آن‌ها داده شده

online-support-icon