npm私服

2020-01-09  本文已影响0人  猴儿十六

镜像或是代理,这是一个问题。

需求&选项

多个nodejs项目间的公共代码,但又不太适合发到npmjs.org。

部分可选方式:

最终选择nexus,因为它大而全(首先它是一个maven私服),而且我不喜欢npm link。尽管verdaccio试过后也挺好(简单的配置放在本文最后)。

安装配置nexus

以下步骤在安装nexus的服务器进行。

安装

Docker方式是最方便的,其它方式请自行官网查阅。

mkdir -p /data/nexus && chown -R 200 /data/nexus
docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 --name nexus -v /data/nexus:/nexus-data sonatype/nexus3

因为众所周知的原因,docker镜像的拉取可能会出问题,多试几次或者找个可用的mirror。

启动后,访问http://<your host>:8081/,登录nexus。

用户名:admin,初始密码在/data/nexus/admin.password文件中,首次登录需要修改。

配置

新增两个仓库:

定义仓库组:

如果内部代码的发布涉及到对一些公用仓库做修改(但不修改组织名),切记在Members列表中,将npm-private排在npm-registry之前/上。

开启npm token支持:在Realms功能中,启用npm Bearer Token Realm。

私服配置完毕。

安装配置npm

以下步骤,在使用nexus私服的开发环境操作。npm使用私服,可以是全局方式或每项目方式,这里只考虑最省事的全局方式。

配置

设置全局npm私服:

npm set registry http://<your host>:8081/repository/npm-group/

设置npm私服为永久登录:

npm login --registry=http://<your host>:8081/repository/npm-group/ --always-auth

设置npm私服(内部发布用)为永久登录:

npm login --registry=http://<your host>:8081/repository/npm-private/ --always-auth

补充设置,保证yarn能使用npm配置:

npm config set always-auth true

以上设置后,可打开~/.npmrc文件验证,内容大致如下:

registry=http://<your host>:8081/repository/npm-group/
always-auth=true
//<your host>:8081/repository/npm-group/:_authToken=<your token>
//<your host>:8081/repository/npm-private/:_authToken=<your token>

现在可以执行npm installnpm publishyarn installyarn publish了。

常见问题

参考文档

附注:verdaccio

尽管verdaccio是一个完备的private registry解决方案,但个人建议还是把配置文件放在公共库的源代码管理下。

启动verdaccio:

verdaccio --config ./verdaccio.yml

verdaccio.yml:

storage: ./.verdaccio/storage
plugins: ./.verdaccio/plugins

web:
  title: Verdaccio
auth:
  htpasswd:
    file: ./.verdaccio/htpasswd

uplinks:
  npmjs:
    url: https://registry.npmjs.org/
    maxage: 30m
  taobao:
    url: https://registry.npm.taobao.org/
  cnpm:
    url: https://r.cnpmjs.org/
  nj:
    url: https://registry.nodejitsu.com/
  rednpm:
    url: https://registry.mirror.cqupt.edu.cn/
  npmMirror:
    url: https://skimdb.npmjs.com/registry/
  deunpm:
    url: http://registry.enpmjs.org/

packages:
  '@<your org>/*':
    access: $all
    publish: $all
    unpublish: $all

  '@*/*':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: taobao

  '**':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: taobao

server:
  keepAliveTimeout: 60

middlewares:
  audit:
    enabled: true

# log settings
logs:
  - { type: stdout, format: pretty, level: http }

publish:
  allow_offline: true
listen:
  - 0.0.0.0:4873
max_body_size: 100mb

发布及获取包,命令加上--registry=http://localhost:4873即可。

上一篇 下一篇

猜你喜欢

热点阅读