# npm发包

  1. 命令行登录npm官网所注册的账号
npm login

Username: alanngaijx
Password:
Email: (this IS public) 634620668@qq.com
npm notice Please check your email for a one-time password (OTP)
Enter one-time password from your authenticator app: 92620082
Logged in as alanngaijx on https://registry.npmjs.org/.
  1. 若正实用淘宝源,需要切回npm源
npm config list

npm config set registry=http://registry.npmjs.org
  1. 发布命令
npm publish

如果报错

npm notice
npm notice package: my-npm-package@1.0.0
npm notice === Tarball Contents ===
npm notice 53B  index.js
npm notice 235B package.json
npm notice === Tarball Details ===
npm notice name:          my-npm-package
npm notice version:       1.0.0
npm notice package size:  332 B
npm notice unpacked size: 288 B
npm notice shasum:        c86e29e6ed1b6a6084c05590f66d6a628c4e03ce
npm notice integrity:     sha512-Z2f/6wf2py2AW[...]+JlbpC9+W+7rA==
npm notice total files:   2
npm notice
npm ERR! code E403
npm ERR! 403 403 Forbidden - PUT https://registry.npmjs.org/my-npm-package - You do not have permission to publish "my-npm-package". Are you logged in as the correct user?
npm ERR! 403 In most cases, you or one of your dependencies are requesting
npm ERR! 403 a package version that is forbidden by your security policy.

有可能是这个包名已被占用,到官网搜一搜,如果是被占用了,在 pakage.json 的 name 中修改包名。

npm notice
npm notice package: my-very-awesome-npm-package@1.0.0
npm notice === Tarball Contents ===
npm notice 53B  index.js
npm notice 248B package.json
npm notice === Tarball Details ===
npm notice name:          my-very-awesome-npm-package
npm notice version:       1.0.0
npm notice package size:  340 B
npm notice unpacked size: 301 B
npm notice shasum:        993ad0af26437499fe3865edcdfa199037dd654d
npm notice integrity:     sha512-rJFT3aN8O0gu+[...]xp1FVHashVQlQ==
npm notice total files:   2
npm notice
+ my-very-awesome-npm-package@1.0.0

发布成功。

  1. 修改包版本 如果要更新版本,需要先git上面提交代码,并且修改package.json里面的"version": "1.1.0",否则无法再次提交。

# npm 包的范围

  1. 无范围的包(unscoped),所有人都可以下载使用。
  2. 范围公共包(scoped public packages),在用户或组织命名空间中使用。
  3. 私有包,在一组有限的用户或团队间共享

# 发布范围公共包或私有包

  1. 创建一个组织 https://www.npmjs.com/org/create,需要7刀每个月。

  2. 创建范围公共包

# 组织范围内
npm init --scope=@my-org

# 用户范围内
npm init --scope=@my-username
  1. 发布范围公共包
npm publish --access public
  1. 查看范围公共包 https://npmjs.com/package/package-name, 替换 package-name 为刚发布的包名. 公共包将public在 npm 网站上的包名称下方显示。

如 @ne-test-org/hello-world

# npm包版本控制规范

参考 https://docs.npmjs.com/about-semantic-versioning

同时可以为npm包补充dist-tags标签,使版本更加可读。

npm dist-tag add example-package@1.4.0 stable

# 更新版本

使用 npm undate 1.0.1 相当于从 package.json中修改verson字段一样。

# 弃用

弃用整个包,替换为包的名称和""弃用消息:

npm deprecate <package-name> "<message>"

弃用包的某个版本

npm deprecate <package-name>@<version> "<message>"

取消弃用包

npm deprecate <package-name>@<version> ""

# 使用 Github package 发私有包

  1. 包项目在github上托管需为 private仓库
  2. 创建一个github token 用于 package 管理(read、write)
  3. 在包项目下创建 .npmrc文件
//npm.pkg.github.com/:_authToken=GITHUB_TOKEN 

@alanngaijx:registry="https://npm.pkg.github.com/"
  1. 修改 package.json 的 name,添加scope前缀,如 @alanngaijx
  2. 修改 package.json 的 repository 为当前私有仓库链接
  3. 执行 npm publish,登录GitHub查看packages
  4. 使用该私有包,需要在项目下添加 .npmrc文件(这里的 token 权限可以只是 read pacakge)

参考: 我创建的demo (opens new window) 发布私有 npm package 到 GitHub 的方法 (opens new window) 相关官方文档 (opens new window)