美文网首页
为什么 npm 要为每个项目单独安装一遍 node_module

为什么 npm 要为每个项目单独安装一遍 node_module

作者: hemiao3000 | 来源:发表于2019-05-06 15:41 被阅读0次

    nodejs 中 package.json 中的依赖必须每个项目都有自己的 node_modules 文件夹,而无法在多个项目之间共用一套 node_modules(不像 Java 中的 Maven 那样共享一个全居仓库)。

    依赖管理是每个现代语言的标配。在 Java 中,maven 同时兼具 依赖管理打包 两大功能,而前段领域这两个功能是两种不同的工具分别提供:

    • npm 负责依赖管理
    • webpack 负责打包

    依赖管理最难解决的问题就是版本问题。库A依赖库B,库C也依赖库B,但是库A跟库C所依赖的库B不是同一版本,如果库B的这两个版本兼容还好,如果不兼容就坑大发了,这是无解的问题。

    • Java 中的 Maven 仓库在开发者电脑上是全局的,所有项目的依赖都集中存放在本地仓库中。每个项目都有 pom.xml 指明依赖本地仓库中的哪些库,如果本地仓库没有会从局域网仓库或网络仓库下载至本地仓库。
      Node 中的依赖如果你不写 package.json,那么依赖的就是全局的库;如果写了package.json,就会把所有依赖下载到 node_modules 文件夹

    Node这种node_modules文件夹的方式有利有弊。

    最明显的坏处是:

    • 每次都需要安装依赖,费流量,网速慢时很费时间
    • 浪费磁盘空间,每个 node_modules 中包含的工具很多,动辄20M

    最明显的好处是:

    • 使用 package.json 安装好之后,node_modules 文件夹中没有版本信息,从而 package.json 可以删掉了。
    • 移动/复制/打包项目比较简单,对于开发、部署都有好处
    • 对于设计 npm 的人来说,这是最省事的包依赖方法。这就好比 maven 安装依赖之后自动将 jar 包安装到项目的 lib 里面。
    • 随意改代码。安装在 node_modules 里面的东西,你可以随便改,无需担心对其它项目的影响。在Java 中使用 maven 管理项目时,如果想要定制某个库,就需要更改这个库的源代码,这时就需要把这个库的源代码复制到项目中,跟 node_modules 是一个道理。npm 的设计者大概认为:前端都是经常修改库的源代码的。

    npm install时,实在嫌慢(比如因为防火墙的原因),可以把 node_modules 一起提交到 git 里去。

    相关文章

      网友评论

          本文标题:为什么 npm 要为每个项目单独安装一遍 node_module

          本文链接:https://www.haomeiwen.com/subject/cparoqtx.html