私有npm手摸手教程

99 阅读1分钟

写在前面:

上一个把包发到公有npm的已经被开除了,所以搭建私有npm基本是前端必备技能

搭建背景:

1.安全性

基于公司要求,有一些包不能对外发布里边有公司的业务代码,上一个发布的已经被公司通报了

2.稳定性

使用别人的包被删除,咱也得有备份不是

技术选型:

私有npm有很多我们用的是verdaccio, 原因是他配置很简单,整体功能也很强大

实操一下:

安装

npm install -g verdaccio

$> verdaccio
warn --- config file  - /home/.config/verdaccio/config.yaml
warn --- http address - http://localhost:4873/ - verdaccio/3.0.0

核心配置文件

~/.config/verdaccio/storage        服务器包的存放地址

~/.config/verdaccio/config.yaml 配置文件(重要)

~/.config/verdaccio/htpasswd     用户

发包

1.创建目录(统一命名 @sftc

2.npm init 初始化package.json (版本号是你上传组件的版本号)

3.组件开发

4.组件发包(注册,登录)

发包注意事项

  • 设置npm本地镜像

      nrm add snpm npm.sfxxxx.com

      nrm use snpm

  • 添加npm用户       登录npm用户(已添加)

      npm adduser       npm login

  • 发布 (修改package.json version)

      npm publish

  • 删除发布包(不推荐使用)

​      npm unpublish @version  --force

配置文件解析

storage: ./storage  #存包地址
plugins: ./plugins  #插件
web:
  title: 同城npm     #标题
auth:
  htpasswd:
    file: ./htpasswd  #用户信息
uplinks:              #上行链路
  npmjs:
    url: https://registry.npmjs.org/
  cnpmjs:
    url:  https://registry.npmmirror.com/
  dwnpm:
    url: https://artifactory.sf-express.com/artifactory/api/npm/npm-sf-local/
packages:            #软件包访问方式
  '@*/*':
    access: $all
    publish: $authenticated
    proxy: cnpmjs
  'dwnpm/*':
     proxy: cnpmjs
  '**':
    proxy: cnpmjs
log: { type: stdout, format: pretty, level: http }  #日志
i18n:                                               #国际化
  web: zh-CN            
listen: 0.0.0.0:8999 # 设置监听地址,0.0.0.0匹配本机地址 #域名访问必备

常见问题解析

1.想用域名解析到ip+端口,一定要要修改

listen: 0.0.0.0:8999 # 设置监听地址,0.0.0.0匹配本机地址

2.配置环境变量VERDACCIO_PUBLIC_URL, 否则你资源路径会404

pm2 start process.json

 {
  "apps": [
    {
      "name": "verdaccio",
      "script": "verdaccio",
      "env": {
        "NODE_ENV": "production",
        "VERDACCIO_PUBLIC_URL": "http://npm.sfxxxx.com"
      },
      "env_production": {
        "NODE_ENV": "production",
        "VERDACCIO_PUBLIC_URL": "http://npm.sfxxxx.com"
      }
    }
  ]
}

3.索引其他源的包,特定规则去特定域名拉包 很常见的能力

    'dwnpm/*':
     proxy: cnpmjs

4.接通知

  notify:
    method: POST
    headers: [{ 'Content-Type': 'application/json' }]
    endpoint: xxxx?id=xxx
    content: '" {{ publisher.name }}发布了{{ name }}{{#each versions}} v{{version}}{{/each}} " '

有这些基本verdaccio就算配置完了,大家有啥问题可以随时评论区沟通

参考 verdaccio.org/zh-CN/docs/…