NPM 如何发布和使用带范围(scope)的包?
您知道所有 npm 包都有一个名称。如果您要给自己的包,起一个有「寓意」的名字,会发现绝大多数单词
/短语已被占用,即使没有真正的内容,这真是无可奈何的事儿。如何解决这一困境呢?你可以发布带作用域/范围(scope)的包。本文就如何发布,做简单探讨。
如何发布带范围(scope)的包
如果要发布带范围(scope)的包,首先得拥有 scope(即:新建组织「New Organization」);而这个组织名,得满足几个条件:1,没有被使用;2,在 Github 上拥有这个 Organization。因此,大致过程如下:
- 在 Github 注册组织(org),比如:
@vue
、@types
、@vitejs
、@nicelinks
; - 注册 npm 账号,并在 npm Create a New Organization (有付费、有免费);
- 创建项目并做适当的配置,详情可参见: Creating and publishing private packages ;
- 完成代码编写,并测试无误后,使用
npm publish
命令进行发布;
需要说明的是,Github Org,测试了很多能够想到简单的「名字」,均已被占用。
当然,如果您已有项目,可直接将 scope 与 registry 关联:
npm login --registry=https://www.npmjs.com/ --scope=@your-scope-name
Note:Scopes have a many-to-one relationship with registries: one registry can host multiple scopes, but a scope only ever points to one registry. Once a scope is associated with a registry, any
npm install
for a package with that scope will request packages from that registry instead. Anynpm publish
for a package name that contains the scope will be published to that registry instead. —— Fromnpm scope。
scope 包的必要性
除了命名的原因外,一定要 scope 包,除了 @types/[PackageName]
这种,想不到更多了;但 Definitely Typed
这种,也不一定要发布一个 scope 包(况且权限不在手,颇为麻烦);完全可以基于 npm alias 来解决,比如:
npm i @types/quickapp@npm:quickapp-interface —save-dev
备注:用这种方式,npm 版本需要大于 6.9.0
(对应 node.js
为 12.0
),否则会报如下错误:
> npm ERR! Invalid dependency type requested: alias