最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 手摸手教你搭建npm私有库

    正文概述 掘金(游走走2021)   2021-06-25   429

    最近终于有时间可以做一些业务需求之外的东西了,就把组件库需求提上了日程。

    对于一些不适合开源的组件,我想到了搭建私有npm仓库

    于是我跑去咨询了一下有经验的大佬,大佬微微一笑,说:verdaccio

    手摸手教你搭建npm私有库

    这是个啥?

    果断打开github搜索关键词,果然不出我所料,这是一个坐拥11.8kstar的开源库(github.com/verdaccio/v…

    手摸手教你搭建npm私有库

    总而言之,这是一个搭建npm仓库的工具。

    出于好奇,我去维基百科了一下这个单词:

    这个词起源壁画,是壁画中的一种「底色」,在底色之上可以更好地去渲染其他颜色。作者之所以起这个名字,其实是因为verdaccio的前身是sinopia(也是一个开源的npm仓库搭建工具),而sinopia意思是壁画底色中的红土色或铁锈色。

    不采用sinopia的原因也很简单,这个项目比较古老,最近一次更新已经是6年前了。。。 手摸手教你搭建npm私有库

    话不多说,直接开撸。

    安装运行

    verdaccio有两种安装方法,一种是直接安装,一种是用docker镜像。

    1.1 直接安装

    npm install --global verdaccio@6-next --registry https://registry.verdaccio.org/
    

    安装完成后,就可以在/node/bin目录下看到一个名为verdacio的文件,这个文件实际指向的是verdaccio包下的build/lib/cli.js

    // cli.js
    #!/usr/bin/env node
    "use strict";
    if (process.getuid && process.getuid() === 0) {
      process.emitWarning(`Verdaccio doesn't need superuser privileges. don't run it under root`);
    } // eslint-disable-next-line import/order
    const logger = require('./logger');
    logger.setup(null, {
      logStart: false
    }); // default setup
    require('./cli/cli');
    process.on('uncaughtException', function (err) {
      logger.logger.fatal({
        err: err
      }, 'uncaught exception, please report this\n@{err.stack}');
      process.exit(255);
    });
    
    • #!/usr/bin/env node(看到这句的我就知道事情并不简单) 这句是告诉系统得用node来执行这个脚本文件;
    • process.getuid()会返回运行进程的用户id,当为0时会提示不要运行在root用户下(root用户id=0);
    • logger是verdaccio项目下的一个日志模块,当进程捕捉到异常时,就会去更新日志并结束当前进程;
    • require('./cli/cli')会去加载cli文件,这个文件里会进行一些初始化操作,比如读取.yaml或.yml配置文件的信息,去设置对应的页面标题、图标等信息,创建node服务器并监听配置的端口(如默认配置的4873)等等,经过这一系列复杂的操作之后,我们就可以直接运行verdaccio并通过端口号访问到对应的页面。

    1.2 直接运行

    运行verdaccio:

    verdaccio
    

    运行成功! 手摸手教你搭建npm私有库 如果是本地安装,打开浏览器,输入http://localhost:4873,就可以看到页面: 手摸手教你搭建npm私有库

    注意:

    1. 如果是在服务器上安装,则需要在配置文件中添加listen: 0.0.0.0:4873(详见下文中的配置文件),再通过IP+4873端口号在线访问。
    2. 如果使用的是云服务器,还需注意防火墙规则:

    手摸手教你搭建npm私有库

    1.3 pm2守护进程后台运行

    在命令行直接运行verdaccio,进程关闭后就无法访问到页面,所以这里推荐使用pm2守护进程,通过pm2可让verdaccio在后台运行。

    pm2官网:pm2.keymetrics.io/

    运行verdaccio:

    pm2 start verdaccio
    

    手摸手教你搭建npm私有库

    停止verdaccio:

    pm2 stop verdaccio
    

    手摸手教你搭建npm私有库

    2.1 docker安装

    docker pull verdaccio/verdaccio:nightly-master
    

    2.2 docker运行

    docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio
    

    效果和直接安装一样,在浏览器打开链接可访问到页面。

    权限配置

    搭建是搭建好了,但是怎么控制访问权限?

    在官方文档里提到了verdaccio使用了一个名为htpasswd插件来做权限配置,默认的配置文件是verdaccio安装目录下的config.yaml

    官方文档上有对配置项的详细说明:verdaccio.org/docs/en/con…

    这是我的配置文件:

    auth:
      htpasswd:
        file: ./htpasswd
        # Maximum amount of users allowed to register, defaults to "+inf".
        # You can set this to -1 to disable registration.
        max_users: -1
    
    uplinks:
      npmjs:
        url: https://registry.npmjs.org/
    
    packages:
      '@*/*':
        # scoped packages
        access: $authenticated
        publish: $authenticated
        unpublish: $authenticated
        proxy: npmjs
    
    
      '**':
        access: $authenticated
        publish: $authenticated
        unpublish: $authenticated
        proxy: npmjs
    
    server:
      keepAliveTimeout: 60
    
    middlewares:
      audit:
        enabled: true
    
    logs: { type: stdout, format: pretty, level: http }
    
    listen: 0.0.0.0:4873
    

    配置项说明:

    • access(访问权限)、publish(发布权限)、unpublish(取消发布权限)可选值如下:
      • $all:任意用户;
      • $anonymous:仅匿名用户;
      • $authenticated:仅授权用户。
    • max_users:-1,不允许用户注册(此时执行npm adduser会报409错误;因此需先注释掉这句,在本地注册完用户后再设置为-1)
    • listen: 0.0.0.0:4873,没有这句就只能在本地访问,加上这句才可以通过ip+端口号在线访问。

    修改完配置文件后,重启verdaccio生效:

    verdaccio -c config.yaml
    

    此时只有登录了verdaccio的用户才能对仓库里的包进行操作。

    npm登录:npm adduser --registry http://xxx.xx.xxx:4873

    发布包:npm publish --registry http://xxx.xx.xxx:4873

    取消发布:npm unpublish 包名 --registry http://xxx.xx.xxx:4873(如果是24h内发布的包,需要加上--force)

    下载包:npm install 包名 --registry http://xx.xx.xxx:4873

    设为镜像源

    npm set registry http://xx.xx.xxx:4873/
    

    执行这句就可以把verdaccio设为本地全局镜像源,如果在仓库中找不到对应的包,verdaccio就会去npm官方仓库尝试拉取对应的包,拉取成功后会缓存在storage目录下(压缩包格式)。


    起源地下载网 » 手摸手教你搭建npm私有库

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元