原文链接: dependencies、devDependencies、peerDependencies 区别 以及验证
发个简单的包
"dependencies": {
"axios": "^0.19.2"
},
"peerDependencies": {
"lodash": "^4.17.15"
},
"devDependencies": {
"vue": "^2.6.11"
}
安装
三者区别, 详细规则 参考:
dependencies、devDependencies、peerDependencies、optionalDependencies 区别
dependencies:
npm i -S
应用正常运行所必须, 在其他人安装你发布的包时, 会将这些依赖也安装
devDependencies:
npm i -D
开发必须, 本地开发时需要, 其他人在使用时不会安装这些依赖, 毕竟用户只需要用就行了............
peerDependencies:
同等依赖, 貌似要手动添加和安装, 比如我写的插件依赖HTMLwebpackPlugin, 但是我包里并没有直接require, 但是使用我的插件时必须用到HTMLwebpackPlugin, 这时候就可以在peerDependencies中添加HTMLwebpackPlugin, 如果其他人使用的时候没有安装HTMLwebpackPlugin则npm会有警告
再看下nodo_modules中的包, 居然有很多, so.... 这个应该就是子包中含有dependencies, 可以用代码进行验证!
少了一个插件的包, 因为这个插件是在根package中
依次遍历node_modules 中的每个包的依赖, 将其中的dependencies取出来放到数组中, 最后用set去重, 并按照字典序输出
const path = require("path");
const fs = require("fs");
const root = path.resolve("./node_modules");
let libList = []
const files = fs.readdirSync(root);
for (let f of files) {
var fileStat = fs.statSync(path.join(root, f));
if (fileStat.isDirectory()) {
let package = require(path.join(root, f, "package.json")) || {};
let dependencies = Object.keys(package.dependencies || {});
libList = libList.concat(dependencies);
}
}
const libSet = new Set(libList);
console.log("----\n");
console.log([...libSet].sort().join("\n"));