使用Docker为何仍需本地安装yarn、npm等依赖?
你观察到的这种情况很常见,核心原因大多是开发阶段的效率、体验需求和Docker特性之间的权衡,具体来说有这几点:
本地文件系统的性能优势
开发时常用的yarn run watch这类监听文件变化的命令,在本地执行比在容器里跑效率高得多。尤其是在Windows或macOS上使用Docker Desktop时,容器挂载本地目录的IO性能有明显延迟,代码修改后容器内的watch可能要等好几秒才触发编译,严重影响开发节奏。本地执行的话,文件变化能立刻被捕获,编译反馈更快。依赖缓存的复用
本地安装依赖后,node_modules直接存在本地磁盘,下次启动项目不用重新下载依赖。如果把yarn install放进Dockerfile,每次构建镜像都要重新拉取所有依赖,不仅慢,还浪费网络资源——尤其是依赖包体积大、数量多的项目,这个差异会非常明显。IDE工具链的兼容性
现在大部分开发者的IDE都会集成ESLint、Prettier、类型检查这类工具,这些工具需要本地有Node.js环境才能实时运行,给代码错误提示、自动格式化。如果完全依赖容器,IDE没法直接调用容器里的工具,开发体验会大打折扣,比如写代码时看不到实时的语法错误提示。调试与脚本执行的便利性
开发过程中经常需要跑一些临时脚本,比如单元测试、生成文档、代码格式化等,本地直接敲yarn test比先进入容器再执行命令要方便得多,节省了来回切换的时间。团队习惯与历史遗留
很多项目是先有了本地开发流程,之后才引入Docker用于部署或统一环境。团队已经习惯了本地装依赖的方式,或者部分成员更偏好本地开发的灵活性,就保留了这种混合模式。
当然,这并不意味着不能把所有命令都放进Docker里——生产环境肯定会把依赖打包进镜像,完全不需要本地安装。但开发阶段,为了兼顾效率和体验,很多团队会选择本地装工具链,用Docker来跑服务端或数据库这类环境复杂的组件,达到平衡。
内容的提问来源于stack exchange,提问作者Richard

