npm.md 4.88 KB
Newer Older
叶飞's avatar
叶飞 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
# npm 私服搭建教程

## npm 私服必要性

1.  如果公司处于隐私保护的需要,不想将自己封的包推到 npm 社区,但又急需要一套完整的包管理工具来管理越来越多的组件,模块,项目。对于前端,最熟悉的莫过于 npm,bower 等,但是 bower 的市场明显没有 npm 强大的,npm 是前端包管理的不二选择 。
2.  下过 node 库的人都懂,从 npmjs 上下载有多慢,所以大家会用 cnpm 从淘宝那下,但有比淘宝更快的方法是从局域网的私服下。
3.  当我们搭好了这套私服管理工具之后有什么优势呢?

- 私有包托管在我们的私服上,不对外。
- 项目中使用的所有包可以缓存在我们的私服上,然后大家下包的时候走私服,不用走 npmjs 了。速度快上七八倍不在话下。
- 对于下载和发布 npm 包都有了相应的权限管理。

## windows npm 私服搭建过程

1. 安装 node 环境,[node 下载地址](https://nodejs.org/zh-cn/download/)
2. 准备工作目录 例如我这里的`F:\npm`
3. 初始化`pakage.json`

```
npm init -y
```

4. 安装`verdaccio `

```
npm  i  verdaccio
```

4. 新建 `config.yaml` 作为 verdaccio 私服配置文件,配置文件可参考如下:

```yaml
# 查看更多例子
# https://github.com/verdaccio/verdaccio/tree/master/conf

# 仓库保存的地址,publish时仓库保存的地址
storage: ./storage
# 插件的地址
plugins: ./plugins
# 监听的地址
listen: 'https://192.168.12.8:4873'

max_body_size: 1024mb

web:
  enable: true
  title: panda | npm服务器
  logo: assets/panda.png
  primary_color: '#4b5e40'
  # comment out to disable gravatar support
  gravatar: true
  scope: '@scope'
  # by default packages are ordercer ascendant (asc|desc)
  sort_packages: asc
  # convert your UI to the dark side
  darkMode: false

# 翻译您的注册表,api i18n尚不可用
i18n:
  # list of the available translations https://github.com/verdaccio/ui/tree/master/i18n/translations
  web: zh-CN

auth:
  htpasswd:
    file: ./htpasswd # 账号密码的文件地址,初始化时不存在,可指定需要手工创建
    # 默认1000,为允许用户注册的数量。defaults to "+inf"。
    # 为-1时,不允许用户通过npm adduser注册。
    # 但是,当为-1时,可以通过直接编写htpasswd file内容的方式添加用户
    max_users: 1000

# a list of other known repositories we can talk to
uplinks:
  taobao:
    url: https://registry.npm.taobao.org/
  npmjs:
    url: https://registry.npmjs.org/

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

  '**':
    # allow all users (including non-authenticated users) to read and
    # publish all packages
    #
    # you can specify usernames/groupnames (depending on your auth plugin)
    # and three keywords: "$all", "$anonymous", "$authenticated"
    access: $all

    # allow all known users to publish/publish packages
    # (anyone can register by default, remember?)
    publish: $authenticated
    unpublish: $authenticated

    # if package is not available locally, proxy requests to 'npmjs' registry
    proxy: taobao

# You can specify HTTP/1.1 server keep alive timeout in seconds for incoming 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 enough.
#server:
#keepAliveTimeout: 60

middlewares:
  audit:
    enabled: true

https:
  key: ./ssl/g.civnet.cn.key
  cert: ./ssl/g.civnet.cn.pem

notify:
  method: POST
  headers: [{ 'Content-Type': 'application/json' }]
  endpoint: http://172.16.10.33:3000/ # https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
  content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'

# log settings
logs:
  - { type: stdout, format: pretty, level: http }
  #- {type: file, path: verdaccio.log, level: info}
#experiments:
#  # support for npm token command
#  token: false
#  # support for the new v1 search endpoint, functional by incomplete read more on ticket 1732
#  search: false
```

5. 试运行一下 verdaccio 看有无报错

```
npx verdaccio
# 能够正常打开并使用'http://192.168.12.8:4873即为正常
```

5. 下载[nssm](https://www.nssm.cc/download/)注册 verdaccio 作为 windwos 服务

- cmd 进入刚下载好 nssm.exe 根目录
- 打开安装交互界面

```bash
nssm install  npmjs
# npmjs 是你的服务名
```

- 配置如下: Path: node Startup directory: f:\verdaccio Arguments: f:\verdaccio\node_modules\verdaccio\build\lib\cli.js -c f:\verdaccio\config.yaml

6. 启动服务大功告成!服务器目录如下图 ![目录](https://g.civnet.cn:5010/images/npm/verdaccio.png)