اگر می خواهید پکیجی برای `Node.js` ایجاد کنید، مسیر ساده زیر را پی بگیرید.

کسی تابحال پکیجی همانند آنچه شما قصد نوشتنش را دارید نوشته است؟

قبل از اینکه خود دست بکار شوید و پکیج جدیدی برای نود بسازید کمی زمان و حوصله بخرج داده و دنبال آن بگردید که آیا پکیجی وجود دارد که نیاز شما را برآورده کند. تا کنون حدود ۸۶هزار پکیج برای نود نوشته شده است، پس با احتمال بسیار بالایی میتوانید پکیجی پیدا کنید که نیاز شما را برطرف کند. مکان های مناسب برای جستجوی پکیج ها سایت های http://npmjs.org/ - http://node-modules.com - http://npmsearch.com/ هستند. همچنین دستوری تحت ترمینال برای جستجو در میان پکیج ها وجود دارد. `npm search`

نام پکیج خود را انتخاب کنید

نامی برای پکیج خود انتخاب کنید که به سادگی بیانگر عمل پکیج شما باشد. بطبع شما مایل نیستید نام پکیج خود را `your-first-node-package` بگذارید. حال از موجود نبودن پکیجی با نام انتخابی خود اطمینان حاصل کنید.

``` $ npm view your-first-node-package npm ERR! 404 'your-first-node-package' is not in the npm registry. ... ```

عالی، نام انتخابی ما هنوز برای پکیجی استفاده نشده است.

شروع پروژه

احتمالا بهترین راه این است که قبل از شروع پروژه، ریپوزیتوری گیت‌هاب برای پروژه خود بسازید. در این صورت هنگامی که دستور `npm init` را اجرا می کنید بطور خود به خود ریپوزیتوری اصلی برنامه شما را شناسایی میکند و `git remote` شما تنظیم می شود. اگر همه اینها برای شما نا مفهمو است، بهتر است چیت‌شیت گیت را همراه داشته باشید.

توجه داشته باشید: شما نیازی به استفاده از گیت برای استفاده از `npm` ندارید، اما همانگونه که مشاهده کرده‌اید بسیاری ازپکیج های موجود در `npm` در گیت‌هاب قرار گرفته‌اند ``` $ git clone git@github.com:user/your-first-node-package.git $ cd your-first-node-package ```

خب اکنون همه چیز برای شروع پروژه و ساخت `package.json` آماده است، این فایل به `npm` اجزاه میدهد نام پکیج و پکیج ها پیش نیاز آن را تشخیص دهد.

``` $ npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sane defaults.

See npm help json for definitive documentation on these fields
and exactly what they do.

Use npm install <pkg> --save afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (your-first-node-package)
version: (0.0.0)
description: My very first package
entry point: (index.js)
test command:
git repository: git@github.com:user/your-first-node-package.git
keywords:
author: Elijah Insua tmpvar@gmail.com (http://tmpvar.com)
license: (ISC)
About to write to /Users/tmpvar/your-first-node-package/package.json:

{
"name": "your-first-node-package",
"version": "0.0.0",
"description": "My very first package",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "Elijah Insua tmpvar@gmail.com (http://tmpvar.com)",
"license": "MIT"
}

Is this ok? (yes)

<p>دستور `npm init` چند سوال از شما می پرسد، با پاسخ دادن به سوالات شما می توانید نگاهی به فایل `package.json` بیاندازید تا نتیجه کار را مشاهده کنید.</p>
<q>اگر شما دستورهای `npm config set init.author.name <name>` و `npm config set init.author.email <email>` را با مشخصات خود اجرا کرده کنید، `npm init` قادر به تشخیص مشخصات شما و پر کردن آنها در سوالات شود.</q>

$ cat package.json
{
"name": "your-first-node-package",
"version": "0.0.0",
"description": "very first package",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "Elijah Insua tmpvar@gmail.com (http://tmpvar.com)",
"license": "MIT"
}

<p>شما همچنین می توانید این فایل را بصورت دستی تغییر دهید، یکی از دلایل مناسب برای اینکار هنگامی است که تشخیص می دهید نام انتخابی شما مناسب نیست، یا نام انتخابی شما در هنگام انتشار موجود باشد.
`package.json` تنطیم کننده برای نصب پکیج ها و تعیین کننده وابستگی‌های آنها است،اما همچنین پکیج هایی وجود دارند که از این فایل برای مقاصد خاصی در طول چرخه حیات پکیج استفاده می کنند.</p>
<h3>زمان کد زنی</h3>
<p>خب اجازه دهید فایل (ماژول) جدیدی به نام `index.js` (همان نام که در شروع پروژه وارد کردیم) بسازیم و در آن مساحت مستطیل را محسابه کنیم :)</p>

module.exports = function(width, height) {
return width * height;
};


<h2>`module.exports` چیست؟</h2>
<p>هنگامی مه نود ماژول شما را لود می کنید در واقع آن را درون تابعی به فرم زیر قرار می دهد:</p>

function(__dirname, __filename, module, exports, require) {
// ...
}

<p>که در آن ` __dirname` و ` __filename` مسیر دایرکتوری جاری و فایلی (ماژولی) است که لود خواهد شد.
`module.exports` در حقیقت مسیر دسترسی به ماژول شما را مشخص می کند. اجازه دهید نگاهی به چگونه‌گی کار آن در مثال خود بیاندازیم.
توجه: ` exports` و `module.exports` هر دو به یک شئ واحد اشاره دارند.
تابع `required()` بصورت همگام پکیج یا ماژولی دیگر را از فایل خوانده و برمیگرداند، پکیج یا ماژول پس از اولین لود کش شده و نگه داری می شود و در فراخوانی های بعدی `require()` برای آن پکیج یا ماژول نیازی به خوانده شدن از درون فایل نیست.</p>

$ node

var area = require('./index.js');
undefined
area(2,4)
8

(^C again to quit)

<p>((برای خروج میانبر `Ctrl+C` را دوبار فشار دهید.))
از آنجایی که ما مقدار `module.exports` را مستقیما برابر یک تابع قرار دادیم پس می توانید مستقیما آن را اجرا کنیم.</p>
<h3>زمان انتشار</h3>
<p>اگر شما تاکنون ثبت نام نکرده‌اید دستور زیر را اجرا کنید و مراحل را برای ایجاد کاربری دنبال کنید تا بتوانبد پکیج خود را درون ریجستری `npm` منتشر کنید.</p>

$ npm adduser

<p>حال زمان نمایش دادن کد خود به جهانیان رسیده است.</p>

$ git add package.json test.js
$ git commit -m "prepare for 1.0.0"
$ npm version 1.0.0
v1.0.0
$ git push && git push --tags
$ npm publish

<p style="text-align:center">کار تمام است
<span style="color:tomato">❤</span></p>