VSCode中强制node_modules只读需配置files.readonlyInclude为{"/node_modules/":true}等路径模式并写入项目.vscode/settings.json,重启生效;该设置仅编辑器层防护,不影响包管理器正常运行。

VSCode 打开 node_modules 文件默认是可编辑的,怎么强制只读?
VSCode 本身不会自动把 node_modules 设为只读,它只看文件系统权限。但你打开一个 node_modules 里的源码(比如 lodash/index.js),改了保存就真会覆盖——这不是“误操作提示”,是直接写入磁盘。
- 最直接的办法:用 VSCode 的
Workbench > Editor > Read Only Editor设置,但它只对当前打开的文件生效,不支持按路径自动匹配 - 真正管用的是靠
files.readonlyInclude配置项,告诉 VSCode:“这些路径下的文件,一律当只读看待” - 注意:这个设置不影响文件系统权限,只是让编辑器 UI 禁用编辑、禁用保存快捷键、显示“Read-only”水印
files.readonlyInclude 怎么配才覆盖 node_modules?
这个配置必须写进工作区设置(.vscode/settings.json),全局设置容易误伤其他项目;而且通配符要写对,否则白配。
- 推荐写法:
"files.readonlyInclude": { "**/node_modules/**": true }—— 用双星号匹配任意层级的node_modules - 别写成
"**/node_modules/*",它漏掉子目录下的文件(比如node_modules/lodash/es/clone.js) - 如果项目用了 pnpm 或 yarn 2+,还可能有
.pnpm或.yarn/cache,建议一并加上:"**/.pnpm/**": true, "**/.yarn/cache/**": true - 重启 VSCode 或重新加载窗口后才生效,改完设置不重载=没改
为什么不用 chmod -R -w node_modules?
给 node_modules 目录加只读权限看似彻底,但实际会破坏包管理器行为。
-
npm install、yarn add这些命令需要往node_modules写文件,权限拒绝会导致安装失败或报错EACCES - 某些库(如
esbuild、webpack)会在node_modules里生成临时构建产物,只读权限会让它们崩溃 - Windows 下
chmod不生效,跨平台方案不能依赖它 - VSCode 的
files.readonlyInclude是纯编辑器层防护,不干扰任何命令行工具
遇到“只读提示没出现”或“还能强行编辑”怎么办?
常见原因不是配置错了,而是 VSCode 没走对配置上下文。
- 检查是否在用户设置里改了
files.readonlyInclude—— 用户级设置会被工作区设置覆盖,必须确保改的是当前项目的.vscode/settings.json - 确认文件确实是通过 VSCode 打开的:比如从终端用
code node_modules/lodash/index.js启动,而不是拖进已运行的窗口 - 某些插件(如
GitLens、Prettier)可能绕过只读限制自动格式化,关掉它们再试 - VSCode 1.85+ 版本修复了
readonlyInclude对符号链接(symlink)的支持,旧版本遇到node_modules是软链时可能失效
关键点就两个:配对路径模式、配在项目级设置里。其它所有绕路方案,要么破坏工作流,要么留缝隙。











