package-lock.json 里面 requires 和 dependencies

793 阅读1分钟

背景:

平时,我们install依赖的时候,代码放在了 node_modules里面,但是有一种情况,package A 引用了1.0版本的package C , package B 引用了 2.0版本的package C, 这种情况下,node_modules 里面是怎么处理的

分析

整体的解决方案都在package-lock.json 里面 requires 和 dependencies

dependencies 是指私有的独立的,放在webpack里面的node_moduels里

"webpack": {
      "version": "4.46.0",
      "resolved": "https://npm-team.xxx.com/webpack/-/webpack-4.46.0.tgz",
      "integrity": "sha1-v5tEBOogoHNgXgoBHRiNd8tq1UI=",
      "dev": true,
      "requires": {
        "@webassemblyjs/ast": "1.9.0",
        "@webassemblyjs/helper-module-context": "1.9.0",
        "@webassemblyjs/wasm-edit": "1.9.0",
        "@webassemblyjs/wasm-parser": "1.9.0",
        "acorn": "^6.4.1",
        "ajv": "^6.10.2",
        "ajv-keywords": "^3.4.1",
        "chrome-trace-event": "^1.0.2",
        "enhanced-resolve": "^4.5.0",
        "eslint-scope": "^4.0.3",
        "json-parse-better-errors": "^1.0.2",
        "loader-runner": "^2.4.0",
        "loader-utils": "^1.2.3",
        "memory-fs": "^0.4.1",
        "micromatch": "^3.1.10",
        "mkdirp": "^0.5.3",
        "neo-async": "^2.6.1",
        "node-libs-browser": "^2.2.1",
        "schema-utils": "^1.0.0",
        "tapable": "^1.1.3",
        "terser-webpack-plugin": "^1.4.3",
        "watchpack": "^1.7.4",
        "webpack-sources": "^1.4.1"
      },
      "dependencies": {
        "schema-utils": {
          "version": "1.0.0",
          "resolved": "https://npm-team.xxx.com/schema-utils/-/schema-utils-1.0.0.tgz",
          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
          "dev": true,
          "requires": {
            "ajv": "^6.1.0",
            "ajv-errors": "^1.0.0",
            "ajv-keywords": "^3.1.0"
          }
        }
      }
    },

总结

require 可以被所有其他顶级依赖所共享,而 dependencies 是独立的,只属于需要它的模块

package-lock.json 官方链接