乐趣区

搭建npm私库

选择搭建方案

一、使用 Sinopia

由于 Sinopia 作者已经停止更新维护了,因此此方案 pass 掉

二、使用 cnpmjs.org

此方案相比较下面的第三种方案比较麻烦,而且 cnpm 已经不维护了,有很多问题都得不到解决,因此此方案也 pass 掉

三、使用 verdaccio

这是 sinopia 的一个分支,6 种多语言文档详细齐全,搭建方法简单粗暴

1、安装 verdaccio

全局安装:npm i -g verdaccio

2、启动 verdaccio

启动命令:verdaccio

参数:

  • –listen 端口号
  • –config 配置文件路径

栗子:

verdaccio --listen 4000 --config ~./config.yaml

默认启动端口:4873,因此访问 http://localhost:4873 即可看到下面的内容

相关配置

再来看看我们启动了 verdaccio 后控制台的相关输出

  • warn — config file,这里告知我们配置文件的路径,我们可以去修改配置文件,配置文件说明如下:
# 存放包的缓存目录 
storage: /Users/xxx/.local/share/verdaccio/storage

# 插件目录 
plugins: ./plugins

# 配置 WEB UI 界面
web:
  # 默认开启 web 服务,如果想要关闭 web 服务,则设置 enable:false 即可
  # enable: false
  # logo : logo.png 
  # web 页面的标题
  title: Efun FE NPM By Verdaccio 

# 验证信息
auth:
  # 用户信息存储目录
  htpasswd:
    file: ./htpasswd
    # 默认为 1000,改为 -1,禁止注册
    # Maximum amount of users allowed to register, defaults to "+inf".
    # You can set this to -1 to disable registration.
    #max_users: 1000 

# 公有库配置 a list of other known repositories we can talk to
uplinks:
  npmjs:
    url: https://registry.npmjs.org/

# 配置权限管理
packages:
  '@*/*':
    # 表示哪一类用户可以对匹配的项目进行安装
    # 三种身份:$all 表示所有人都可以执行对应的操作,$authenticated 表示只有通过验证的人可以执行对应操作,$anonymous 表示只有匿名者可以进行对应操作(通常无用)access: $all
    # 表示哪一类用户可以对匹配的项目进行发布
    publish: $authenticated
    # 代理,表示没有的仓库会去这个 npmjs(又指向 https://registry.npmjs.org/ , 就是上面的 uplinks 配置)里面去找 
    proxy: npmjs

  '**':
    access: $all 
    publish: $authenticated
    proxy: npmjs

# You can specify HTTP/1.1 server keep alive timeout in seconds for incomming connections.
# A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout.
# WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enought.
server:
  keepAliveTimeout: 60

# 监听的端口 , 重点, 不配置这个, 只能本机能访问
listen: 0.0.0.0:4873

# To use `npm audit` uncomment the following section
middlewares:
  audit:
    enabled: true

# 日志输出设置
logs:
  - {type: stdout, format: pretty, level: http}
  #- {type: file, path: verdaccio.log, level: info}

3、切换 registry 源

  • 直接更换所有 npm 下载源:npm set registry http://localhost:4873/
  • 只对本次装包指定下载源:npm install --registry http://localhost:4873
  • 推荐使用 nrm
npm i nrm -g
nrm list | nrm ls
nrm add [name] [源 url]
nrm use [name]
nrm del [name]

4、账号管理

  • 创建账号:npm adduser --registry http://localhost:4873/
  • 登陆:npm login(需要先切换到对应 npm 源)
  • 退出:npm logout
  • 查看当前用户:npm who am i

5、发布包

  • npm publish
  • 升级版本号

    • 升级补丁版本号:npm version patch
    • 升级副版本号:npm version minor
    • 升级主版本号:npm version major
  • 版本号相关说明,npm version 后面参数说明:

    • patch:小变动,比如修复 bug 等,版本号变动 v1.0.0->v1.0.1
    • minor:增加新功能,不影响现有功能,版本号变动 v1.0.0->v1.1.0
    • major:破坏模块对向后的兼容性,版本号变动 v1.0.0->v2.0.0

使用 pm2 部署到服务器

运行命令
  • 启动:pm2 start verdaccio
  • 停止:pm2 stop verdaccio
  • 重启:pm2 restart verdaccio
  • 删除应用:pm2 delete verdaccio
  • 查看日志:pm2 logs verdaccio

pm2 配置文件启动

  • package.json文件中定义 script:start 为:verdaccio
  • pm2 文件(ecosystem.json 为例子)配置如下,主要关注 script,args 两个属性,其余根据自己的需求来配置:
{
    "apps": [
        {
            "name": "verdaccio-dev",
            "max_memory_restart": "300M",
            "script": "npm",
            "args" : "start",
            "out_file": "logs/verdaccio-out.log",
            "error_file": "logs/verdaccio-error.log",
            "merge_logs": true,
            "log_date_format": "YYYY-MM-DD HH:mm Z",
            "exec_mode": "fork",
            "env": {"NODE_ENV": "development"},
            "env_production": {"NODE_ENV": "production"}
        }
    ]
}
  • package.json文件中定义 script:prod 为:pm2 start ecosystem.json --env production,然后输入npm run prod,verdaccio 就如期在 pm2 托管中启动了~
退出移动版