VSCode不提供防篡改缓存功能,真正起作用的是操作系统级只读权限(Windows属性勾选“只读”或Linux执行chmod 444)和files.readonlyInclude设置;npm缓存目录与文件防篡改无关,强行设只读会导致EPERM/EACCES错误。

VSCode 本身不管理“本地缓存权限”来防文件篡改——它没有这个功能,也不该有。所谓“防止文件被篡改”,真正起作用的是操作系统级文件权限(chmod 444、Windows 属性“只读”)和 VSCode 的只读行为控制(files.readonlyInclude),而不是 npm 或编辑器自身的缓存机制。
npm 缓存目录 ≠ 防篡改缓存,别混淆用途
很多人搜“VSCode 本地缓存权限”,实际是把两个完全无关的事混在一起了:
-
npm cache是 Node.js 工具链用来加速包安装的临时数据,路径由npm config get cache返回,它跟“防文件篡改”毫无关系;强行给它设只读,只会让npm install报EPERM或EACCES - VSCode 的“缓存”指 UI 状态、搜索索引、语法高亮缓存等,存在用户数据目录(如
%APPDATA%\Code\Cache或~/Library/Caches/Code),但这些目录被篡改不会影响源文件安全,也无需手动干预 - 真正需要防篡改的,是你项目里的敏感文件(如
.env、config.production.json),它们不在任何“缓存”里,而在你工作区中
想让特定文件“无法保存修改”,必须设系统级只读
VSCode 的只读响应完全依赖操作系统返回的写权限判断。只要文件本身可写,编辑器再怎么配置都拦不住保存。
- Windows:右键文件 → “属性” → 勾选“只读” → 确定;VSCode 重新打开后右下角显示 Read-only,
Ctrl+S灰掉,强行点保存会弹出Unable to write file 'xxx' (NoPermissions) - macOS/Linux:终端执行
chmod 444 /path/to/.env(注意不是644);ls -l应显示-r--r--r--;Git 会自动重置权限,需同步配git config core.filemode false - 别用
chmod 644或chown root—— 前者仍允许当前用户写,后者会导致其他工具(如dotenv-linter)因权限拒绝运行
配合 files.readonlyInclude 实现工程化只读策略
仅靠系统权限还不够灵活,比如你想让所有 .lock 文件在打开时就自动标记只读,又不想一个个去改属性。这时用 files.readonlyInclude 是正解(files.readonly 已废弃)。
- 在工作区
.vscode/settings.json中添加:
{
"files.readonlyInclude": {
"**/.env*": true,
"**/*.lock": true,
"**/tsconfig.json": true
}
}
**/ 开头,匹配工作区根目录下的任意层级;单星号 * 不递归,会失效Ctrl+S 和编辑器保存按钮,不阻止 File → Save As 或命令行覆盖(echo "x" > .env),所以系统权限仍是底线最常被忽略的一点:VSCode 从不主动“保护”文件内容,它只响应权限信号。如果你发现设置了 readonlyInclude 还能保存成功,第一反应不该是调配置,而是立刻检查 ls -l .env 或 Windows 属性——90% 的情况是文件本身仍可写,编辑器只是“假装拦了一下”。











