با سلام خدمت شما همراهان گرامی روکسو! به آخرین قسمت از سری آموزش npm برای تازه کارها خوش آمدید، امیدوارم تا این قسمت ما را همراهی کرده باشید.
ما در این سری آموزشی چند بار از دستور mkdir
استفاده کرده ایم. آیا پکیج دیگری هم بوده است که چنین کاری را انجام دهد؟ برای پیدا کردن این پکیج باید از npm search
استفاده کنیم:
$ npm search mkdir NAME | DESCRIPTION | AUTHOR | DATE | VERSION mkdir | Directory creation… | =joehewitt | 2012-04-17 | 0.0.2 fs-extra | fs-extra contains… | =jprichardson… | 2018-11-07 | 7.0.1 make-dir | Make a directory… | =sindresorhus | 2019-04-01 | 3.0.0 ...
بله mkdirp موجود است! بیایید آن را نصب کنیم:
$ npm install mkdirp + mkdirp@0.5.1 added 2 packages in 3.357s
حالا فایلی به نام mkdir.js
ساخته و کد زیر را در آن کپی کنید:
const mkdirp = require("mkdirp"); mkdirp("foo", function(err) { if (err) console.error(err); else console.log("Directory created!"); });
و دستور زیر را از ترمینال اجرا کنید:
$ node mkdir.js Directory created!
برخی اوقات نیاز داریم که وابستگی ها را دوباره نصب کنیم اما قبل از این کار می خواهیم یک پکیج دیگر نیز نصب کنیم:
$ npm install request + request@2.88.0 added 48 packages from 59 contributors and audited 65 packages in 2.73s found 0 vulnerabilities
سپس package.json
را چک می کنیم:
"dependencies": { "mkdirp": "^0.5.1", "request": "^2.88.0", "underscore": "^1.9.1" },
توجه داشته باشید که لیست وابستگی ها به صورت خودکار به روز رسانی شد! در نسخه های قدیمی npm باید با استفاده ازدستور npm install request --save
وابستگی ها را در package.json
ذخیره می کردید اما دیگر نیازی به این کار نیست. همچنین اگر می خواهید پکیجی را بدون ذخیره شدن در package.json
نصب کنید از دستور no-save--
استفاده کنید.
حالا فرض کنید کد پروژه ی خود را روی یک دستگاه دیگر clone (کپی) کرده اید و می خواهید وابستگی ها را نصب کنید. ابتدا پوشه ی node_modules
را حذف کرده و سپس دستور npm install
را اجرا می کنیم:
$ rm -R node-modules $ npm list project@1.0.0 /home/sitepoint/project ├── UNMET DEPENDENCY mkdirp@^0.5.1 ├── UNMET DEPENDENCY request@^2.88.0 └── UNMET DEPENDENCY underscore@^1.9.1 npm ERR! missing: mkdirp@^0.5.1, required by project@1.0.0 npm ERR! missing: request@^2.88.0, required by project@1.0.0 npm ERR! missing: underscore@^1.9.1, required by project@1.0.0 $ npm install added 51 packages from 60 contributors and audited 66 packages in 2.419s found 0 vulnerabilities
اگر به مکان پوشه ی node_modules
نگاه کنید سریعا متوجه می شوید که دوباره ساخته شده است! بدین شکل شما می توانید کدهایتان را با دیگران به اشتراک بگذارید آن هم بدون اینکه پروژه را پر از کدهای تکراری، وابستگی ها و ... کنید.
زمانی که npm پکیجی را دانلود می کند یک کپی از آن می گیرد و در گوشه ای نگهداری می کند تا دفعه ی بعد که نیاز به نصب آن داشتید مجبور نباشید به اینترنت/شبکه متصل شوید. این نسخه های کپی در دیرکتوری npm. در home path (آدرس اصلی) قرار دارند.
$ ls ~/.npm anonymous-cli-metrics.json _cacache index-v5 _locks _logs node-sass
دیرکتوری ما در طول زمان پر از پکیج های قدیمی می شود. بنابراین بهتر است هر از گاهی آن را تمیز کنید:
$ npm cache clean --force
همچنین در صورتی که روی سیستم خود چندین پروژه ی node دارید و می خواهید حذفشان کنید می توانید تمام پوشه های node_module
را حذف کنید:
find . -name "node_modules" -type d -exec rm -rf '{}' +
یکی از ویژگی های جدیدی که به npm اضافه شده است به شما اجازه می دهد که وابستگی ها را اسکن کنید و به دنبال آسیب پذیری های امنیتی بگردید. برای امتحان کردن این ویژگی یک نسخه ی قدیمی از express
را نصب میکنیم:
$ npm install express@4.8.0 express@4.8.0 added 36 packages from 24 contributors and audited 123 packages in 15.97s found 21 vulnerabilities (8 low, 9 moderate, 4 high) run `npm audit fix` to fix them, or `npm audit` for details
به محض نصب چندین گزارش از آسیب پذیری های مختلف دریافت می کنیم. برای نمایش جزئیات بیشتر باید دستور npm audit
را اجرا کنیم:
$ npm run audit === npm audit security report === # Run npm install express@4.16.4 to resolve 21 vulnerabilities ┌───────────────┬──────────────────────────────────────────────────────────────┐ │ High │ Regular Expression Denial of Service │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Package │ negotiator │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Dependency of │ express │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Path │ express > accepts > negotiator │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ More info │ https://nodesecurity.io/advisories/106 │ └───────────────┴──────────────────────────────────────────────────────────────┘ ┌───────────────┬──────────────────────────────────────────────────────────────┐ │ Moderate │ Timing Attack │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Package │ cookie-signature │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Dependency of │ express │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Path │ express > cookie-signature │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ More info │ https://nodesecurity.io/advisories/134 │ └───────────────┴──────────────────────────────────────────────────────────────┘
همانطور که می بینید لیست بلند و بالایی از پکیج ها را می بینیم که دارای آسیب پذیری امنیتی هستند.
اگر به فیلد Path نگاه کنید، مسیری را به شما نشان می دهد که وابستگی در آن قرار دارد. به طور مثال مسیر express > accepts > negotiator
یعنی Express برای اجرا شدن نیاز به پکیج Accepts
دارد. همچنین پکیج Accepts
برای کار کردن به negotiator
وابستگی دارد و همین پکیج است که دارای آسیب پذیری است.
دو راه برای حل این مشکلات وجود دارد؛ یا می توانیم دستور npm install express@4.16.4
و یا npm audit fix
را اجرا کنیم. ما می خواهیم از روش دوم استفاده کنیم:
$ npm audit fix + express@4.16.4 added 15 packages from 11 contributors, removed 8 packages and updated 28 packages in 5.302s fixed 21 of 21 vulnerabilities in 123 scanned packages
از گزارش بالا مشخص می شود که تمام آسیب پذیری ها حل شده اند. در واقع دستور npm audit fix
پکیج های مورد نظر را به آخرین نسخه به روز رسانی کرد. البته حواستان باشد که تمام آسیب پذیری ها به صورت خودکار تصحیح شدنی نیستند. به طور مثال اگر پکیجی از پایه به روز رسانی شد به طوری که اگر آن را به روز رسانی کنید کد هایتان خراب بشود. در چنین حالت هایی باید کد را بررسی کرده و به صورت دستی تصحیح کنید.
البته اگر برایتان مهم نیست که پروژه تان خراب می شود و باید قسمت هایی از آن را دوباره باز نویسی کنید، می توانید از دستور npm audit fix --force
استفاده کنید. پس از اجرای این دستور، دستور npm audit
را نیز اجرا کنید تا مطمئن شوید تمام مشکلات برطرف شده اند.
alias در لغت به معنی «نام مستعار» یا نامی است که به جای دیگری استفاده شود. حتما متوجه شده اید که در npm چندین روش برای اجرای یک دستور وجود دارد، به این دستورات که به جای هم استفاده می شوند alias می گوییم.
npm up
- به روز رسانی پکیج هاnpm t
- اجرای تست هاnpm ls
- لیست ماژول های نصب شدهnpm ll
یا npm la
- نمایش اطلاعات اضافی در مورد پکیج ها و لیست ماژول هاهمچنین با استفاده از دستور زیر می توانید چندین پکیج ها به صورت همزمان نصب کنید:
$ npm i express momemt lodash mongoose body-parser webpack
نکته: اگر دوست دارید با تمام دستورات npm آشنا شوید دستور npm help
را اجرا کنید.
نکته: ابزارهایی وجود دارند که به شما اجازه می دهند چندین نسخه از Node.js را در یک سیستم داشته باشید؛ ابزار n و ابزار nvm (مخفف Node Version Manager) و ابزار nvm for Windows (مخصوص افرادی که از ویندوز استفاده می کنند).
ما در این سری کوتاه در مورد مباحث پایه ای npm صحبت کرده و با دستورات آن آشنا شدیم. اگر دوست دارید از آخرین به روز رسانی ها و آموزش های جدید اطلاع داشته باشید صفحه ی npm در GitHub را دنبال کنید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.