组件化以后,搭建 “私有 npm 仓库” 是个不错选择。html
私有 npm 仓库可让咱们使用组件就像 npm 官方仓库里的包同样方便。node
通常私有 npm 仓库有如下一些特性:mysql
目前比较好的解决方案有两种:linux
sinopia 在15年的时候就中止更新了,继而由 verdaccio 提供更新升级,因此二者用法基本上都是一致的,如下都以 sinopia 为例说明。nginx
$ npm install -g sinopia
配置文件位于 ~/.config/sinopia/config.yaml
中git
# path to a directory with all packages storage: /home/{user}/.local/share/sinopia/storage # 库存路径,须要考虑磁盘空间 web: # 自定义web项,即浏览器访问页面 title: Sinopia auth: htpasswd: file: ./htpasswd # 添加用户(npm adduser)后自动建立,保存用户信息,能够初始化用户 uplinks: # 能够配置多个上游地址,后面packages中的proxy指定用哪一个 npmjs: url: https://registry.npm.taobao.org/ # 更改此上游地址 packages: # 包的权限管理,$all为全部人,$authenticated为经过验证人 # 分布和安装两种权限,值能够特指某几人 '@*/*': # 跟package.json中的name属性进行匹配 # scoped packages access: $all publish: $authenticated '*': access: $all publish: $authenticated proxy: npmjs logs: - {type: stdout, format: pretty, level: http} listen: 0.0.0.0:4873 # 设置监听地址,0.0.0.0匹配本机地址
更多配置参考 sinopiagithub
$ npm config set registry http://{服务器ip}:4873/
推荐使用 nrm 来快速切换 npm registry 配置。web
sinopia
或者使用 pm2 永久运行sql
pm2 start sinopia
如今你就能够发布私有包了。数据库
sinopia
的优势是配置简单,对环境依赖少(仅 node 就够了),而且支持 windows
系统下运行。
但它也有缺点,主要是如下几点:
因此,sinopia
比较适合我的搭建在本地做为 npm 缓存,这样,安装过的包会直接从缓存中获取,加快安装速度。
对于企业级的应用来讲,就须要另一个解决方案了:cnpm + cnpmjs.org
环境依赖:
$ npm install -g cnpm $ npm install -g cnpmjs.org
配置文件位于 ~/.cnpmjs.org/config.json
中
{ "debug": false, // 是否启动 debug 模式 "enableCluster": true, // 是否启用 cluster 模式 "mysqlServers": [ // 数据库配置,以 mysql 为例 { "host": "host", "port": 3306, "user": "user", "password": "password" } ], "mysqlDatabase": "cnpmjs", // 数据库名 "enablePrivate": true, // 是否启用私有化,这样只有定义在 `admins` 中的用户才能发布 "admins": { // 管理员配置,能够配置多个 "senntyou": "jiangjinbelief@163.com" }, "syncModel": "exist", // 同步模式 "scopes": [ // 包前缀,若是不是以这个前缀命名的包将不能发布,能够配置多个 "@test" ], "registryHost": "http://your.company.npm.registry.com", // 你的服务器对应的 npm registry 地址 "sourceNpmRegistry": "https://registry.npm.taobao.org" // 若是在该仓库中找不到的包,会上游到哪里去找 }
更多配置参考 cnpmjs.org config
$ cnpm config set registry http://your.company.npm.registry.com
cnpmjs.org start
运行的时候将会开启两个端口:7001(registry),7002(web)。
用来在命令行发布,下载包等对用的远程 registry 地址。好比一些比较经常使用的 registry 地址:
npm
: https://registry.npmjs.org/ npm 官方仓库地址cnpm
: http://r.cnpmjs.org/ cnpmjs.org 官方仓库地址taobao
: https://registry.npm.taobao.org/ 淘宝 NPM 镜像用 nginx 配置 url 地址到 7001 端口:
server { listen 80; listen [::]:80; server_name your.company.npm.registry.com; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:7001; } location ~ /.well-known { allow all; } client_max_body_size 50m; }
重启 nginx,如今你就能够经过 http://your.company.npm.registry.com
去发布私有包到这个仓库里了(若是没有其余问题的话)。
用来在 web 端查看仓库信息,搜索包,包信息等。好比一些比较经常使用的地址:
用 nginx 配置 url 地址到 7002 端口:
server { listen 80; listen [::]:80; server_name your.company.npm.com; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:7002; } location ~ /.well-known { allow all; } client_max_body_size 50m; }
重启 nginx,如今你就能够经过 http://your.company.npm.com
访问仓库web页面了(若是没有其余问题的话)。
若是仅经过 cnpmjs.org start
运行,一旦关闭终端,程序就会中止运行。推荐使用 screen
命令开启永久运行,能够经过 Linux screen 了解下这个命令的用法。
# 建立一个名为 cnpmjs 的窗口 $ screen -S cnpmjs # 运行程序 $ cnpmjs.org start # 按Ctrl+a,而后再按d,离开当前窗口,而程序不会终止 Ctrl+a+d # 从新进入 cnpmjs 的窗口,作更多的操做 $ screen -r cnpmjs
上一篇:组件化
下一篇:单页面应用(SPA)、按需加载
参考文章:
更多博客,查看 https://github.com/senntyou/blogs
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)