当前位置: 首页 > 后端技术 > Node.js

通俗地说,devDependencies

时间:2023-04-03 23:48:37 Node.js

为什么纠结,dependencies和devDependencies有什么区别?我使用的包应该放在哪里?上网找资料,咨询大神群。我得到的答案是:把生产环境用的放在dependencies里面;开发环境中使用的放在devDependencies中;这是规范,遵守就一起玩,不遵守就自己玩;emmm……师傅就是喜欢说一些蔡强行听懂的话。但我只想知道:如果我不遵守会怎样?问这个问题的朋友应该已经发现了,不管是放在dependencies还是devDependencies里面,运行npminstall的时候都会安装。没有区别,团队合作是可以的。什么意思只能自己玩?把koa放到devDependencies里面有什么问题吗?把webpack放在dependencies里怎么样?直到准备把自己的开源项目发布到npm上,才明白大神的意思。生产环境还是开发环境?先来看一个问题:小明使用webpack开发web项目的环境是什么?答案是开发环境,但也是生产环境。相对于小明的项目,它是开发环境,但是相对于webpack,它是生产环境。要了解两者在实践中的区别,以开源项目debug项目为例。其package.json相关内容如下:{"dependencies":{"ms":"^2.1.1"},"devDependencies":{"brfs":"^2.0.1","browserify":"^16.2.3","coveralls":"^3.0.2","istanbul":"^0.4.5","karma":"^3.1.4","karma-browserify":"^6.0.0","karma-chrome-launcher":"^2.2.0","karma-mocha":"^1.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.2.0","xo":"^0.23.0"}}使用debug(npminstalldebug)我们在使用debug的时候,需要这样使用(大多数用户使用的方式)手动创建一个项目npminitnpminstalldebug--save查看node_modules目录下的内容--node_modules--debug--ms,可以看到npm只安装了debug和ms(debug的依赖中包含的包)。因为当前环境是相对于debug的生产环境,所以npm只安装debug的生产依赖。这个只有在作为debug项目的开发者或者二次开发者开发debug(gitclonedebug)的时候才会用到。gitclonehttps://github.com/visionmedia/debug.gitcddebugnpminstallviewnode_modules--node_modules--ms--brfs--xo--connect--date-format--......653总的来说,从package可以看出npm安装了dependencies,devDependencies及其依赖。因为当前环境是相对于debug的开发环境,所以npm会安装debug的所有依赖及其生产依赖。对比上面的结果可以看出,一般情况下,开发环境需要安装的依赖远远多于生产环境。非常规玩法(挑战规范,知其所以然)基于以上实际分析,总结出一些玩法:如果所有依赖包都是开放环境下使用的包,不会发布到npm供他人使用(如webpack打包完成Dist的前端项目稍后发布),因为生产环境不再需要依赖这些包了(连nodejs都不需要),这时候你把依赖放在哪里完全由你决定。但是为了避免流言蜚语,应该放在devDependencies里面。如果所有的依赖包都是生产环境要用到的包,不会发布到npm给别人使用。比如web项目中常用的express、koa,都是生产环境运行的必备包。您也可以随意放置它们(惊喜或惊喜)。在生产环境中,在部署生产环境时使用npminstall,所有的包都会以同样的方式安装。下来,不影响生产环境的运行。为了避免流言蜚语,应该放在依赖中。如果既有开发依赖又有生产依赖,不会发布到npm给别人使用。你仍然可以放手。npminstall将安装所有包。但是会有问题。生产环境安装了开发环境包。这个问题会害死人吗?不确定,但该项目有效。为了避免这些额外的消耗,需要区分两个包的位置。在生产环境中使用npminstall--production只会在dependencies中安装依赖。向外转:如果你乐意,也可以将开发依赖包放入devDependencies,生产依赖包放入dependencies,在生产环境中使用npminstall--only=dev,这样就只有devDependencies中的生产依赖了安装。如果是要发布到npm的项目,生产依赖必须放在dependencies中(缺少会报错);开发依赖应该放在devDependencies中,以免浪费用户资源,如果放在dependencies中,用户端会安装很多多余的依赖,浪费很多资源,增加版本冲突的概率。总结简单总结一下,当生产依赖和开发依赖放在不同的位置时,会导致问题:gameplaydependenciesdevDependencies内部项目发布为npm包,规范生产依赖开发依赖--开发依赖放在dependencies生产依赖,开发依赖--浪费生产环境资源,浪费大量用户资源。生产依赖放在devDependencies-productiondependencies中,开发依赖浪费生产环境资源,部署方式奇葩。用户无法正常运行。相反,开发依赖放在生产依赖上。部署方式奇葩,浪费大量用户资源,用户无法正常运行。可见,在内部项目中,只要团队能发挥好(不关心生产环境的资源浪费),不需要太在意规范。但是如果是要发布到npm的项目,甚至是开源项目,就要特别注意了。你可以乱来,但你给用户的应该是最好的。