为何需区分dependencies与devDependencies?Babel自动runtime能否替代?
关于dependencies和devDependencies的区别纠正
你的结论是错误的,这两个区块的依赖定位有明确本质差异,并非没有区别:
核心定位差异
dependencies是项目生产环境运行时必须的依赖,比如React、Vue这类业务代码依赖的框架库,部署到生产环境后必须存在,否则项目会运行报错。devDependencies是开发/构建阶段专用的工具类依赖,比如Webpack、Babel、ESLint这类,它们只在本地开发编译、打包过程中发挥作用,最终构建出的生产代码里不会包含这些工具本身,生产环境部署时不需要安装它们。
为什么你移到devDependencies后项目仍能正常运行?
本地开发时,npm/yarn会默认安装所有依赖(不管是dependencies还是devDependencies),所以本地构建、启动自然没问题。但如果是生产环境部署,通常会执行npm install --production或yarn install --production,此时只会安装dependencies里的包,devDependencies会被忽略。而Webpack作为打包工具,它的工作已经在构建阶段完成,不会出现在最终的生产代码里,所以即使生产环境没装Webpack,项目也能正常运行——这恰恰说明Webpack本来就该放在devDependencies里,而非你的结论里“放在哪个区块没区别”。关于babel的
"runtime": "automatic"
这个配置和依赖分区无关,它的作用是让Babel自动引入@babel/runtime中的辅助函数,避免重复打包这类代码以减小构建体积,管控的是Babel编译时的辅助代码引入逻辑,和Webpack这类工具依赖的分区没有任何关系。你的项目示例的正确做法
把Webpack放在devDependencies是完全正确的,属于工具依赖的合理归类;移到dependencies虽然本地能运行,但会导致生产环境安装不必要的包,增加部署体积和安装时间,完全没必要。
内容的提问来源于stack exchange,提问作者Екатерина
相关产品推荐
相关产品推荐

