开发依赖被认为有害
作者探讨了软件开发中过度依赖外部库带来的问题,指出"依赖地狱"不仅影响生产环境,开发依赖同样会引入风险。文章分析了开发依赖如何导致构建不稳定、安全漏洞扩散以及项目维护负担加重,并提出减少不必要依赖、谨慎选择第三方库等缓解策略。
背景速读
- 本文作者 Henri Bergius 是 NoFlo 可视化编程框架和 Flowhub 的创始人,长期关注 JavaScript 生态系统的依赖管理问题。
- "依赖地狱"(dependency hell)指项目中依赖过多、版本冲突或冗余依赖导致的维护难题。作者认为开发依赖(devDependencies)是这一问题的主要源头。
- 传统上,npm 等包管理器将依赖分为两类:"生产依赖"(runtime dependencies)和"开发依赖"(devDependencies,如测试框架、构建工具)。作者指出,实践中很多本应只是开发依赖的工具(如 TypeScript、ESLint)被错误安装为生产依赖,或者开发依赖本身引入了大量传递依赖,最终污染了最终用户的安装。
- 核心论点:将开发工具与运行时依赖严格分离,并提倡使用全局安装、Docker 镜像或 CI 环境来管理工具链,而非将其作为项目依赖嵌入 package.json。