如何实现一个最简单的包管理系统
综述
本文是在学习python的过程中的一个简单的练手小项目,用于熟悉python内部的一些机制,全部的代码位于 tiny package manager。
整体的逻辑是,当我们在编译一个 yarn 项目的过程中,我们会存在一个
package.json
文件,在文件中我们会声明项目的所有依赖。我们通过该依赖文件来进行一个包依赖分析,判断是否项目是否存在版本冲突,如果可以编译,则给出选择对应的版本。
例如:
---
title: dependencies
---
flowchart LR
jest("jest"):::pink
jest2("0.0.61"):::green
jest1("0.0.71"):::green
express-resource("express-resource-*"):::purple
underscore("underscore-*"):::purple
sji("sji-*"):::purple
express("express-*"):::purple
api-easy("api-easy-*"):::purple
mongoose("mongoose-*"):::purple
indirect01("indirect dependency ..."):::animate
jest --> jest1
jest --> jest2
jest1 --> express-resource --> indirect01
jest1 --> underscore --> indirect01
jest1 --> sji --> indirect01
jest2 --> express --> indirect01
jest2 --> api-easy --> indirect01
jest2 --> mongoose --> indirect01
jest2 --> express-resource
classDef pink 1,fill:#FFCCCC,stroke:#333, color: #fff, font-weight:bold;
classDef green fill: #696,color: #fff,font-weight: bold;
classDef purple fill:#969,stroke:#333, font-weight: bold;
classDef error fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
classDef coral fill:#f9f,stroke:#333,stroke-width:4px;
classDef animate stroke-dasharray: 9,5,stroke-dashoffset: 900,animation: dash 25s linear infinite;