npm install --offline 报 ENOTFOUND 是因未指定 --cache 路径,npm 仍尝试读取默认缓存目录(如 /tmp/xxx/index.json)而该路径在离线机上不存在;必须显式用 --cache ./npm-cache 指向完整拷贝的缓存目录,且需匹配 Node/npm 版本、避免跨平台拷贝,并配合 --no-package-lock 跳过 integrity 校验。

npm install --offline 为什么还是报 ENOTFOUND?
因为 --offline 只是关网络,不指定缓存路径时,npm 仍会尝试读默认缓存(比如 /tmp/xxx),而离线机上那个路径根本不存在,直接抛 ENOENT: no such file or directory, open '/tmp/xxx/index.json'。不是缓存没用,是 npm 根本没找到它。
-
--cache ./npm-cache必须显式指定,且路径要相对于当前项目根目录(或绝对路径) - 缓存目录必须完整拷贝,不能只拷
_cacache子目录——index.json、content-v2、tmp都要保留 - Windows 和 macOS/Linux 缓存不互通,跨平台拷贝后
npm cache verify会失败
VSCode 终端里 npm 命令找不到缓存?检查 shell 环境继承
VSCode 内置终端(尤其 PowerShell)默认不继承系统级 npm 配置,即使你改了全局 npm config set cache,终端里也看不到效果。
- 在 VSCode 设置中搜索
terminal.integrated.defaultProfile.windows,手动设为cmd或bash,避免 PowerShell 的 PATH 隔离问题 - 更稳妥的做法:不用全局配置,改用
npx --no-install npm install --cache ./npm-cache --offline --no-package-lock,绕过 PATH 查找和配置继承 - 如果用的是 VSCode Remote-SSH 连内网服务器,确保远程机器的
$HOME/.npmrc里没写死 registry 地址(否则--offline也会被绕过)
package-lock.json 在离线时为什么总校验失败?
integrity 字段是 npm 从 registry 拉下来的哈希值,断网后无法验证,npm install 默认会拒绝安装——哪怕 tarball 已在缓存里。
- 加
--no-package-lock是最直接的解法:跳过 lock 文件生成和校验 - 若项目强依赖 lock 文件(如 CI 流水线),可提前在有网机器上运行
npm install --no-save生成 lock,再把整个node_modules+package-lock.json一起拷进离线机,用npm ci --no-optional --ignore-scripts安装 - 注意:
npm ci不读package.json,只认package-lock.json,所以离线机上不能改依赖版本
Node 命令在 VSCode 里报 'not recognized'?PATH 注入要分两层
终端能跑 node -v,但调试器或任务脚本里报错,说明 VSCode 的不同子系统读取环境变量的路径不一致。
- 终端层面:配
"terminal.integrated.env.windows": { "PATH": "C:\Program Files\nodejs;${env:PATH}" }(反斜杠双写) - 调试层面:在
.vscode/launch.json里加"runtimeExecutable": "C:\Program Files\nodejs\node.exe" - 任务脚本层面(tasks.json):在
options.env中重复注入 PATH,否则npm run build可能失败
真正容易被忽略的点是:缓存预热时用的 Node/npm 版本,必须和离线机上完全一致。v18.19.0 写的缓存,v20.15.0 读可能报 ERR_CACHE_VERSION_MISMATCH——这个错误不提示具体原因,只显示“cache is corrupted”,得靠 npm cache clean --force 清掉重来。











