وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

رفع خطای EACCES هنگام نصب npm روی هاست Node.js؛ کش یا فایل پروژه؟

راهنمای تشخیص مسیر خطای EACCES، ساخت کش آزمایشی npm و اصلاح دسترسی برنامه بدون sudo یا chmod همگانی.

انتشار:
توسط تیم فنی نت‌آرام
۷ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله رفع خطای EACCES هنگام نصب npm روی هاست Node.js؛ کش یا فایل پروژه؟ در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
هنگام نصب وابستگی‌های Node.js روی هاست، پیام EACCES: permission denied می‌بینید. npm نتوانسته در یک فایل یا پوشه عملیاتی را انجام دهد. اما تا وقتی مسیر دقیق داخل خطا را نخوانیم، نمی‌دانیم مشکل از کش npm، پوشه پروژه، فایل قفل یا یک مسیر سیستمی است.
در این راهنما با حساب معمولی هاست مسیر مشکل‌دار را پیدا می‌کنیم و اگر کش علت بود، یک کش آزمایشی خصوصی می‌سازیم. از اجرای sudo npm install و دادن مجوز نوشتن به همه کاربران برای ساکت‌کردن خطا خودداری می‌کنیم؛ این کارها روی هاست اشتراکی ممکن است مجاز نباشند یا مالکیت فایل‌ها را بدتر کنند.

۱. مسیر و عملیات ناموفق را از خطا بخوانید

چند خط قبل و بعد از EACCES را در گزارش نصب ببینید. npm معمولاً عبارتی مانند path و عملیاتی مثل open، mkdir یا rename را نشان می‌دهد. برای مثال، مسیر زیر فرضی است:
کد / دستورnpm error code EACCES npm error syscall mkdir npm error path /home/USER/.npm/_cacache
در این مثال تلاش ساخت پوشه‌ای در کش شکست خورده است. اگر مسیر به node_modules، package-lock.json یا پوشه دیگری در پروژه اشاره می‌کند، تغییر مسیر کش به‌تنهایی آن مشکل را حل نمی‌کند. اگر مسیر زیر /usr یا یک محل سیستمی است، شاید نصب سراسری یا محیط اشتباه انتخاب شده باشد. نام و مسیر را بدون رمز یا توکن یادداشت کنید.
در cPanel بخش Setup Node.js App را باز کنید و برنامه، Application root و نسخه Node.js را مشخص کنید. در صورت وجود فرمان ورود به محیط اختصاصی، آن را در Terminal یا SSH حساب اجرا کنید. سپس وارد مسیر واقعی پروژه شوید؛ نمونه:
کد / دستورcd ~/my-node-app pwd node --version npm --version
اگر فایل‌های برنامه در پوشه دیگری‌اند، مسیر نمونه را جایگزین کنید. برنامه وب و ترمینال لزوماً یک محیط یکسان ندارند، اما این فرمان‌ها مشخص می‌کنند عملیات فعلی در کجا و با کدام نسخه در حال انجام است.

۲. هویت، کش و مجوز مسیر را ببینید

در همان ترمینال:
کد / دستورid npm config get cache ls -ld "$HOME" "$HOME/.npm" 2>/dev/null
id حساب و گروه‌ها را نشان می‌دهد و فرمان دوم مسیر کش تنظیم‌شده برای npm را می‌دهد. اگر .npm وجود ندارد، نبود خروجی برای آن طبیعی است. مسیر واقعی که در پیام خطا آمده را نیز با ls -ld بررسی کنید؛ به مالک و مجوز پوشه‌های مسیر توجه کنید. تنظیمات کامل npm ممکن است نشانی مخزن خصوصی یا توکن داشته باشند، پس فایل .npmrc و خروجی‌های حاوی رمز را عمومی نکنید.
اگر خطا برای فایل پروژه است، مشخص کنید فایل متعلق به حساب فعلی است یا قبلاً توسط فرآیند دیگری با مالک متفاوت ساخته شده است. در بعضی پنل‌های Node.js Selector، node_modules یک مسیر مدیریت‌شده یا پیوند است؛ آن را حذف، بازسازی یا کپی از رایانه نکنید مگر روش سرویس را بدانید. راهنمای ماژول پیدانشده در Node.js بررسی محیط برنامه را توضیح می‌دهد.

۳. اگر کش مشکل دارد، یک کش آزمایشی خصوصی بسازید

