npm 包命名规则 — 速查手册

本参考补充 Lesson 0001 中关于 npm 包名的简要提及。VS Code 扩展也是 npm 包——发布扩展前必须遵守这些规则。

核心结论

"全小写"是强制规则——npm registry 拒绝含大写字母的新包。
"短横线分隔"是社区约定——下划线 _ 和点 . 在包名内部也合法。

强制规则(npm registry 硬约束)

规则详情
全部小写不允许任何大写字母(A-Z
最大 214 字符含 scope 前缀(@scope/ 计入长度)
不能以 ._ 开头例外:scoped 包允许(@scope/_name
不能有空格任何位置都不允许
只能用 URL 安全字符~'!*() 等特殊字符被禁止
不能用 Node.js 核心模块名httpstreamfs 等保留名称

合法性与示例

包名新包可用?旧包可用?原因
claude-context-bar完全合规
under_score下划线不在开头,合法
example.com点不在开头,合法
@scope/_hiddenScoped 包可 _ 开头
MyPackage大写字母——新包禁止
_private_lib非 scoped 包不能 _ 开头
.hidden-pkg非 scoped 包不能 . 开头
my package空格在任何情况下非法

为什么社区压倒性选择短横线?

短横线 - 不能出现在 JavaScript 标识符中(它是减号运算符)。因此 npm 包名 my-package 和 JS 变量名 myPackage 永不冲突——天然命名空间分离。

如果包名叫 under_score,用户会困惑于 JS 中是写 under_score 还是 underScore。短横线消除了这种歧义。

VS Code 扩展的特殊性

VS Code 扩展发布时,publisher + name 共同构成唯一标识:

"publisher": "ezoosk"
"name": "claude-context-bar"

// Marketplace 上的唯一 ID:ezoosk.claude-context-bar

包名会同时出现在 npm registry 和 VS Code Marketplace 两条路径中。短横线命名在两个生态中都无摩擦。

校验工具

npm 使用 validate-npm-package-name 校验所有包名。返回两个关键字段:

字段含义
validForNewPackages你今天能发布这个名称吗?
validForOldPackages历史上是否曾经被允许?(遗留包可能还在用)