node 作为当前最受欢迎的"js版"后端开发语言之一,无论是业务开发,还是自动化构建部署,使用是很频繁的。但是…


一、镜像源

1. 管理常用镜像源

  • 官方: http://registry.npmjs.org
  • 淘宝: https://registry.npm.taobao.org
  • zto: http://npm.ztosys.com/
$ npm config get registry // 查看
$ npm config set registry <镜像源> // 查看

2.nrm

优势:传统方法切回官方源的话要重写设置源的地址指向,执行 npm config set registry https://registry.npmjs.orgnrm 可以让我们快速切换源,更便于管理,下文中介绍了一些常用命令:

nrm 安装

$ npm install nrm -g

nrm 常用命令:

$ nrm ls // 列出可用的源,带*号即为当前使用的配置
$ nrm current // 查看当前使用的源

$ nrm use [源的别名] // 切到源,例如我们要使用淘宝源:nrm use taobao
$ nrm add [源的别名] [源的地址] // 添加私有 npm 源,例如添加我司私有源:nrm add zto http://npm.ztosys.com/

$ nrm test [源的别名] // 测试速度
$ nrm del [源的别名] // 删除源,例如:nrm del zto

二、npm包管理

1.发布流程

1.1 初始化 package.json

$ npm init

结果:

{
  "name": "react-pc-ui", // 包名
  "version": "1.0.1", // 版本号
  "description": "\"React PC 组件库(React pc component library)\"",
  "main": "index.js", // publish 入口
  "scripts": {
    "start": "webpack-dev-server --open --config ./build/webpack.dev.config.js",
    "build:component": "webpack --config ./build/webpack.dist.component.config.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/xxx/xxx.git",
    "webpack": "v4.6.0",
    "webpack-cli": "^2.0.14",
    "node": "v8.11.1",
    "npm": "v5.6.0"
  },
  "keywords": [
    "React",
    ...
  ],
  "author": "https://github.com/lianpf",
  "license": "ISC",
  "devDependencies": {
    "uglifyjs-webpack-plugin": "^1.2.5",
    "webpack": "^4.6.0",
    ...
  },
  "dependencies": {
    "react": "^16.3.2",
    "redux": "^4.0.0",
    ...
  }
}
  • name:填写你这个包的名字,默认是你这个文件夹的名字。不过这里要着重说一下,最好先去npm上找一下有没有同名的包。最好的测试方式就是,在命令行里面输入npm install 你要取的名字,如果报错,那么很好,npm上没有跟你同名的包,你可以放心大胆地把包发布出去。如果成功下载下来了。那么很不幸,改名字吧。
  • version:你这个包的版本,默认是1.0.0
  • description:描述你的包是干嘛用的
  • main:入口文件,默认是Index.js,你也可以自己填写你自己的文件名
  • test command:测试命令,这个直接回车就好了,目前还不需要
  • git repository:这个是git仓库地址, 如果没有的话,直接回车继续。
  • keyword:这个是一个重点,这个关系到有多少人会搜到你的npm包。尽量使用贴切的关键字作为这个包的索引
  • author:写你的账号或者你的github账号吧
  • license:开源文件, 直接回车

1.2 验证/登录npmjs账号

切换到官方源 或 要发布到的私有源

初次

$ npm adduser

非初次

$ npm login

1.3 发布(普通包、测试包、@开头命名公有包)和验证

1.3.1 publish之前
你需要在你package.json文件的入口文件(我的是index.js)增加一段代码:

module.exports = require('./lib')

不要问我为什么要这么做,因为你npm install其他包的时候,其他包里面的也是这样写

还有如果你这次仅仅是想测试这个流程, 包里没有什么实质性的内容的话, 那么这个文件里可以直接写这么一句 hello world

exports.sayHello = function() {
  return 'Hello World'; 
} 

1.3.2 publish
选择你要发布的包所在的项目, 以我的为例(包在react-pc-ui下):

lianpf$ cd react-pc-ui
[react-pc-ui] lianpf$ npm publish

1.3.3 发布测试包

  • 测试包中的package.json修改为 "version": "1.0.0-beta.1"
  • 执行 npm publish --tag=beta

1.3.4 发布以@开头命名的public公有包
@Organization 代表某个组织,类似@babel@angular等。没有对应机构的允许,无法发布包:error You must sign up for private packages:@***/***

解决办法:
作为公共包发布 npm publish --access public

1.3.5 验证安装

$ npm install xxx --save-dev

1.4 可能遇到的问题

1.4.1 镜像问题

no_perms Private mode enable, only admin can publish this module

或者publish成功, 但是npm.js个人信息哪里查看不到包

那么可能是你用了国内的镜像地址了,只需要重新把地址注册回npmjs即可

$ npm config  // 查看所有配置相关的可用命令
$ npm config get registry // 查看镜像
$ npm config set registry http://registry.npmjs.org // 重新把地址注册回npmjs

发布之后, 再重新设置为淘宝镜像或者你们公司自己的镜像

1.4.2 命名问题

npm ERR! you do not have permission to publish "your module name". Are you logged in as the correct user?

提示没有权限,其实就是你的module名在npm上已经被占用啦,这时候你就去需要去https://www.npmjs.com搜索你的模块名称,如果搜索不到,就可以用, 并且把package.json里的name修改过来,重新npm publish,看到如下信息就表示安装完成了,rc-fullpage就是我的模块名

2. 撤回npm包

官方可撤回publish操作24h内的包,私有源视自行判断。但撤回操作均不可逆,请谨慎为之。

  • 撤回指定版本模块
$ npm unpublish [@已发布的完整包名@版本号] --force // 例: npm unpublish @zto/xxx@1.0.0 --force
  • 删除整个模块
$ npm unpublish [@已发布的完整包名]--force // 例: npm unpublish @zto/xxx --force

3. 版本号规范

主要规则版本格式:主版本号.次版本号.修订号,版本号递增规则如下

主版本号:当你做了不兼容的 API 修改,
次版本号:当你做了向下兼容的功能性新增,
修订号:当你做了向下兼容的问题修正

最后, 希望大家早日实现:成为编程高手的伟大梦想!
欢迎交流~

微信公众号