# npm发包
- 命令行登录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/.
- 若正实用淘宝源,需要切回npm源
npm config list
npm config set registry=http://registry.npmjs.org
- 发布命令
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
发布成功。
- 修改包版本 如果要更新版本,需要先git上面提交代码,并且修改package.json里面的"version": "1.1.0",否则无法再次提交。
# npm 包的范围
- 无范围的包(unscoped),所有人都可以下载使用。
- 范围公共包(scoped public packages),在用户或组织命名空间中使用。
- 私有包,在一组有限的用户或团队间共享
# 发布范围公共包或私有包
创建一个组织 https://www.npmjs.com/org/create,需要7刀每个月。
创建范围公共包
# 组织范围内
npm init --scope=@my-org
# 用户范围内
npm init --scope=@my-username
- 发布范围公共包
npm publish --access public
- 查看范围公共包 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 发私有包
- 包项目在github上托管需为 private仓库
- 创建一个github token 用于 package 管理(read、write)
- 在包项目下创建 .npmrc文件
//npm.pkg.github.com/:_authToken=GITHUB_TOKEN
@alanngaijx:registry="https://npm.pkg.github.com/"
- 修改 package.json 的 name,添加scope前缀,如 @alanngaijx
- 修改 package.json 的 repository 为当前私有仓库链接
- 执行 npm publish,登录GitHub查看packages
- 使用该私有包,需要在项目下添加 .npmrc文件(这里的 token 权限可以只是 read pacakge)
参考: 我创建的demo (opens new window) 发布私有 npm package 到 GitHub 的方法 (opens new window) 相关官方文档 (opens new window)