@注册NPM账号
- NPM官网
 - 按步骤开始注册账号
 

- 过程中需要输入一个一次性密码(OneTimePassword/OTP)
 - 首次时从注册邮箱中翻出这个OTP
 

- 注册成功,进入个人主页
 

@从身份验证器App获取OTP
安装验证器APP
- 手机应用市场搜索微软验证器(Microsoft Authenticator)或谷歌验证器(Google Authenticator),无情下载安装之!
 

链接:pan.baidu.com/s/19vzSSeYN... 提取码:xra5
向验证器中添加NPM账号
- 添加账号:在APP首页加号按钮,新增账户
 - 后续过程有添通过加二维码这个选项
 - 在NPM网站中获取这个二维码
 

- 选择生成校验器APP的二维码
 


- 在校验器扫描这个二维码,就可以源源不断地获取NPM的OTP了,大约每5秒就会刷新一次
 

从验证器实时获取OTP
- 每次登录时直接从APP中获取OTP就可以了
 

@发布一个NPM包
终端登录NPM
- 切换到NPM官方源
 
            
            
              shell
              
              
            
          
          # 全局安装nrm
npm i -g nrm
# 切换NPM源到NPM官方源
nrm use npm
        - 在本机添加自己的NPM账号
 
            
            
              shell
              
              
            
          
          # 添加刚刚注册的NPM账号 后续依然要输入OTP 从APP获取即可
npm adduser
        - 登入、登出、账号切换
 
            
            
              shell
              
              
            
          
          # 查看当前登录的账号
npm whoami
# 登出当前账号
npm logout
# 登录新账号
npm login
        发布NPM库
- 创建一个NPM项目,例如 
h5-wheels 
            
            
              shell
              
              
            
          
          # 进入项目根目录
cd h5-wheels
# 初始化项目选项一(将来npm install h5-wheels)
npm init -y
# 初始化项目选项二(将来npm install @<你的NPM用户名>/fe-wheels)
npm init --scope=<你的NPM用户名>
# 此处笔者使用选项二 ↑↑↑ 👹
        - package.json大致如下
 
            
            
              json
              
              
            
          
          {
  // 包名
  "name": "@steveouyang/h5-wheels",
  // 当前版本(可升可降,通常不建议降,会让用户形成黑人问号脸)
  "version": "0.2.4",
  // 库的描述,可以写那啥一点
  "description": "一些零零碎碎的JS小函数合集没啥卵用不建议安装 / awesome JS function craps which are TOTALLY useless and STRONGLY RECOMMEND that u dont install this shit!",
  
  // 入口文件
  "main": "main.js",
  // 一些快捷脚本(不是必须)
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "gpush":"git add . && git commit -m 首次提交/还原点 && git push -u origin master"
  },
  // Git仓库地址
  "repository": {
    "type": "git",
    "url": "https://gitee.com/steveouyang/h5-wheel.git"
  },
  // 作者
  "author": "steveouyang",
  // 开源证书,此处使用的是默认的ISC证书
  "license": "ISC"
}
        - 写点代码,使用CJS模块风格导出
 
h5-wheels/data_utils/math_util.js
业务逻辑胡乱撸之
            
            
              js
              
              
            
          
          /* 返回[start,end]之间的随机整数 */
function getRangeRandom(start, end) {
    return start + Math.round((end - start) * Math.random());
}
/* 从arr或字符串中随机摘取一个元素 */
function getRandomItem(arr) {
    return arr[getRandom(0, arr.length - 1)];
}
        CJS模块导出之
            
            
              js
              
              
            
          
          module.exports = {
    getRandom,
    getRandomItem,
}
        - and finally ------ 无情发布之!
 
            
            
              shell
              
              
            
          
          # 要切换到NPM官方源并 npm login 在先哦~ 😊😊😊
npm publish --access=public
        取消发布
- 类似于删库跑路,不再维护
 
            
            
              shell
              
              
            
          
          npm unpublish <您的包名> --force
        - 此时在 npmjs.com 中登录,会发现自己的 
packages中已经不存在这个包了! 
小总结
- 本例只是一个简单的例子
 - 使用的是CommonJS/CJS模块规范
 - 前端通常使用的模块化规范是ESM,将在后续的教程中更新
 - 本例通过非常的通俗的手法,让各位看官知道:
 - 所谓NPM的发布与安装,不过就是把一包代码暂存于NPM然后用户下载到node_modules中使用罢了...
 

@使用自己发布的NPM包
安装自己发布的包
            
            
              js
              
              
            
          
          # npm i <您的包名>
# 要切换到NPM官方先哦~ 😊😊😊
npm i @steveouyang/h5-wheels
        无情使用之
            
            
              js
              
              
            
          
          // 引入node_modules中的代码
const { getRandom, getRandomItem } = require("@steveouyang/h5-wheels/data_utils/math_util")
// 无情调用之
console.log(getRandom(1, 10));
console.log(getRandomItem([3, 1, 4, 1, 5, 9, 2, 6]));
        控制台正确输出结果,骗人是小狗!


↑ 这是一种怎样的表情??欢迎留言区讨论~~~
@依赖的版本更新
检查所有依赖的新版本
            
            
              shell
              
              
            
          
          npm outdated
        下图的仓库有更新了! 
更新所有包
            
            
              shell
              
              
            
          
          npm update
        更新指定的包
            
            
              shell
              
              
            
          
          npm update xxx
        锁定主版本号
- 我们看到的大多数库的版本是下面这样写的 ↓↓↓
 
            
            
              json
              
              
            
          
          "xxx":"^1.0.0"
        ^代表锁死主版本- 即xxx库的更新范围为 1.x.x
 - 当次版本和补丁有更新时,
npm update会触发xxx的更新 - 但xxx永远不会升级到2.0.0 ------ 因为可能带来不兼容!!😱😱😱
 
同时锁死主次版本号
            
            
              json
              
              
            
          
          "xxx":"~1.7.0"
        - 这代表版本允许的更新范围为 1.7.x
 - 主次两个版本号同时都被锁死了~
 - 永远不会更新到 1.8.0 或更高!
 
可是,为什么我得到你的人,却得不到你的心??
