Verdaccio 是一个 Node.js创建的轻量级私有npm仓库,因其易安装、易操作、较稳定的特点,在很多开发团队中广为流传。
创建一个包
mkdir npm-publish-test # 包文件夹 cd npm-publish-test npm init # npm初始化接着,就可以开始开发包了,以下是几个注意点
每次提交前需要在package.json中国控制好包的版本号(version)在包根目录下添加README.md,对包的使用进行说明(对同事友好一些)添加.gitignore文件,别把没用的东西传上去上传之前,最好将代码转译为es5低版本语法,不然别人引用你的包,在低端浏览器会报错当然,如果你不想转化为es5,也不是不可以,使用者可以通过babel配置转译node_modules中的包,详细操作见下文 使用者下载包并使用 -> 4.配置babel转译,兼容IE发布包
npm publish 查看发布的包 直接在浏览器中输入私服ip+端口,这里我是本地起的测试服务器,所以就是http://127.0.0.1:4873 可以看到,我们项目中添加的READM.md会在这里展示,还可以看到包的依赖、版本号控制使用者同样需要设置npm源为我们的私服地址,操作同上
如果verdaccio设置的权限不对所有人开放,那么使用者也需要注册并登录才能进行下载,操作同上
下载包,跟正常从npm仓库下载一样,也可以使用@指定版本号
npm install --save npm-publish-test # 下载最新版本 npm install --save npm-publish-test@1.0.1 # 指定版本号下载配置babel转译,兼容IE,按照下面方式分别配置vue.config.js和babel.config.js文件
// vue.config.js const vueConfig = { // ... // 取消babel loader对node_modules中指定包的忽略 transpileDependencies: [ 'npm-publish-test' // 让babel转译我们的包 ] } // babel.config.js module.exports = { // ... sourceType: 'unambiguous' }sourceType: 表明代码应该解析的模式。可以是 "script","module" 或者 "unambiguous" 中任意一个。默认为 "script"。"unambiguous"将使得Babylon 尝试根据ES6的import 或者export声明来进行推测。具有 ES6 import和export的文件被认为是 "module",否则被认为是 "script"。
配置文件地址:~/.config/verdaccio/config.yaml verdaccio配置官方文档 配置文件原文(这里把源英文注释去掉,然后对每个配置项用注释的方式进行介绍):
注意:
配置文件中的./指的是当前配置文件所在目录,也就是~/config/verdaccio/ # 本地仓库的目录,用于存放我们上传的包和从npm服务器同步下来的包 storage: ./storage # 插件目录的位置。对Docker/Kubernetes 基础上的配置非常有用。 plugins: ./plugins # verdaccio启用的web应用相关配置,更多web-ui配置参考https://verdaccio.org/docs/zh-CN/webui web: # web页title title: Verdaccio # 注释掉以禁用gravatar支持 # gravatar: false # 包的排序,正序/倒序 (asc|desc) # sort_packages: asc # 深色模式 # darkMode: true # 权限认证相关 auth: # 用户密码管理 htpasswd: file: ./htpasswd # 用户密码存放位置 # 允许注册用户的最大值,默认1000,如果设置为-1不允许通过adduser添加用户,但是可以手动向htpasswd中添加用户 # max_users: 1000 # 上游链路,缓存中找不到用户下载包时向上游链路请求资源 uplinks: npmjs: # 这里最好修改位淘宝镜像 url: https://registry.npm.taobao.org/ # 包权限配置,@*/*scope包和**普通包的配置 packages: # 1. $all 所有用户 # 2. $authenticated 表示只有通过验证的人(已注册)可以执行对应操作,注意,任何人都可以去注册账户。 # 3. 或者也可以指定对应于之前我们配置的用户表 htpasswd 中的一个或多个用户,用空格分开即可 # 4. $anonymous 表示只有匿名者可以进行对应操作(通常无用) # scoped包 '@*/*': access: $all # 访问权限, publish: $authenticated # 发布权限 unpublish: $authenticated # 取消发布权限 proxy: npmjs # 如果请求的包不在服务器中,向配置的上游npmjs请求包 # 普通包 '**': access: $all publish: $authenticated unpublish: $authenticated proxy: npmjs # 服务器相关配置 server: keepAliveTimeout: 60 # 超时时间 # 中间件配置 middlewares: # npm 审核认证 audit: enabled: true # 输出日志配置 logs: # type: stdout --- 控制台输出; file --- 输出到文件 # path: 如果输出到文件类型,需要制定输出路径 # format: 输出格式 [pretty, pretty-timestamped] # level: 日志级别 [fatal, error, warn, http, info, debug, trace] - { type: stdout, format: pretty, level: http } # - {type: file, path: verdaccio.log, level: info}