背景:
平时,我们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 是独立的,只属于需要它的模块