贡献 package
来自官网,向 registry 贡献 packages
Last updated
来自官网,向 registry 贡献 packages
Last updated
package.json
发布到 registry 里的 package 必须包含 package.json
文件。
执行 npm init
,创建一个新的 package.json 文件。
name
(必填):package 的名字,必须是一个小写的单词,可以包含连字符 -
和下划线 _
需唯一、有描述性
需符合 (比如不冒犯、不侵权商标)
version
(必填):格式必须是 x.x.x
,遵循
description
(建议有):便于在 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,比如:
Node.js modules 是一种可以发布到 npm 的 package。
运行 npm init
创建一个 package.json
文件
对于 unscoped modules,运行 npm init
对于 scoped modules,运行 npm init --scope=@scope-name
创建一个当别人用这个 module 时要 load 的文件
测试 module
在一个项目里 npm install <your-module-name>
创建 test.js
,在里面 require 那个 module 并调用其方法
运行 node test.js
README.md
建议 package 的目录包含一个 README 文件,一是方便其他人在 npm 上找到该 package,还能提供良好的使用体验。通常,README 文件包含与 install, configure 和 use 相关的说明以及其它有用信息。README 文件会显示在 package 的页面上。
npm package README 文件必须位于 package 的根目录中。
当我们发布新版本的 package 时,README 文件只会在 package 页面上更新。要更新 README 文件的内容,可运行以下命令:
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
npm login
npm whoami
登录 organization
更新和管理已发布的 packages。
我们只能更改 scoped package 的可见性(visibility),但不可以更改 unscoped package 的可见性。
将 public 变 private(变成 private 要收费)
如果想要限制 public package 的 access 和 visibility,就可以将其变为 private
当将 public package 设为 private 时
其 access 会立即更新
而 visibility 需要过几分钟后才能生效(它会从网站上 removed)
将 private 变 public
可以通过 website,可以通过 command line。
更改 package.json
里的版本号
运行 npm version <update_type>
,其中 <update_type>
是语义版本控制的发布类型,比如 patch, major, minor
运行 npm publish
去网站上查看版本是否生效
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 它
如果不想再维护 package 了,或是想鼓励用户更新到一个新的或者不同的版本,那我们可以弃用(deprecate)它。弃用 package 或其某个版本了之后,当用户在 install 它时会在终端打印一条消息。
弃用的 warning 或 message 可以写任何东西,比如鼓励用户更新到特定版本或替代 package。(unpublish 时没有 warning)。
可以在网站上操作,也可以在命令行。
如果不想再维护 package,还想把它从自己的 user profile 中删除(remove)了,但还有其他用户在依赖这个 package,那我们可以将它转移到 @npm
这个 user account 上。一旦转移过去,我们再没法 update 它了。
.npmignore
使用 .npmignore
文件将内容排除在 package 之外。
如果没有 .npmignore
文件,npm 将会使用 .gitignore
文件
如果想包含被 .gitignore
排除的文件,那就创建 .npmignore
文件来覆盖它
默认情况,以下 paths 和 files 会被忽略,所以就没有必要显式添加了。
.*.swp
._*
.DS_Store
.git
.gitignore
.hg
.npmignore
.npmrc
.lock-wscript
.svn
.wafpickle-*
config.gypi
CVS
npm-debug.log
node_modules
:它里的全部内容都会被忽略,除了 bundled dependencies(当然这部分 npm 会自动处理)
如果想测试 npmignore
是否生效,可以在本地运行 npm pack
命令,它会在工作目录生成一个 tarball,就像发布时一样。
关于 npm init
的高级用法,可查阅 。
运行 npm publish
登录
与 git
一样,npm
会在 package 的所有子目录中查找 .npmignore
和 .gitignore
文件,不仅仅是根目录。模式规则也和 git
的一样,详见 。