~13 دقیقه مطالعه • بروزرسانی ۲ دی ۱۴۰۴
1. مقدمه
رابط خط فرمان Node.js ابزارهای دیباگ داخلی، روشهای مختلف اجرای اسکریپت و گزینههای پیکربندی زمان اجرا را در اختیار توسعهدهندگان قرار میدهد. اجرای دستور man node در ترمینال صفحهٔ راهنمای این گزینهها را نمایش میدهد.
2. نحو (Synopsis)
node [options] [V8 options] [| -e "script" | -] [--] [arguments] node inspect [ | -e "script" | : ] … node --v8-options
اجرای node بدون آرگومان محیط REPL را آغاز میکند.
3. نقطهٔ ورود برنامه
- اگر مسیر مطلق نباشد، بهصورت نسبی از دایرکتوری جاری حل میشود.
- بهطور پیشفرض با
require()بارگذاری میشود، مگر شرایطی که بارگذاری با ماژول ECMAScript اجباری باشد (مانند--import، پسوندهای .mjs/.mts/.wasm یا وجود"type": "module"در package.json).
4. گزینههای عمومی
-: معادل stdin، اسکریپت از ورودی خوانده میشود.--: پایان گزینههای Node.js را مشخص میکند و آرگومانهای بعدی به اسکریپت منتقل میشوند.--abort-on-uncaught-exception: بهجای خروج، فایل core برای دیباگ تولید میکند.
5. گزینههای مدل مجوز
Node.js مدلی برای محدودسازی عملیات حساس معرفی کرده است. برای فعالسازی باید پرچمها بهطور صریح ارسال شوند.
--allow-addons: بارگذاری افزونههای بومی را فعال میکند. بدون آن، خطایERR_DLOPEN_DISABLEDرخ میدهد.--allow-child-process: اجازهٔ ایجاد فرآیندهای فرزند را میدهد. بدون آن، خطایERR_ACCESS_DENIEDرخ میدهد.--allow-fs-read: دسترسی خواندن فایلها را برای مسیرهای مشخص فعال میکند. میتوان چند مسیر را با چند پرچم مجزا تعیین کرد.--allow-fs-write: دسترسی نوشتن فایلها را برای مسیرهای مشخص فعال میکند. استفاده از مسیرهای جداشده با کاما منسوخ شده است.--allow-inspector: اجازهٔ اتصال از طریق پروتکل inspector را میدهد. بدون آن، خطایERR_ACCESS_DENIEDرخ میدهد.
6. مثالها
// مثال: اجازهٔ خواندن از همهٔ مسیرها $ node --permission --allow-fs-read=* index.js // مثال: اجازهٔ ایجاد فرآیند فرزند $ node --permission --allow-child-process index.js // مثال: فعالسازی inspector $ node --permission --allow-inspector index.js
7. نکات مهم
- گزینهها میتوانند با خط تیره یا زیرخط نوشته شوند (مثلاً
--pending-deprecationمعادل--pending_deprecationاست). - گزینههای خط فرمان بر گزینههای محیطی
NODE_OPTIONSاولویت دارند. - اگر گزینهای چندبار تکرار شود، آخرین مقدار استفاده میشود.
نتیجهگیری
رابط خط فرمان Node.js ابزارهای قدرتمندی برای پیکربندی رفتار زمان اجرا و اعمال امنیت از طریق مدل مجوز فراهم میکند. درک و استفاده از پرچمهایی مانند --allow-addons، --allow-child-process و --allow-fs-read/write تضمین میکند که برنامهها بهصورت امن و کارآمد اجرا شوند.
1. گزینههای Permission Model
--allow-net: اجازهٔ دسترسی به شبکه. بدون آن، هر اتصال شبکهای خطایERR_ACCESS_DENIEDایجاد میکند.--allow-wasi: اجازهٔ ایجاد نمونههای WASI. بدون آن، خطایERR_ACCESS_DENIEDرخ میدهد.--allow-worker: اجازهٔ ایجاد Worker Threads. بدون آن، خطایERR_ACCESS_DENIEDرخ میدهد.
2. Snapshot Options
--build-snapshot: ایجاد Snapshot از وضعیت برنامه و ذخیرهٔ آن در فایل blob.--build-snapshot-config: استفاده از فایل JSON برای پیکربندی رفتار ساخت Snapshot (مانند builder یا withoutCodeCache).
3. بررسی و تکمیل
-c, --check: بررسی نحوی اسکریپت بدون اجرا.--completion-bash: تولید اسکریپت تکمیل خودکار برای Bash.-C condition, --conditions=condition: تعریف شرایط سفارشی برای exports resolution.
4. CPU Profiling
--cpu-prof: فعالسازی پروفایلگیری CPU و ذخیرهٔ خروجی در فایل.--cpu-prof-dir: تعیین مسیر ذخیرهٔ پروفایلها.--cpu-prof-interval: تعیین بازهٔ نمونهگیری (به میکروثانیه).--cpu-prof-name: تعیین نام فایل پروفایل.
5. گزینههای تشخیصی و امنیتی
--diagnostic-dir: مسیر پیشفرض برای خروجیهای تشخیصی.--disable-proto=mode: غیرفعالسازی ویژگیObject.prototype.__proto__(حذف یا پرتاب خطا).--disable-sigusr1: غیرفعالسازی شروع دیباگ با سیگنال SIGUSR1.--disable-warning=code-or-type: غیرفعالسازی هشدارهای خاص بر اساس کد یا نوع (مانند DeprecationWarning یا ExperimentalWarning).
6. مثالها
// اجازهٔ دسترسی به شبکه
$ node --permission --allow-net index.js
// ساخت Snapshot
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js
// پروفایلگیری CPU
$ node --cpu-prof --cpu-prof-name 'CPU.${pid}.cpuprofile' index.js
// غیرفعالسازی هشدار خاص
$ node --disable-warning=DEP0025 index.js
نتیجهگیری
گزینههای پیشرفتهٔ CLI در Node.js ابزارهای قدرتمندی برای مدیریت امنیت، کارایی و دیباگ فراهم میکنند. استفادهٔ صحیح از پرچمهایی مانند --allow-net، --build-snapshot و --cpu-prof به توسعهدهندگان کمک میکند برنامههای مقیاسپذیر و امن بسازند.
1. WebAssembly Options
--disable-wasm-trap-handler: غیرفعالسازی بهینهسازی trap-handler برای WebAssembly. این کار اجازهٔ اجرای WebAssembly را در سیستمهایی با فضای آدرس محدود میدهد، هرچند با کارایی کمتر.
2. Code Generation Restrictions
--disallow-code-generation-from-strings: باعث میشود ویژگیهایی مانندevalوnew Functionکه کد را از رشته تولید میکنند، استثنا پرتاب کنند. این گزینه امنیت را افزایش میدهد.
3. DNS Options
--dns-result-order: تعیین ترتیب پیشفرض درdns.lookup()وdnsPromises.lookup(). مقادیر مجاز:ipv4first,ipv6first,verbatim.
4. Security and Networking
--enable-fips: فعالسازی رمزنگاری سازگار با FIPS در زمان اجرا (نیازمند OpenSSL سازگار).--enable-network-family-autoselection: فعالسازی الگوریتم انتخاب خودکار خانوادهٔ شبکه.
5. Source Maps
--enable-source-maps: فعالسازی پشتیبانی از Source Maps برای نمایش stack trace مرتبط با فایلهای اصلی (مانند TypeScript). این گزینه میتواند تأخیر ایجاد کند اگرError.stackزیاد استفاده شود.
6. Entry Point Options
--entry-url: تفسیر نقطهٔ ورود بهعنوان URL بهجای مسیر فایل. از قوانین ECMAScript module resolution پیروی میکند.
7. Environment File Options
--env-file: بارگذاری متغیرهای محیطی از فایل. اگر فایل وجود نداشته باشد خطا پرتاب میشود.--env-file-if-exists: مشابه--env-fileاما بدون خطا در صورت نبود فایل.
8. Eval Option
-e, --eval "script": اجرای مستقیم کد جاوااسکریپت از خط فرمان. در ویندوز باید از " برای نقل قول استفاده شود.
9. Experimental Features
--experimental-addon-modules: پشتیبانی آزمایشی برای import افزونههای .node.--experimental-config-file: بارگذاری فایل پیکربندی JSON سفارشی برای تنظیمات Node.js.--experimental-default-config-file: بارگذاری خودکار فایلnode.config.jsonاز دایرکتوری جاری.--experimental-eventsource: فعالسازی API جهانی EventSource.--experimental-import-meta-resolve: پشتیبانی ازimport.meta.resolve()با آرگومان parentURL.--experimental-inspector-network-resource: پشتیبانی آزمایشی از منابع شبکه در inspector.
10. Examples
// اجرای WebAssembly بدون trap-handler
$ node --disable-wasm-trap-handler index.js
// بارگذاری متغیرهای محیطی
$ node --env-file=.env --env-file=.development.env index.js
// اجرای کد جاوااسکریپت از خط فرمان
$ node -e "console.log('Hello World')"
// فعالسازی Source Maps
$ node --enable-source-maps index.js
نتیجهگیری
گزینههای پیشرفتهٔ CLI در Node.js ابزارهای قدرتمندی برای مدیریت امنیت، پیکربندی و ویژگیهای آزمایشی فراهم میکنند. استفادهٔ صحیح از پرچمهایی مانند --disable-wasm-trap-handler، --enable-source-maps و --experimental-config-file به توسعهدهندگان کمک میکند برنامههای امنتر، قابلدیباگتر و انعطافپذیرتر بسازند.
1. Experimental Loader
--experimental-loader=module: مشخص کردن ماژولی برای hooks سفارشی. استفاده از این پرچم توصیه نمیشود و ممکن است حذف شود.
2. Networking and Protocols
--experimental-network-inspection: پشتیبانی آزمایشی از بازرسی شبکه با Chrome DevTools.--experimental-quic: فعالسازی پشتیبانی آزمایشی از پروتکل QUIC.
3. Module and Language Features
--experimental-require-module: بارگذاری گراف ماژول ES بهصورت synchronous درrequire().--experimental-shadow-realm: فعالسازی پشتیبانی از ShadowRealm.--experimental-transform-types: تبدیل سینتکس مخصوص TypeScript به کد جاوااسکریپت. ضمنی--enable-source-maps.--experimental-vm-modules: پشتیبانی آزمایشی از ماژولهای ES درnode:vm.--experimental-wasi-unstable-preview1: پشتیبانی آزمایشی از WASI.
4. Testing Features
--experimental-test-coverage: تولید گزارش پوشش کد هنگام اجرای تستها.--experimental-test-module-mocks: فعالسازی mocking ماژولها در تست رانر.
5. SEA and Config
--experimental-sea-config: تولید blob برای ساخت اپلیکیشن تکفایلی.
6. Inspection
--experimental-worker-inspection: پشتیبانی آزمایشی از بازرسی Worker با Chrome DevTools.
7. Garbage Collection
--expose-gc: نمایش تابعgc()از V8 برای مدیریت دستی garbage collection.
8. Security Flags
--force-context-aware: جلوگیری از بارگذاری افزونههای بومی غیر context-aware.--force-fips: فعالسازی اجباری رمزنگاری سازگار با FIPS.--force-node-api-uncaught-exceptions-policy: enforce رفتار صحیح برای uncaughtException در Node-API callbacks.--frozen-intrinsics: فریز کردن اشیاء داخلی مانند Array و Object.
9. Heap Profiling
--heap-prof: فعالسازی پروفایلگیری heap و ذخیرهٔ خروجی در فایل.--heap-prof-dir: تعیین مسیر ذخیرهٔ پروفایلها.--heap-prof-interval: تعیین بازهٔ نمونهگیری (به بایت).--heap-prof-name: تعیین نام فایل پروفایل.
10. Heap Snapshots
--heapsnapshot-near-heap-limit=max_count: تولید snapshot زمانی که استفادهٔ heap نزدیک به محدودیت است.--heapsnapshot-signal=signal: نوشتن heap dump هنگام دریافت سیگنال مشخص.
11. Help Option
-h, --help: نمایش گزینههای خط فرمان Node.js.
Examples
// فعالسازی پروفایلگیری heap $ node --heap-prof index.js // تولید snapshot هنگام نزدیک شدن به محدودیت heap $ node --heapsnapshot-near-heap-limit=3 index.js // نمایش کمک $ node --help
نتیجهگیری
گزینههای آزمایشی و پروفایلگیری در Node.js ابزارهای قدرتمندی برای تست ویژگیهای جدید، افزایش امنیت و بررسی عملکرد حافظه و CPU فراهم میکنند. استفادهٔ صحیح از پرچمهایی مانند --experimental-quic، --heap-prof و --expose-gc به توسعهدهندگان کمک میکند برنامههای پایدارتر و امنتر بسازند.
1. Module and Import Options
--icu-data-dir=file: مشخص کردن مسیر بارگذاری دادههای ICU.--import=module: بارگذاری ماژولهای ES در زمان شروع. ماژولهای--requireقبل از--importاجرا میشوند.--input-type=type: تعیین نوع ورودی برای--evalیا STDIN (commonjs, module, typescript).
2. HTTP and Parser Options
--insecure-http-parser: فعالسازی حالت lenient برای HTTP parser. استفاده از این پرچم خطرناک است و میتواند حملات امنیتی ایجاد کند.
3. Inspector and Debugging
--inspect: فعالسازی دیباگر V8 روی host:port.--inspect-brk: فعالسازی دیباگر و توقف در ابتدای اجرای اسکریپت.--inspect-port: تعیین host:port برای دیباگر.--inspect-wait: فعالسازی دیباگر و انتظار برای اتصال debugger.--inspect-publish-uid: تعیین نحوهٔ انتشار URL دیباگر.
4. Interactive and Execution Options
-i, --interactive: باز کردن REPL حتی اگر stdin ترمینال نباشد.--jitless: غیرفعالسازی تخصیص حافظه اجرایی در زمان اجرا (امنیت بیشتر، کارایی کمتر).--localstorage-file=file: تعیین فایل برای ذخیرهٔ دادههای localStorage.
5. Memory Management
--max-http-header-size=size: تعیین حداکثر اندازهٔ هدرهای HTTP.--max-old-space-size-percentage: تخصیص درصدی از حافظهٔ سیستم به V8 heap.
6. Security and Addons
--no-addons: غیرفعالسازی بارگذاری افزونههای بومی.--no-deprecation: بیصدا کردن هشدارهای deprecation.--no-warnings: بیصدا کردن همهٔ هشدارها.--permission: فعالسازی Permission Model برای محدودسازی دسترسیها.
7. OpenSSL Options
--openssl-config=file: بارگذاری فایل پیکربندی OpenSSL.--openssl-legacy-provider: فعالسازی provider قدیمی در OpenSSL 3.0.--openssl-shared-config: فعالسازی بخش پیکربندی پیشفرض OpenSSL.
8. Symlink Options
--preserve-symlinks: حفظ مسیر symlink هنگام بارگذاری ماژولها.--preserve-symlinks-main: اعمال رفتار مشابه برای ماژول اصلی.
9. Profiling and Reports
--prof: تولید خروجی پروفایل V8.--prof-process: پردازش خروجی پروفایل V8.--redirect-warnings=file: نوشتن هشدارها در فایل بهجای stderr.--report-compact: تولید گزارش در قالب JSON تکخطی.--report-dir: تعیین مسیر ذخیرهٔ گزارشها.--report-exclude-env: حذف متغیرهای محیطی از گزارش تشخیصی.
Examples
// فعالسازی دیباگر روی پورت تصادفی $ node --inspect=0 index.js // بارگذاری ماژول ES در زمان شروع $ node --import=module.js index.js // اجرای REPL حتی بدون ترمینال $ node -i // بیصدا کردن هشدارها $ node --no-warnings index.js
نتیجهگیری
گزینههای CLI در Node.js ابزارهای قدرتمندی برای مدیریت ماژولها، دیباگ و امنیت فراهم میکنند. استفادهٔ صحیح از پرچمهایی مانند --inspect، --permission و --openssl-config به توسعهدهندگان کمک میکند برنامههای امنتر و قابلدیباگتر بسازند.
1. Diagnostic Report Options
--report-exclude-network: حذف اطلاعات شبکه از گزارش تشخیصی.--report-filename=filename: تعیین نام فایل گزارش (stdout یا stderr نیز قابل استفاده است).--report-on-fatalerror: تولید گزارش هنگام خطاهای کشنده (مانند out-of-memory).--report-on-signal: تولید گزارش هنگام دریافت سیگنال مشخص.--report-signal=signal: تعیین سیگنال برای تولید گزارش (پیشفرض SIGUSR2).--report-uncaught-exception: تولید گزارش هنگام خروج به دلیل استثنای مدیریتنشده.
2. Module Preloading
-r, --require module: بارگذاری ماژول مشخص در زمان شروع. این ماژولها قبل از--importاجرا میشوند.
3. Run Scripts
--run: اجرای اسکریپتهای تعریفشده درpackage.json. سادهتر و سریعتر ازnpm runاما با امکانات محدودتر.
4. Secure Heap Options
--secure-heap=n: ایجاد heap امن در OpenSSL برای جلوگیری از نشت دادههای حساس.--secure-heap-min=n: تعیین حداقل تخصیص از heap امن.
5. Snapshot Options
--snapshot-blob=path: تعیین مسیر blob برای ذخیره یا بارگذاری snapshot برنامه.
6. Test Runner Options
--test: اجرای تستها با استفاده از test runner داخلی Node.js.--test-concurrency: تعیین حداکثر تعداد فایلهای تست همزمان.--test-coverage-branches/functions/lines: تعیین حداقل درصد پوشش کد برای شاخهها، توابع و خطوط.--test-coverage-include / --test-coverage-exclude: مدیریت فایلهای شامل یا حذفشده از گزارش پوشش کد.--test-force-exit: خروج از فرآیند پس از پایان همهٔ تستها.--test-global-setup=module: بارگذاری ماژول برای تنظیمات سراسری قبل از اجرای تستها.--test-isolation=mode: تعیین نوع ایزولاسیون تستها (process یا none).--test-name-pattern / --test-skip-pattern: اجرای یا رد تستها بر اساس الگوی نام.--test-only: اجرای فقط تستهایی که باonlyمشخص شدهاند.--test-reporter / --test-reporter-destination: تعیین گزارشگر تست و مقصد آن.--test-rerun-failures: اجرای مجدد تستهای ناموفق با استفاده از فایل وضعیت.--test-shard: تقسیم مجموعهٔ تستها به بخشهای مساوی و اجرای یک بخش خاص.
Examples
// تولید گزارش هنگام خطای کشنده $ node --report-on-fatalerror index.js // اجرای تستها با ایزولاسیون فرآیندی $ node --test --test-isolation=process // اجرای فقط تستهای مشخصشده با only $ node --test --test-only // اجرای اسکریپت test از package.json $ node --run test
نتیجهگیری
گزینههای CLI در Node.js برای گزارشگیری تشخیصی و مدیریت تستها ابزارهای قدرتمندی فراهم میکنند. پرچمهایی مانند --report-on-fatalerror، --test-coverage-lines و --secure-heap به توسعهدهندگان کمک میکنند مشکلات را بهتر تحلیل کرده و تستهای پایدارتر و امنتر اجرا کنند.
1. Test Runner Options
--test-timeout: تعیین زمان حداکثر اجرای تستها (به میلیثانیه). پیشفرض Infinity.--test-update-snapshots: بازتولید فایلهای snapshot برای تستهای snapshot.
2. Deprecation and Title Options
--throw-deprecation: پرتاب خطا هنگام استفاده از APIهای منسوخ.--trace-deprecation: چاپ stack trace برای هشدارهای deprecation.--title=title: تعیین عنوان فرآیند در زمان شروع.
3. TLS Options
--tls-cipher-list: تعیین لیست cipherهای TLS.--tls-keylog=file: ذخیرهٔ کلیدهای TLS در فایل برای تحلیل ترافیک.--tls-min-v1.2 / --tls-max-v1.3: تعیین نسخههای حداقل و حداکثر TLS.
4. Environment Variable Tracing
--trace-env: چاپ دسترسیها به متغیرهای محیطی.--trace-env-js-stack: چاپ stack trace جاوااسکریپت هنگام دسترسی.--trace-env-native-stack: چاپ stack trace بومی هنگام دسترسی.
5. Trace Events
--trace-event-categories: تعیین دستههای رویداد برای ردیابی.--trace-event-file-pattern: تعیین قالب فایل خروجی رویدادها.--trace-events-enabled: فعالسازی جمعآوری اطلاعات رویدادها.
6. Other Trace Options
--trace-exit: چاپ stack trace هنگام خروج فرآیند.--trace-uncaught: چاپ stack trace برای استثناهای مدیریتنشده.--trace-warnings: چاپ stack trace برای هشدارها.--trace-sync-io: چاپ stack trace هنگام شناسایی I/O همزمان.--trace-tls: چاپ اطلاعات بستههای TLS.
7. Memory and Heap Options
--track-heap-objects: ردیابی تخصیص اشیاء heap برای snapshotها.--unhandled-rejections=mode: تعیین رفتار هنگام رخداد promiseهای مدیریتنشده (throw, strict, warn, none).
8. CA and Proxy Options
--use-bundled-ca: استفاده از CAهای بستهبندیشده توسط Node.js.--use-openssl-ca: استفاده از CAهای پیشفرض OpenSSL.--use-system-ca: استفاده از CAهای سیستم.--use-env-proxy: استفاده از متغیرهای محیطی HTTP_PROXY و HTTPS_PROXY.
9. Watch Mode Options
--watch: اجرای Node.js در حالت watch و ریاستارت هنگام تغییر فایلها.--watch-path: تعیین مسیرهای خاص برای watch.--watch-preserve-output: جلوگیری از پاک شدن خروجی کنسول هنگام ریاستارت.--watch-kill-signal: تعیین سیگنال برای پایان فرآیند هنگام ریاستارت.
10. Environment Variables
NODE_OPTIONS: تعیین گزینههای CLI بهصورت پیشفرض.NODE_EXTRA_CA_CERTS: افزودن گواهیهای CA اضافی.NODE_ICU_DATA: تعیین مسیر دادههای ICU.NODE_V8_COVERAGE: فعالسازی خروجی پوشش کد V8.NODE_REPL_HISTORY: تعیین مسیر ذخیرهٔ تاریخچهٔ REPL.NODE_TLS_REJECT_UNAUTHORIZED: غیرفعالسازی اعتبارسنجی TLS (غیرامن).UV_THREADPOOL_SIZE
نوشته و پژوهش شده توسط دکتر شاهین صیامی