ParsePackageJsonWithYarnLock 借助yarn.lock文件解析pacakge.json
(pkgjson *PackageJson, yarnlock map[string]*YarnLock)
| 78 | |
| 79 | // ParsePackageJsonWithYarnLock 借助yarn.lock文件解析pacakge.json |
| 80 | func ParsePackageJsonWithYarnLock(pkgjson *PackageJson, yarnlock map[string]*YarnLock) *model.DepGraph { |
| 81 | |
| 82 | root := &model.DepGraph{Name: pkgjson.Name, Version: pkgjson.Version, Path: pkgjson.File.Relpath()} |
| 83 | |
| 84 | _dep := _depSet().LoadOrStore |
| 85 | |
| 86 | // 记录依赖 |
| 87 | for _, lock := range yarnlock { |
| 88 | dep := _dep(lock.Name, lock.Version) |
| 89 | for name, version := range lock.Dependencies { |
| 90 | sub := yarnlock[npmkey(name, version)] |
| 91 | if sub != nil { |
| 92 | dep.AppendChild(_dep(sub.Name, sub.Version)) |
| 93 | } |
| 94 | } |
| 95 | } |
| 96 | |
| 97 | for name, version := range pkgjson.Dependencies { |
| 98 | lock := yarnlock[npmkey(name, version)] |
| 99 | if lock != nil { |
| 100 | root.AppendChild(_dep(lock.Name, lock.Version)) |
| 101 | } else { |
| 102 | root.AppendChild(&model.DepGraph{Name: name, Version: version}) |
| 103 | } |
| 104 | } |
| 105 | |
| 106 | for name, version := range pkgjson.DevDependencies { |
| 107 | lock := yarnlock[npmkey(name, version)] |
| 108 | if lock != nil { |
| 109 | dep := _dep(lock.Name, lock.Version) |
| 110 | devdep := _dep(lock.Name, lock.Version, "dev") |
| 111 | for _, c := range dep.Children { |
| 112 | devdep.AppendChild(c) |
| 113 | } |
| 114 | root.AppendChild(devdep) |
| 115 | } else { |
| 116 | root.AppendChild(&model.DepGraph{Name: name, Version: version, Develop: true}) |
| 117 | } |
| 118 | } |
| 119 | |
| 120 | return root |
| 121 | } |
no test coverage detected