"use strict";(self.webpackChunkfes_js=self.webpackChunkfes_js||[]).push([[617],{4148:(e,a,s)=>{s.r(a),s.d(a,{data:()=>n});const n={key:"v-d7fa887a",path:"/guide/contributing.html",title:"贡献指南",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:2,title:"包概览",slug:"包概览",children:[]},{level:2,title:"开发准备",slug:"开发准备",children:[]},{level:2,title:"贡献文档",slug:"贡献文档",children:[]},{level:2,title:"贡献源码",slug:"贡献源码",children:[]},{level:2,title:"提交PR",slug:"提交pr",children:[]}],filePathRelative:"guide/contributing.md",git:{updatedTime:1664185607e3,contributors:[{name:"wanchun",email:"445436867@qq.com",commits:1}]}}},5938:(e,a,s)=>{s.r(a),s.d(a,{default:()=>I});var n=s(6252);const l=(0,n._)("h1",{id:"贡献指南",tabindex:"-1"},[(0,n._)("a",{class:"header-anchor",href:"#贡献指南","aria-hidden":"true"},"#"),(0,n.Uk)(" 贡献指南")],-1),r=(0,n._)("h2",{id:"包概览",tabindex:"-1"},[(0,n._)("a",{class:"header-anchor",href:"#包概览","aria-hidden":"true"},"#"),(0,n.Uk)(" 包概览")],-1),c=(0,n.Uk)("项目仓库借助于 "),o={href:"https://classic.yarnpkg.com/zh-Hans/docs/workspaces",target:"_blank",rel:"noopener noreferrer"},i=(0,n.Uk)("Yarn 工作区"),t=(0,n.Uk)(" 来实现 "),d={href:"https://en.wikipedia.org/wiki/Monorepo",target:"_blank",rel:"noopener noreferrer"},p=(0,n.Uk)(" Monorepo"),u=(0,n.Uk)(" ,在 "),h=(0,n._)("code",null,"packages",-1),b=(0,n.Uk)(" 目录下存放多个互相关联的独立包。"),f=(0,n.uE)('

开发准备

开发要求:

',3),m={href:"http://nodejs.org",target:"_blank",rel:"noopener noreferrer"},g=(0,n.Uk)("Node.js v14+"),k={href:"https://classic.yarnpkg.com/zh-Hans/docs/install",target:"_blank",rel:"noopener noreferrer"},v=(0,n.Uk)("Yarn v1"),_=(0,n._)("p",null,"本项目开发使用的一些主要工具:",-1),j={href:"https://jestjs.io/",target:"_blank",rel:"noopener noreferrer"},x=(0,n.Uk)("Jest"),U=(0,n.Uk)(" 用于单元测试"),w={href:"https://eslint.org/",target:"_blank",rel:"noopener noreferrer"},y=(0,n.Uk)("ESLint"),W=(0,n.Uk)(" + "),q={href:"https://prettier.io/",target:"_blank",rel:"noopener noreferrer"},P=(0,n.Uk)("Prettier"),z=(0,n.Uk)(" 用于代码检查和格式化"),E=(0,n.uE)('

克隆仓库:

git clone https://github.com/WeBankFinTech/fes.js.git\n
1

进入fes.js目录,安装依赖:

yarn\n
1

贡献文档

',5),C=(0,n.Uk)("文档代码在"),H=(0,n._)("code",null,"docs",-1),R=(0,n.Uk)("目录,基于 "),A={href:"https://v2.vuepress.vuejs.org/zh/",target:"_blank",rel:"noopener noreferrer"},F=(0,n.Uk)("vuepress"),M=(0,n.Uk)(" 实现。"),Y=(0,n.uE)('

第一步:启动服务

yarn docs:dev\n
1

第二步:修改md文件

菜单配置在/docs/.vuepress/configs/sidebar/zh.ts中,可以通过此配置找到对应想修改的文档。

如果想添加图片,则可以先把图片添加至/docs/.vuepress/public,在代码中使用:

<img :src="$withBase('framework.png')" alt="架构">\n
1

第三步:查看更新

当md文档保存后,文档会自动更新,在http://localhost:8080/查看。

贡献源码

Fes.js统一使用ES Module规范编写源码,代码会在 node 端和浏览器端执行,所以源码需要编译后才能发布成包,再被执行。

启动编译服务

yarn dev\n
1

当我们修改build.config.js中配置的包代码时,会把src目录的源码编译后到lib目录。

修改源码

在了解Fes.js设计前提下,修改核心代码或者插件代码。

验证修改内容

根据需求选择模板项目来验证修改内容,比如选择fes-template

  1. 查看需待验证包是否已经添加到模板项目的依赖中,如果没有则在模板项目的 package.json 中添加包依赖,添加后在根目录执行yarn关联依赖
  2. 启动模板项目的开发服务
cd packages/fes-template\nyarn dev\n
1
2
  1. 在项目模板中添加代码验证修改内容
  2. 打开localhost:8000查看结果

快速调试技巧

每次修改插件或者核心代码后,等待自动编译完,需要在模板目录重新执行fes dev,比较费时费力。

可以先在模板的 .fes 目录中找到对应临时代码,更改逻辑,验证完后再将变更逻辑保存到正式文件中。

注意

直接修改临时文件切莫重新执行fes dev,修改会被覆盖。

提交PR

  1. fork项目!
  2. 创建你的功能分支: git checkout -b my-new-feature
  3. 本地提交新代码: git commit -am 'Add some feature'
  4. 推送本地到服务器分支: git push origin my-new-feature
  5. 创建一个PR
',26),B={},I=(0,s(3744).Z)(B,[["render",function(e,a){const s=(0,n.up)("OutboundLink");return(0,n.wg)(),(0,n.iD)(n.HY,null,[l,r,(0,n._)("p",null,[c,(0,n._)("a",o,[i,(0,n.Wm)(s)]),t,(0,n._)("a",d,[p,(0,n.Wm)(s)]),u,h,b]),f,(0,n._)("ul",null,[(0,n._)("li",null,[(0,n._)("a",m,[g,(0,n.Wm)(s)])]),(0,n._)("li",null,[(0,n._)("a",k,[v,(0,n.Wm)(s)])])]),_,(0,n._)("ul",null,[(0,n._)("li",null,[(0,n._)("a",j,[x,(0,n.Wm)(s)]),U]),(0,n._)("li",null,[(0,n._)("a",w,[y,(0,n.Wm)(s)]),W,(0,n._)("a",q,[P,(0,n.Wm)(s)]),z])]),E,(0,n._)("p",null,[C,H,R,(0,n._)("a",A,[F,(0,n.Wm)(s)]),M]),Y],64)}]])},3744:(e,a)=>{a.Z=(e,a)=>{const s=e.__vccOpts||e;for(const[e,n]of a)s[e]=n;return s}}}]);