英伟达芯片之所以厉害,是因为一方面技术领先,另一方面是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 。它的架构是这样的:
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语言的包管理
- Java语言的包管理器
- Mac的CLI应用管理器brew (AppStreo的Shell命令行形式)
> 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应用管理器
node包管理的演变
1)包名增加ScopeName:最早是全局的,后来为了解决包名污染,增加了Scope,但整体还是比Java简洁。
比如之前发布的 cpmd 工具,地址是 www.npmjs.com/package/cpm…
完全没有Scope的。安装也是直接 npm install cpmd -g,然后运行cpmd -s 'RE*.md' -d backup/就能使用。
如今如果通过npm安装 claude code,需要携带 Package Scope Name,形如:
npm install -g @anthropic-ai/claude-code
它的URL地址是 www.npmjs.com/package/@an… 发布者一看就知道是 anthropic-ai。
2) 安装模式:全局安装、本地安装和用完即走
以 http-server为例,有三种安装形式:github.com/http-party/…
第一种全局安装: 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 |
+-----+-------------------+