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
--prefixcủ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

