dependencies 和 devDependencies 应该怎么分?
先问一个问题:这个包是在应用运行时需要,还是只在开发、测试和构建阶段使用?这比“重要的放 dependencies,不重要的放 devDependencies”更可靠。
运行时需要的包,放 dependencies
例如 Node.js 服务运行时导入的 express、hono,或应用代码中使用的校验库 zod。这些依赖属于应用的一部分。默认的 npm install 包名会把它们保存到 dependencies。
npm install zod对于前端应用,实际交付物可能是构建后的静态文件,依赖也可能被打包进产物;不能只凭浏览器里有没有 node_modules 来判断分类。
开发、测试、构建工具,放 devDependencies
TypeScript 编译器、代码检查工具和单元测试工具通常放在 devDependencies。-D 是 --save-dev 的简写。分类是项目约定,也会影响省略开发依赖时的安装结果。
npm install -D typescript vitest不要因为构建服务器叫“生产环境”,就认为构建阶段不需要开发依赖。构建工具往往就在 devDependencies 中。
分清构建阶段和运行阶段
静态前端可以在构建阶段安装完整依赖、运行构建,再只发布生成的静态文件。Node.js 服务则可能在运行阶段继续需要生产依赖。应先确认部署平台的构建步骤,再决定是否省略 devDependencies。
npm ci
npm run build对于确实不再需要构建工具的服务运行阶段,可以按部署设计使用 npm ci --omit=dev。不要在尚未构建时就省略构建所需的包。
发现分类不对时,明确重新安装
把包移到正确分类后,检查 package.json 和锁文件的变更,并跑一次真实的构建与启动流程。不要只以开发服务器能启动作为部署正确的证明。
npm install zod --save-prod
npm install -D typescript参考资料
命令行为与框架要求会变化。使用前结合你的项目版本,核对相应官方文档。