背景我们公司目前开发的项目是一个用Vue搭建的后台管理应用。随着同构项目的逐渐增多,原来在一个项目中维护的组件也将在其他项目中使用,将组件作为业务需求,进行相应的升级和修改。这就导致在修改一个组件的时候需要将代码同步到其他项目中。所以非常需要组件仓库的存在,将通用组件和通用业务组件放在一个地方,在每个项目中通过npm实现版本管理。在寻找了一些解决方案之后,我们的团队决定使用Coding.net+Lerna提供的服务来实现我们组件仓库的构建。编码让我们先谈谈编码。为什么我们不选择租用服务器,搭建一个私有的npm仓库。主要是因为(界面漂亮)它集成了我们需要的所有服务,包括(但不限于)代码托管/产品库/便捷的权限管理/更好的交互体验/私人图书馆/免费?。关于付费问题,官网的价格政策是5人以下团队免费。我觉得可以满足很多小团队的需求。但免费用户只能创建20个项目。对于组件很多的项目,如果代码全部托管肯定是不够的,于是就有了Lerna的登场,将所有组件集成到一个项目中,还可以独立发布组件。步骤:注册coding账号,创建对应项目省略创建项目省略创建Coding产品库项目设置->功能切换->产品库启用产品库->新建打开产品库的引导页签。按照教程配置创建产品库后,配置本地npm关联我们的产品库npmconfiggetregistry=>https://registry.npmjs.org/yarnconfiggetregistry=>https://registry.yarnpkg.comnpmconfigsetregistry=(你的产品库地址)项目设置->开发者选项->项目令牌,新建一个代码仓库的账号;在控制台查看当前登录的用户npmwhoami,使用npmlogin登录新创建的用户或者使用accesstoken生成配置(推荐)Lerna相关操作这里省略Lerna的介绍,Lerna常用命令网上可以查到:lernainit#initializelernabootstrap#下载依赖包或生成本地软链接lernaaddaxios#将axioslerna添加到所有包中addpackageB--scope=packageA#添加依赖/packageA生成node_modules,node_modules生成指向packageB的软链接,类似npmlink效果lernapublishlernalistlernaclean自己项目中lerna.json的配置["ignored-file","*.md",//我们团队约定:更新文档不算组件更新"package.json"//每次更新版本,修改版本号的文件都会变成unavailable提交,所以排除]}},"version":"independent"//包独立发布}此时,我们在新建组件或更新组件时可以这样做:先将自己的代码提交到git仓库并根据需要执行lernapublish修改versi后上,您可以将您的组件发布到Coding的产品库中。目标项目下:npmitarget包名--registry=产品库地址(如果已经全局配置可以省略)。这里还有一个组件仓库项目问题是组件的调试。方法一:使用npmlink将包关联到目标项目进行调试方法二:在项目中添加测试环境项目目录和描述如下:├─packages//组件源文件|├─C选择||├─组件//子组件||├─package.json//组件描述文件||├─index.js//组件入口||├─c-select.vue||└─README.md//文档├─public|├─index.html|└─favicon.ico├─src//测试项目源文件|├─资产||└─日志o.png|├─组件||├─CodeEditor//使用所见即所得的代码编辑器,方便项目部署后调试不同参数|||├─index.js|||└─代码编辑器。查看|├─路由器||└─index.js|├─风格||├─index.scss||└─element-ui.scss|├─工具||├─index.js||└─api.js|├─意见||├─范例|||├─c-选择||||├─index.vue||||└─code.js||└─Home.vue|├─main.js|└─App.vue├─vue.config.js├─package.json├─lerna.json├─babel.config.js├─README.md├─.npmrc├─.gitignore├─.eslintrc.js├─.browserslistrc└─.DS_Store项目地址使用npmlink调试项目中npmlink的使用最后,你的团队是否也需要一个组件仓库?如果没有其他解决方案,您可以尝试此解决方案。祝大家玩的开心(手动搞笑~)
