🗒️贡献 package
来自官网,向 registry 贡献 packages
1. 创建和发布
1.1 创建 package.json
package.json发布到 registry 里的 package 必须包含 package.json 文件。
执行 npm init,创建一个新的 package.json 文件。
{
"name": "hello-world",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}name(必填):package 的名字,必须是一个小写的单词,可以包含连字符-和下划线_需唯一、有描述性
需符合 npm 政策指南(比如不冒犯、不侵权商标)
version(必填):格式必须是x.x.x,遵循 semantic versioning rulesdescription(建议有):便于在 npm website 更容易被搜到author:格式Your Name <email@example.com> (http://example.com)email 和 website 都是可选的
从当前目录中提取的默认值有:
name当前目录名version总是 "1.0.0"description来自 README 的信息,或者一个空字符串 ""scripts: 默认情况下创建一个空 test 脚本keywords空author空license是 "ISC"bugs来自当前目录的信息,如果存在的话homepage来自当前目录的信息,如果存在的话
也可以为 init 命令设置默认 config options,比如:
关于 npm init 的高级用法,可查阅 init-package-json GitHub repository。
1.2 创建 Node.js 模块
Node.js modules 是一种可以发布到 npm 的 package。
运行
npm init创建一个package.json文件对于 unscoped modules,运行
npm init对于 scoped modules,运行
npm init --scope=@scope-name
创建一个当别人用这个 module 时要 load 的文件
运行
npm publish把 package 发布到 npm测试 module
在一个项目里
npm install <your-module-name>创建
test.js,在里面 require 那个 module 并调用其方法运行
node test.js
1.3 创建 README.md
README.md建议 package 的目录包含一个 README 文件,一是方便其他人在 npm 上找到该 package,还能提供良好的使用体验。通常,README 文件包含与 install, configure 和 use 相关的说明以及其它有用信息。README 文件会显示在 package 的页面上。
npm package README 文件必须位于 package 的根目录中。
当我们发布新版本的 package 时,README 文件只会在 package 页面上更新。要更新 README 文件的内容,可运行以下命令:
1.4 发布 packages
unscoped public packages:只能通过 package name 来引用
scoped public packages:在 user 或 organization 的命名空间中公开 package 的代码
将 user-scoped 或者 organization-scoped 的公共 packages 发布到 npm registry
private packages:与一组特定的用户或团队共享 packages 代码
将 user-scoped 或者 organization-scoped 的私有 packages 发布到 npm registry
发布要求:
unscoped public
✔️
--
user-scoped public
✔️
--
organization-scoped public
✔️
✔️
user-scoped private
✔️ 付费
--
organization-scoped private
✔️
✔️ 付费
步骤:
运行
npm init创建一个package.json文件创建一个
README.md文件检查 package 的内容,不要有敏感信息和不必要的信息
测试 package:安装成功后,在代码里
require("my-package")测试下运行
npm publish发布 package登录 user account
npm loginnpm whoami
登录 organization
2. 更新和管理
更新和管理已发布的 packages。
2.1 更新 visibility
我们只能更改 scoped package 的可见性(visibility),但不可以更改 unscoped package 的可见性。
将 public 变 private(变成 private 要收费)
如果想要限制 public package 的 access 和 visibility,就可以将其变为 private
当将 public package 设为 private 时
其 access 会立即更新
而 visibility 需要过几分钟后才能生效(它会从网站上 removed)
将 private 变 public
可以通过 website,可以通过 command line。
2.2 更新 version
更改
package.json里的版本号运行
npm version <update_type>,其中<update_type>是语义版本控制的发布类型,比如 patch, major, minor运行
npm publish去网站上查看版本是否生效
2.3 unpublish 取消发布
unpublish 是从 registry 中完全删除 package,其他用户就不能再 install 它了。
unpublish 需要满足的条件:
npm Public Registry 里没有其他 packages 依赖它
对于新创建的 packages,只要满足这条就可以在发布后的 72 hours 内随时 unpublish
上周的下载量少于 300 次(超过 72 小时的)
有一个 owner/maintainer(超过 72 小时的)
可以在网站上操作,也可以用 CLI。
一旦 unpublish 了,那么 24 小时之内再不能以相同的名字 republish 了。所以如果是不小心 unpublish 的,那么可以换个不同的名字或版本号。
unpublish
不小心发布了些东西
想测试 npm
发布了不打算 public 的内容
想 rename package(只能用新名字 re-publish)
deprecate
不想再维护 package,但用户依然能 install 它
npm Public Registry 里还有其它 package 依赖了它
不满足 unpublish 条件的,可以考虑 deprecate 它
2.4 deprecate 弃用
如果不想再维护 package 了,或是想鼓励用户更新到一个新的或者不同的版本,那我们可以弃用(deprecate)它。弃用 package 或其某个版本了之后,当用户在 install 它时会在终端打印一条消息。
弃用的 warning 或 message 可以写任何东西,比如鼓励用户更新到特定版本或替代 package。(unpublish 时没有 warning)。
可以在网站上操作,也可以在命令行。
如果不想再维护 package,还想把它从自己的 user profile 中删除(remove)了,但还有其他用户在依赖这个 package,那我们可以将它转移到 @npm 这个 user account 上。一旦转移过去,我们再没法 update 它了。
2.5 添加 collaborators
2.6 转给另一个 user account
3. .npmignore
.npmignore使用 .npmignore 文件将内容排除在 package 之外。
如果没有
.npmignore文件,npm 将会使用.gitignore文件如果想包含被
.gitignore排除的文件,那就创建.npmignore文件来覆盖它
与 git 一样,npm 会在 package 的所有子目录中查找 .npmignore 和 .gitignore 文件,不仅仅是根目录。模式规则也和 git 的一样,详见 Git / Ignoring Files。
默认情况,以下 paths 和 files 会被忽略,所以就没有必要显式添加了。
.*.swp._*.DS_Store.git.gitignore.hg.npmignore.npmrc.lock-wscript.svn.wafpickle-*config.gypiCVSnpm-debug.lognode_modules:它里的全部内容都会被忽略,除了 bundled dependencies(当然这部分 npm 会自动处理)
如果想测试 npmignore 是否生效,可以在本地运行 npm pack 命令,它会在工作目录生成一个 tarball,就像发布时一样。
4. 主要参考
Last updated