{"id":29926715,"url":"https://github.com/ecomfe/efe","last_synced_at":"2025-08-02T12:43:28.014Z","repository":{"id":27173818,"uuid":"30643511","full_name":"ecomfe/efe","owner":"ecomfe","description":"EFE guide","archived":false,"fork":false,"pushed_at":"2017-09-29T06:40:10.000Z","size":5,"stargazers_count":21,"open_issues_count":2,"forks_count":7,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-05-25T08:05:18.407Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ecomfe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-02-11T10:52:22.000Z","updated_at":"2025-02-07T16:34:06.000Z","dependencies_parsed_at":"2022-07-24T14:01:58.095Z","dependency_job_id":null,"html_url":"https://github.com/ecomfe/efe","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ecomfe/efe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecomfe%2Fefe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecomfe%2Fefe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecomfe%2Fefe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecomfe%2Fefe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ecomfe","download_url":"https://codeload.github.com/ecomfe/efe/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecomfe%2Fefe/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268392213,"owners_count":24243297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-02T12:42:55.374Z","updated_at":"2025-08-02T12:43:27.991Z","avatar_url":"https://github.com/ecomfe.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\nEFE\n====\n\n### 简介\n\n百度 EFE(Excellent FrontEnd) 技术体系，前身是 ECOM前端团队，后经过技术的发展，逐渐形成一套完善的前端技术体系。\n\nEFE 技术体系现由多个遵循该技术体系的前端团队所组成。E(Excellent) 代表我们追求卓越的技术态度。\n\n#### 技术委员会\n\nEFE 技术委员会简称 EFE-TC ，由`方向技术负责人`、`团队技术负责人`、`T7+工程师`组成，由 [EFE 主席](chair.md) 带领。\n\nEFE-TC 的主要职责是技术方向把握，在技术上决定 EFE 体系做什么、怎么做、不做什么。\n\n#### 技术方向\n\nEFE技术体系划分了五个技术方向。下面列表中，`@`后面的人为方向负责人。\n\n- Data Visualization @pissang\n- Interface @Justineo\n- Mobile @firede\n- Platform @leeight\n- RIA @otakustay\n\n\n### 技术价值观与要求\n\n\n#### 精细化\n\n- 在技术和方案设计上深思熟虑。应用面越广的技术产品，错误的设计与实现带来的危害和影响面越大。\n- 代码质量需要严苛要求，极端情况下因为项目排期紧张导致需要妥协，也应该给出改进时间和计划并严格实施，不得二次拖延。\n- 对于问题要明确“做什么（What）”、“为什么（Why）”、“怎么做（How）”，不得以个人经验或者喜好进行技术判断。\n- 设计、方案、开发过程需要有记录，便于追溯。\n- 无GUI类产品，测试用例需要覆盖完全。有GUI类产品可自由把握。\n- 技术产品不允许为了抢占地盘，快速挖坑粗糙实现，然后在不成熟的时候大范围铺开应用。\n- 技术产品需要有完善的文档。\n- 技术产品需要有使用样例。\n\n#### 开源\n\n业务无关的纯技术产品，必须开源，并且代码托管在github上。包括库、框架、工具等。\n\n纯技术产品的设计、方案选型、开发过程运作需要在github issue上公开、有记录。通过实时聊天工具或邮件达成的技术方案等结论，也需要事后在github issue上记录存档。问题、改进建议等用户反馈，也需要通过github issue进行。\n\n\n#### 持续性\n\n开源技术产品的维护要有持续性，不得出现找不到人、无人响应的现象。即使技术产品本身已经很完善，github issue中的问题和提议维护者需要持续回答。\n\n当维护者离职时，如果有兴趣可以继续维护，否则需要交接给其他有兴趣的人。\n\n\n#### 代码符合规范\n\n- JavaScript 代码符合[JavaScript Style Guide](https://github.com/ecomfe/spec/blob/master/javascript-style-guide.md)\n- HTML 代码符合[HTML Style Guide](https://github.com/ecomfe/spec/blob/master/html-style-guide.md)\n- CSS 代码符合[CSS Style Guide](https://github.com/ecomfe/spec/blob/master/css-style-guide.md)\n- LESS 代码符合[LESS Style Guide](https://github.com/ecomfe/spec/blob/master/less-code-style.md)\n\n[fecs](https://github.com/ecomfe/fecs) 工具可以对 JavaScript/HTML/CSS 代码进行检查。\n\n\n#### 采用模块化方式管理代码\n\n为了便于代码逻辑划分、依赖管理、系统分析与优化，在项目开发中必须使用模块化的方式，各种资源引用不得手工维护。允许使用的模块化方式有以下两种：\n\n1. 通过 [AMD](https://github.com/amdjs/amdjs-api) 进行模块化开发。使用该方式需要遵循[模块规范](https://github.com/ecomfe/spec/blob/master/module.md)\n2. 通过 [CommonJS Module](http://wiki.commonjs.org/wiki/Modules/1.1.1) 的方式开发，通过相应工具在开发时与构建时进行前端的运行包装。使用该方式，必须将 CommonJS 模块包装成 AMD。\n\n\n#### 对同类功能，有复用价值的代码集，通过 package 进行封装\n\n通常在前端项目中，库、框架、多业务共用的公共模块适合通过 package 进行封装。对 package 进行封装需要遵守[包结构规范](https://github.com/ecomfe/spec/blob/master/package.md)，该规范在 [CommonJS Package](http://wiki.commonjs.org/wiki/Packages) 下做了一些细化。\n\npackage 可以通过 [private npm](http://edp.baidu.com/) 和 [bower](http://bower.io/) 发布\n\n#### 项目的前端部分，目录结构符合规范\n\n1. 一个只包含前端代码的项目，整个项目必须符合[项目目录结构规范](https://github.com/ecomfe/spec/blob/master/directory.md)。\n2. 如果混合PHP、NodeJS等服务端代码的项目，项目的前端部分需要独立单独的目录，该目录的内部结构必须符合[项目目录结构规范](https://github.com/ecomfe/spec/blob/master/directory.md)。\n\n\n#### 通过同一个blog进行技术输出\n\n对外的技术输出必须统一使用 [EFE Site](http://efe.baidu.com/)。更新方法和内容要求参见 [ecomfe.github.io repos](https://github.com/ecomfe/ecomfe.github.io)\n\n### 加入EFE\n\n加入 EFE 的前端团队，需要符合上述技术价值观和遵循上述要求。\n\n#### 加入方法\n\n1. 联系 EFE 主席，要求加入。可说明加入理由和技术规划或方向。\n2. EFE 主席在 EFE-TC 发起讨论和投票。反对票少于 1/3 时，允许加入。\n\n#### 权利\n\n1. 获得至少一个加入 EFE-TC 的名额。\n2. 对[标准和规范](https://github.com/ecomfe/spec)发起增补和完善。\n3. 影响 EFE 的技术发展方向。\n4. 团队所有成员都可以在 [efe.baidu.com](http://efe.baidu.com/) 上增加内容，包括 Blog 文章和技术产品。\n5. 以 EFE 的名义进行符合 EFE 价值观与要求的技术的宣传。\n\n#### 义务\n\n1. 遵循上述技术价值观与要求\n2. 严格遵守[标准和规范](https://github.com/ecomfe/spec)\n\n\n### 常见问题\n\n#### EFE 的官方 repos 为啥在 ecomfe org 下？\n\n1. EFE 从 ECOMFE团队(现已解散)发展而来，之前的开源项目很多是放在这的，迁移成本太高。\n2. github上，EFE已经被别人先注册了。\n\n#### 团队的开源项目是否必须要放在 ecomfe org 下？\n\nEFE 只要求技术项目必须开源，托管在 github 上，但并不要求必须放在 ecomfe org 下。每个团队都可以有自己的 org，存放自己团队的开源项目。\n\n但是，下面两项资源需要共同维护，不得在自己团队的 org下单独建立：\n\n1. 标准与规范。需要统一使用[EFE spec](https://github.com/ecomfe/spec)\n2. Blog.需要统一维护[EFE blog](https://github.com/ecomfe/ecomfe.github.io)\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fecomfe%2Fefe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fecomfe%2Fefe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fecomfe%2Fefe/lists"}