npm3 与 npm2 相比有什么改进?

请直接看官网英文文档,说的很明白的了:
npm v3 Dependency Resolution

如果要我简单来说的话,就是 npm3 和 npm2 对于依赖的处理不一样了

npm2所有项目依赖是嵌套关系,而npm3为了改进嵌套过多、套路过深的情况,会将所有依赖放在第二层依赖中(所有依赖只嵌套一次,彼此平行,也就是平铺的结构)

下面我来搬个砖,简单翻译一下:

举个栗子:

有一个模块A,其依赖于B:


现在有一个app应用依赖于A,执行:

npm install

会自动安装所有依赖。

npm3 会将模块A 和模块B 安装到同一 node_modules 目录下,二者是同级的;
而npm2 依然会在node_modules 中安装A,但是会将B 安装到 A里面的node_modules, 也就是 A 和 B 是嵌套关系:

现在假如 app 需要另一个模块C,并且 C 是依赖于另一个版本的B:

那么问题来了,在npm2中,由于是层层嵌套的结构,所以继续嵌套即可,但是npm3如何处理呢?已经有一个 B v1.0版本了,又不能相同目录下再来一个 B v2.0 ,那么变通一下,将 B v2.0 嵌套在 C 中即可:

在终端中,文件树长得像下面这样:

由于npm3 的改变,怕分不清彼此依赖了吗?
没关系,执行 npm ls 依然可以看到模块间彼此依赖关系:

如果你想查看最浅层的依赖关系,只需要:

  npm ls --depth=0

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 89,700评论 13 124
  • 题目1: 如何全局安装一个 node 应用? Node模块采用npm install命令安装。 每个模块可以“全局...
    萧雪圣阅读 1,154评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 140,112评论 20 594
  • 1. 如何全局安装一个 node 应用? 每个模块可以“全局安装”,也可以“本地安装”。“全局安装”指的是将一个模...
    进击的前端_风笑影阅读 33评论 0 0
  • 主啊!我的祈祷你是否听见 身边的天使与魔鬼是否还在交战 我的泪水是否依旧在落 窗外的雨是否没有停过 主啊!你是否可...
    m沐心x阅读 42评论 0 4