Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【检查项目存在相同依赖包的不同版本的数量】 #68

Open
kind-hearted opened this issue Dec 26, 2018 · 0 comments
Open

Comments

@kind-hearted
Copy link
Owner

const dependencies = require('./package-lock.json').dependencies
const array = []
const map = {}
const repeats = []

for (let key in dependencies) {
  const dep = dependencies[key]

  dep.name = key
  dep._parent = null

  if (!dep.dev) {
    array.push(dep)
    map[key] = {
      deps: [dep],
      versions: [dep.version],
      isPush: false
    }
  }
}

let dep = array.shift()

while (dep) {
  const subDependencies = dep.dependencies

  for (let key in subDependencies) {
    const subDep = subDependencies[key]

    subDep.name = key
    subDep._parent = dep
  
    if (!subDep.dev) {
      if (map[key]) {
        const versions = map[key].versions
        const deps = map[key].deps

        if (!map[key].isPush) {
          let cur = deps[0]._parent
          let str = key + versions[0]

          while(cur) {
            str = str + ' <-- ' + cur.name + cur.version
            cur = cur._parent
          }

          repeats.push(str)
          map[key].isPush = true
        }

        if (versions.indexOf(subDep.version) === -1) {
          versions.push(subDep.version)
          deps.push(subDep)

          let cur = subDep._parent
          let str = key + subDep.version

          while(cur) {
            str = str + ' <-- ' + cur.name + cur.version
            cur = cur._parent
          }

          repeats.push(str)
        }
        
      } else {
        map[key] = {
          deps: [subDep],
          versions: [subDep.version],
          isPush: false
        }
      }

      array.push(subDep)
    }
  }

  dep = array.shift()
}

repeats.sort(function compare(a, b) {
  if (a < b ) {
    return -1
  }

  if (a > b ) {
    return 1
  }

  return 0;
})

console.log(JSON.stringify(repeats))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant