npm包管理及发布教程汇总

说明:

原谅参考自sf社区文章,这里只是做总结提炼,原谅链接:npm发布包教程

关于npm的基本认知

是什么?(node package manager)

基本认识

  • 是一个辅助前端开发的包管理工具
  • 管理对象:包(package)
  • 管理方式:
    • 增(发布npm publish, 安装:npm install)
    • 删(废弃:npm deprecate|npm unpublish xx --force;卸载:npm uninstall
    • 改(更新:npm update
    • 查(搜索:npm info xxx
  • npm中涉及到的主体主要有两种:package(含有pakcage.json描述文件并发布到npm仓库的文件或文件夹)和module(在node_modules中,可以被Node.js的require方法加载的任何文件或文件夹)
    • 两者关系:`一个JavaScript程序,从本地发布到npm仓库时是package,从npm仓库下载到本地时就变成了module

package(包)

  • 主要两个重要属性:
  1. Scope(作用域,范围)

一旦注册个人或者团体账户,就获得了与个人或者团体名相匹配的scope,可以用这个scope作为包的命名空间,例如@yuyy、@58。

分类:

  • unscoped: 如babel
  • scoped:
    • user:如@test/babel
    • org: @babel/parser
  • 作用:为你自己发布的包提供命名空间,防止与他人的包名冲突
  1. Accessibility(可访问性)
    属性值有:
  • private: 私有,仅作者本人或者团队成员可见
  • public: 公有,所有人可见
  • 关系说明:

module(模块)

下载到本地的module主要是用于在node环境中被引用,为了能被 require方法加载,module必须是下列情况之一:

  • 包含package.json,且package.json中有main字段的文件夹
  • 含有index.js的文件夹
  • JS文件

发布包

  • 前提条件:注册一个npm账户

npm官方建议规范的包至少包含:
- package.json(包的基本信息)
- README.md(文档)
- index.js(入口文件)

发布一个unscoped包

  1. 创建必要的文件
# 创建项目
mkdir test && cd test
# 创建package.json
npm init
# 创建README.md(随便的测试内容)
# 创建index.js
module.exports = {
    printMsg: function () {
        console.log('this message is from yuyy-test-pkg!');
    }
}

  1. 发布
  • npm publish
  1. 可能报的错
    • 未登录: need auth auth required for publishing, 解决办法:npm adduser
    • 仓库地址错误:npm ERR! code E409 registry returned 409 for put,原因:可能本地使用的仓库是cnpm不是npm, 解决办法:用nrm切换到npm仓库,执行命令nrm use npm
  2. 在npm官网搜索查看(个人账号下的packages中可查)

发布一个scoped包

  • 如@sophieu/test
  1. 创建项目及文件
mkdir test && cd test
# 创建package.json
npm init 
# 创建README.md
# 创建index.js

  1. 加作用域
npm init --scope=@sophiewu -y

@符号后面的是你注册npm账户时的username,如果不记得可以通过npm whoami查询。上面的命令其实是在重新生成package.json,只是会给包增加了作用域

  1. 公共发布

由于使用npm publish发布scoped包默认是私有发布的需要收费,这里使用公共发布

npm publish --access public
  • 以上发布我,项目名是test,最终发布的包名是@sophiewu/test,可见发布的包名可以和项目名不一致,包名取决于package.json中的name字段

过滤部分文件

npm publish 的时候会把项目目录里面所有的文件都publish到npm仓库中, 但是往往有一部分目录和文件不想发布上去,比如项目的源码、编译脚本等等信息。
只发布用户需要使用的相关文件:

  • 方法一: 使用.gitignore设置忽略哪些文件
  • 方法二: 使用.npmignore设置忽略哪些文件
  • 方法三:使用package.json 的 files字段选择发布哪些文件

npm包的迭代

npm包的每次迭代都要涉及到两个方面:

  • 内容的变更
  • 版本的变更

npm的版本管理

npm采用语义化版本,共三位,以’.’隔开,从左至右依次代表:主版本(major)、次要版本(minor)、补丁版本(patch)。
版本规范

  • 变更版本号的命令: npm version <major|minor|patch>
npm version minor
# 执行结果: v1.1.0, package.json中的version从原来的v1.0.0--->v1.1.0
  • 查看版本 npm view xxx versions
  • 安装更新npm up xxx

废弃/删除

npm包发布后可以对包进行废弃或删除操作,废弃和删除的区别在于:

  • 废弃不会将包或版本从npm仓库删除,仍然可以继续下载安装,并在安装的时候会有警示
  • 删除会将包从npm彻底删除,无法被下载安装

无论是废弃还是删除,都包含两个层面:

  • 版本的废弃/删除
  • 包的废弃/删除

废弃

# 废弃指定版本
npm deprecate yuyy-test-pkg@1.1.0 'test deprecate'
# 安装废弃版本
npm i yuyy-test-pkg@1.1.0

删除

npm不鼓励任何形式的删除,主要因为我们发布的包可能已经被其他人引用,如果我们删除了此包,其他人在重新安装含有我们包的依赖的工程时,出现找不到包问题。
基于此,npm做了相关的删除限制:

  • 删除的版本24小时后方可重发!
  • 只有发布72小时之内的包可以删除!
# 删除
npm unpublish yuyy-test-pkg --force
npm unpublish @yuyy/babel --force

nrm源管理工具

nrm(npm registry manager )是npm的镜像源管理工具,有时候国外资源太慢,使用这个就可以快速地在 npm 源间切换

  • 安装npm install -g nrm
  • 使用:
# 查看所有源(带*的是当前使用的源)
nrm ls 
# 切换源
nrm use taobao
# 增加源
nrm add registry http://registry.npm.frp.trmap.cn/
# 删除源
nrm del <registry>
# 测试源速度
nrm test npm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值