در یک نسخه آزمایشی از پروژه و با همان حساب، می‌توانید یک پوشه تازه داخل خانه خود بسازید:
کد / دستورcache_dir="$(mktemp -d "$HOME/npm-cache-test.XXXXXX")" printf 'test cache: %s\n' "$cache_dir" npm cache verify --cache "$cache_dir"
mktemp -d پوشه‌ای با نام تازه ایجاد می‌کند. فرمان آخر بررسی کش را در همان مسیر انجام می‌دهد. اگر این مرحله هم خطای دسترسی دارد، وضعیت خانه حساب و سهمیه آن را بررسی کنید. مسیر ساخته‌شده را برای پاک‌سازی بعدی یادداشت کنید؛ قبل از حذف هر پوشه، هویت آن را مطمئن شوید.
اگر تأیید شد که نسخه آزمایشی پروژه و فایل‌های وابستگی مورد اعتماد هستند، می‌توانید نصب را با همان کش امتحان کنید:
کد / دستورnpm install --cache "$cache_dir"
این فرمان ممکن است فایل قفل یا پوشه وابستگی را تغییر دهد و اسکریپت‌های نصب بسته‌ها را اجرا کند. بنابراین در برنامه فعال و بدون نسخه بازگشت انجامش ندهید. اگر نصب با کش تازه موفق شد، تفاوت دسترسی یا تنظیم کش قبلی سرنخ است؛ این نتیجه سلامت همه فایل‌های برنامه را تضمین نمی‌کند.

۴. راه‌حل پایدار را متناسب با مسیر انتخاب کنید

اگر کش قدیمی متعلق به حساب دیگری است یا پس از یک عملیات مدیریتی مالکیت نامناسب پیدا کرده، در هاست اشتراکی از پشتیبانی بخواهید همان مسیر مشخص را بررسی کند. نام برنامه، مسیر خطا، زمان و نتیجه آزمایش کش تازه را بدهید؛ نیازی به ارسال رمز نیست. تغییر مالکیت کل خانه کاربر یا پوشه‌های سیستم بدون شناخت می‌تواند سرویس‌های دیگر را خراب کند.
راه دیگر، در صورت سازگاری با روش مدیریت سرویس، استفاده از یک کش خصوصی با مسیر ثابت است. برای مثال در نسخه آزمایشی پروژه و npm نسخه‌ای که گزینه --location=project را پشتیبانی می‌کند، ابتدا به پوشه دارای package.json بروید. اگر آنجا .npmrc دارید، نسخه قبلی آن را در محلی خصوصی و خارج از مسیر عمومی وب نگه دارید؛ این فایل ممکن است نشانی مخزن یا توکن داشته باشد و نباید محتوایش را عمومی کنید. سپس با حساب معمولی اجرا کنید:
کد / دستورmkdir -m 700 "$HOME/npm-cache-myapp" && npm config set cache "$HOME/npm-cache-myapp" --location=project npm config get cache
نام پوشه نمونه است؛ یک نام تازه در فضای مجاز حساب انتخاب کنید. اگر پوشه از قبل وجود دارد، mkdir خطا می‌دهد و به‌دلیل && تنظیم بعدی اجرا نمی‌شود؛ نام دیگری انتخاب کنید و مجوز پوشه ناشناس را تغییر ندهید. فرمان تنظیم، مسیر را در .npmrc همان پروژه ثبت می‌کند. خروجی دستور آخر باید مسیر جدید داخل خانه حساب را نشان دهد. اگر مقدار دیگری دیدید، ممکن است تنظیم محیط یا فرمان پنل اولویت بیشتری داشته باشد؛ نتیجه را در همان محیط اجرای واقعی برنامه بررسی کنید. این مسیر مخصوص همان هاست است و قرار نیست همراه پروژه به مخزن عمومی منتقل شود.
برای بازگشت، نسخه خصوصی .npmrc را که پیش از تغییر نگه داشته‌اید به همان پروژه برگردانید. اگر پیش از آزمایش فایل وجود نداشت، فقط پس از اطمینان از اینکه حاوی تنظیم دیگری نشده، فایل ساخته‌شده را با روش پنل حذف کنید. سپس npm config get cache را دوباره اجرا کنید. در نسخه قدیمی npm یا پنلی که تنظیم پروژه را نادیده می‌گیرد، روش مورد تأیید سرویس را دنبال کنید؛ نتیجه ترمینال به‌تنهایی ثابت نمی‌کند دکمه پنل هم همان کش را استفاده می‌کند.
اگر خطا در فایل یا پوشه پروژه است، به‌جای تغییر کش باید دسترسی و مالکیت همان فایل و پوشه‌های والد آن اصلاح شود. در هاست اشتراکی از ارائه‌دهنده درباره روش ایمن حساب سؤال کنید. chmod -R 777، اجرای npm با root و تغییر سراسری مجوزها می‌توانند اطلاعات یا پایداری سرویس را به خطر بیندازند.

۵. نصب و اجرای واقعی را جداگانه تأیید کنید

پس از رفع علت، فایل‌های تأییدشده و هماهنگ پروژه را به روش انتشار خود منتقل کنید و نصب را از مسیر پشتیبانی‌شده پنل یا محیط همان برنامه انجام دهید. گزارش را تا پایان بخوانید و سپس برنامه را از پنل Restart کنید. صفحه یا API واقعی و لاگ جدید را آزمایش کنید؛ موفقیت نوشتن کش به معنی موفقیت اجرای برنامه نیست.
اگر خطا به ناسازگاری فایل قفل تغییر کرده، راهنمای خطای npm ci را دنبال کنید. برای امکانات میزبانی، صفحه هاست Node.js نت‌آرام و برای مفهوم تنظیم کش، مستندات npm را ببینید.
اشتراک‌گذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله قبلی وجود ندارد.

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام