Sửa lỗi 'ENOENT: no such file or directory' trên Windows do đường dẫn quá dài (> 260 ký tự)

beginner🪟 Windows2026-04-15| Windows 10/11, Node.js, npm, Git for Windows, Python

Error Message

ENOENT: no such file or directory (path too long > 260 chars)
#windows#đường dẫn#long-path#nodejs#npm

TL;DR — Sửa Nhanh

Windows giới hạn đường dẫn file ở 260 ký tự (giới hạn MAX_PATH). Một lệnh duy nhất có thể khắc phục toàn hệ thống — chạy PowerShell với quyền Administrator:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f

Khởi động lại. Sau đó, với Node.js/npm, chạy thêm:

npm config set long-paths true

Nếu bạn đang dùng máy công ty nơi Group Policy có thể ghi đè thay đổi registry, hãy chuyển sang Fix 2.

Nguyên Nhân Thực Sự

MAX_PATH là di sản từ thời MS-DOS. Windows kế thừa giới hạn 260 ký tự từ Windows 95 và giữ nguyên — suốt nhiều thập kỷ — để tránh làm hỏng các phần mềm cũ đã mã hóa cứng con số đó.

Windows 10 phiên bản 1607 đã âm thầm bổ sung hỗ trợ đường dẫn dài hơn. Điểm mấu chốt: tính năng này bị tắt theo mặc định. Bạn phải tự kích hoạt.

Những trường hợp thường gặp lỗi này:

  • Cấu trúc lồng sâu trong node_modules — npm v2/v3 từng lồng các package 10+ cấp, dễ dàng đẩy đường dẫn vượt 300 ký tự
  • Repo được clone vào đường dẫn như C:\Users\johndoe\Documents\Work\Clients\AcmeCorp\2024\frontend\ (đã 65 ký tự trước khi có bất kỳ file nào)
  • Python virtualenv nằm bên trong thư mục dự án đã có đường dẫn dài
  • Build tool như webpack hoặc Vite tạo file tạm với tên hash nội dung dài
  • Docker Desktop trên Windows, nơi đường dẫn mount WSL2 cộng thêm một lớp độ dài nữa

Fix 1 — Bật Long Paths qua Registry (Nhanh Nhất)

Mở PowerShell với quyền Administrator và chạy:

# Bật hỗ trợ đường dẫn dài
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1

# Xác nhận đã được set
Get-ItemPropertyValue -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled"
# Kết quả mong đợi: 1

Khởi động lại sau bước này — cài đặt chưa có hiệu lực cho đến lần khởi động tiếp theo.

Fix 2 — Bật Long Paths qua Group Policy (Máy Được Quản Lý)

Thay đổi registry trên máy công ty thường bị ghi đè khi đăng nhập lại. Group Policy mới là công cụ phù hợp ở đây:

  • Nhấn Win + R, gõ gpedit.msc, nhấn Enter
  • Điều hướng đến: Local Computer Policy → Computer Configuration → Administrative Templates → System → Filesystem
  • Double-click Enable Win32 long paths
  • Chọn Enabled, nhấn OK
  • Khởi động lại

Lưu ý: gpedit.msc chỉ có trên Windows Pro và Enterprise. Windows Home? Dùng Fix 1 thay thế.

Fix 3 — Dành Riêng cho npm / Node.js

Chỉ fix ở cấp OS đôi khi chưa đủ. npm có flag riêng của nó:

# Đặt toàn cục
npm config set long-paths true

# Xác nhận
npm config get long-paths
# Kết quả mong đợi: true

Không có quyền admin? Di chuyển dự án về gần thư mục gốc của ổ đĩa hơn. So sánh sự khác biệt:

# 97 ký tự trước khi đến được src/:
# C:\Users\john\Documents\work\clients\acme-corp\projects\frontend\app

# 16 ký tự — còn rất nhiều chỗ:
# C:\dev\acme-frontend

Thay đổi đơn giản này thường loại bỏ được lỗi mà không cần chỉnh bất kỳ cài đặt hệ thống nào.

Fix 4 — Bật Hỗ Trợ Đường Dẫn Dài cho Git trên Windows

Git duy trì cài đặt độ dài đường dẫn riêng, độc lập với Windows:

# Bật toàn cục
git config --global core.longpaths true

# Hoặc chỉ cho repo hiện tại
git config core.longpaths true

# Xác nhận
git config --global --get core.longpaths
# Kết quả mong đợi: true

Bỏ qua bước này và việc clone các monorepo sẽ tiếp tục thất bại ngay cả sau khi đã fix ở cấp OS.

Fix 5 — Ánh Xạ Đường Dẫn Dài Thành Ký Tự Ổ Đĩa

Khi bạn không thể thay đổi cấu trúc đường dẫn, hãy giả lập một đường dẫn ngắn. Lệnh subst ánh xạ bất kỳ thư mục nào thành một ký tự ổ đĩa:

# Ánh xạ đường dẫn dự án dài thành ổ Z:
subst Z: "C:\Users\yourusername\Documents\Projects\company\repo"

# Làm việc từ Z:\ thay thế
cd Z:\
npm install

Ánh xạ này sẽ mất sau khi khởi động lại. Để giữ lại, thêm lệnh subst vào script khởi động hoặc một scheduled task được đặt để chạy khi đăng nhập.

Kiểm Tra Kết Quả

Trước khi chạy lại quá trình build, hãy xác nhận cài đặt đã thực sự có hiệu lực:

# Kiểm tra giá trị registry (PowerShell)
(Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem").LongPathsEnabled
# Kết quả mong đợi: 1

# Tạo thư mục thử nghiệm với tên 250 ký tự
$longPath = "C:\" + ("a" * 250)
New-Item -ItemType Directory -Path $longPath -ErrorAction SilentlyContinue
if (Test-Path $longPath) {
    Write-Host "Long paths work!"
    Remove-Item $longPath
} else {
    Write-Host "Long paths still NOT working — did you reboot?"
}

Nếu bài kiểm tra thành công, hãy chạy lại lệnh gốc bị lỗi (npm install, git clone, script build của bạn). Lỗi ENOENT sẽ không còn nữa.

Không Có Quyền Admin? Đây Là Những Gì Vẫn Có Thể Làm

Quyền admin là bắt buộc cho Fix 1 và Fix 2 — nhưng bạn vẫn còn lựa chọn:

  • Di chuyển dự án về đường dẫn ngắn hơn — lựa chọn đáng tin cậy nhất, không cần quyền gì
  • Dùng WSL2 — hệ thống file Linux bên trong WSL không có giới hạn 260 ký tự. Chạy các lệnh Node.js/npm từ WSL và truy cập file dự án qua /mnt/c/...
  • Dùng flag --prefix của npm để cài package vào đường dẫn ngắn hơn
  • Hỏi bộ phận IT — bật long paths chỉ là một dòng thay đổi registry, không ảnh hưởng đến bất cứ thứ gì khác, và chỉ mất chưa đến một phút để giải thích

Tóm Tắt Nhanh

# 1. Bật long paths (Admin PowerShell)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1

# 2. npm long paths
npm config set long-paths true

# 3. Git long paths
git config --global core.longpaths true

# 4. Khởi động lại

Related Error Notes