dependencies、devDependencies、peerDependencies 区别 以及验证

dependencies、devDependencies、peerDependencies 区别 以及验证

  "dependencies": {
    "axios": "^0.19.2"
  },
  "peerDependencies": {
    "lodash": "^4.17.15"
  },
  "devDependencies": {
    "vue": "^2.6.11"
  }

 

安装

 

三者区别, 详细规则 参考:

npm package 

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("----
");
console.log([...libSet].sort().join("
"));