生态:开发语言的第三方包管理

0 阅读3分钟

英伟达芯片之所以厉害,是因为一方面技术领先,另一方面是CUDA生态。开发语言也是类似的道理,一方面要技术先进,比如性能优异、语法简洁等,另一方面也是生态。何谓生态?开发者开发一个应用,往往并不需要从零开始,而是需要站在巨人的肩膀上,借用很多包,有官方的SDK包、有第三方的包、还有自建的包,其中第三方的包就是生态,它是一个marketplace,上面有发布者和消费者。官方维护marketplace,能让这个语言的生命力更顽强;发布者发布package,能构建社区影响力,或收取一定的费用;消费者使用第三方包,能极大提升开发效率,可能为此支付一些费用。

node的包管理器

当下流量的AI Agent,无论是Claude、Codex、OpenClaw,还是 Pi,它们都是基于node体系的。node体系的包管理器是npm。我们会自然想到 node package manager,但npm 的创始人 Isaac Z. Schlueter 曾明确表示,这个项目的名字致敬了 Bash/Linux 里的 pm(Package Manager)命令。 因为它是为 Node 写的,所以最终叫 npm 。它的架构是这样的:

image.png

npm命令:

npm config set registry https://registry.npmjs.org/
npm publish
npm install @username/package-name

结构很清晰。

其他语言的包管理器

实际上Python语言、Java语言、Mac命令brew和Linux的yum,它们的作用都类似iPhone的AppStore。

  • Python语言的包管理

image.png

  • Java语言的包管理器

image.png

  • Mac的CLI应用管理器brew (AppStreo的Shell命令行形式)

image.png

> echo $HOMEBREW_API_DOMAIN

> nano ~/.zshrc

export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api"
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"

> source ~/.zshrc
> brew install osquery #安装前,先配置国内镜像,不然安装特别慢
  • Linux的CLI应用管理器

image.png

node包管理的演变

1)包名增加ScopeName:最早是全局的,后来为了解决包名污染,增加了Scope,但整体还是比Java简洁。

比如之前发布的 cpmd 工具,地址是 www.npmjs.com/package/cpm… 完全没有Scope的。安装也是直接 npm install cpmd -g,然后运行cpmd -s 'RE*.md' -d backup/就能使用。

image.png

如今如果通过npm安装 claude code,需要携带 Package Scope Name,形如:

npm install -g @anthropic-ai/claude-code

image.png

它的URL地址是 www.npmjs.com/package/@an… 发布者一看就知道是 anthropic-ai。

2) 安装模式:全局安装、本地安装和用完即走

http-server为例,有三种安装形式:github.com/http-party/…

image.png

第一种全局安装: npm install -g http-server,携带-g参数,安装完后,能在Shell里面直接运行命令行,诸如 http-server。在Mac下,通常被安装到 /usr/local/lib/node_modules/http-server 目录,且可执行命令会被软连到 /usr/local/bin/http-server

第二种是局部安装: npm install http-server,没有携带-g参数,安装完后,只能通过npx http-server方式运行。在Mac下,通常被安装到 ~/node_modules (用户目录下),而非当前目录(命令运行时所在的目录)。

第三种是空中安装(用完即走):npx http-server,它会自动识别,如果本地没有 http-server,就会自动拉取,用完了,会自动删除。

node常见包举例

1)http-server: 快速启动一个HTTP服务器,把指定的本地目录,发布为Web访问 github.com/http-party/…

2)json-server:把本地的json文件,发布为json请求/响应报文。更关键的是,它支持读写,也就是说它能轻松的做一个Mock服务器。 github.com/typicode/js…

3)http-proxy: 用node做一个轻量的HTTP代理服务器,实现请求转发 github.com/http-party/…

4)osquery: 用SQL语句查询系统信息,诸如侦听端口。 www.npmjs.com/package/osq…

命令行安装:brew install osquery (请提前设置国内镜像,见前面),安装后运行osqueryi(尾巴有个i表示交互命令):

> osqueryi
Using a virtual database. Need help, type '.help'

osquery> SELECT uid, name FROM listening_ports l, processes p WHERE l.pid=p.pid limit 3;
+-----+-------------------+
| uid | name              |
+-----+-------------------+
| 502 | replicatord       |
| 502 | identityservicesd |
| 502 | identityservicesd |
+-----+-------------------+