Web 前端工程管理建议

Web工程管理需要解决好开发环境、目录和文件存储约定、底层技术选型、版本管理、模板管理、接口管理、部署上线等,接下来逐个分析梳理。

先给出几点建议:

  1. 项目在本地一定要在 http(s) 下运行

  2. 建议使用对应的业务域名,尽量不使用localhost,让本地环境、测试环境和生产环境尽量对称

  3. 工程代码和开发环境、辅助工具三者完全分离,不要把 node_modules 混入项目代码,需要的 lib 手工引入即可,通过 .gitignore(svn也有类似配置)过滤非工程代码

  4. 尽量不使用编译工具,如要使用,尽量文件对文件编译,避免编译整个工程
    解释:不是编译工具不好,而是大部分中小项目用不到,文件合并就已经可以满足绝大部分项目了

  5. 尽量不使用团队不掌握的技术,尤其要避免边做项目边练手,练手应该在项目之外进行,技术可以前卫,工程管理一定要保守,安全够用即可

这些建议都是出于工程管理而非技术的建议,目的只是为了让工程简单实用,不是为了讨论技术的优劣,请开发者评判选择。

再详细解释:

现在 web 项目大多采用前后端分离,本地开发环境使用 node,node兼具 web server 和 request proxy 的角色,也可以使用 apache、nginx 等方式,特别需要注意的是一定要使用 http(s) 协议进行开发调试,另外涉及接口通讯、跨域通讯等问题,建议约定好开发环境的域名,在业务主域名下分配子域使用,端口强烈建议都走默认80,在项目开发之前,先调通环境和 request 等基础问题。

强调:这点是非常关键的基础,一定要严格遵守,除了通讯,geolocation、 userMedia、rtc 等底层 API 也要求必须在域下才能调用。

版本管理一般采用git,需要约定好 branch 策略,什么情况下创建新 branch,什么情况下使用默认的 dev/qa/master 分支,如何协调 hotfix 和正常功能开发上线,commit 时建议附加精准的 log 信息,这些都需要内部梳理约定。

目录和文件存储约定,文件的命名规则、文件夹的命名规则、不同资源放在什么地方,独立模块的资源文件如何管理,也都需要明确,项目越大,这些约定越能避免混乱。

上面都还是一些基本逻辑,接下来的技术选型才是最大的问题,大部分项目都混乱在这块了,在做技术选型之前,必须充分了解业务需求,明确设备和浏览器兼容性要求,然后再进行技术选型。

技术选型时,建议采用保守策略,一定不要选择团队不熟悉的方式(如果一定需要,请在正式生产之前先做整团队训练),选择成熟的方案,选择更流通的技术方案,方便团队扩展;再根据项目的需求和团队的现状选择较为合适的方案,现在是一个双向绑定的时代,一定要选择一个双向绑定的框架,推荐vue,小巧精致,上手较为容易,如果项目不是特别大,也不建议使用模块化加载,普通的 script 引入即可。

非常非常重要的一个事情,千万不要把 node_modules 和工程文件混杂在一起,工程需要的 lib 建议手工引入独立文件,可以通过 npm install 开发环境需要的工具等,但需要在 .gitignore 配置好过滤,把所有非工程文件全部过滤掉不要提交。

Vue 示例:https://github.com/rongcloud/websdk-demo/blob/master/vue/require.html
React 示例:https://github.com/rongcloud/websdk-demo/blob/master/react/im.html
曾有开发者想用 require + vue,但选择了 vue-cli,整个工程非常冗余,不好,应该如示例般简洁优雅

常规 web 项目不建议使用 es6 开发,推荐使用兼容性好的原生方式进行开发,编译是个很好的思路,但是增加了开发调试的链路,增加了开发过程的复杂度,特殊文件,可以针对性的编译,尽量避免编译整个项目。

准备好环境,定义好目录,选择好底层技术,不要着急做项目,梳理好开发调试模式,通过简单页面验证确认,通用的逻辑也抽象实现,提供参考示例,比如请求接口的方案,本地数据缓存的策略,异常管理、错误管理、代码合并压缩混淆、上线流程及验证等。

模板推荐拆分成独立的小文件,统一放入 template 文件夹,通过 include 引入到静态页面调试,通过 script + include 以及 vue 的路径加载方式来生产使用,可以同步满足界面开发和功能开发的需要。

如果开发维护模板的人数较少,直接在页面中开发实现也没问题,也可以从 dom tree 里直接获取模板。

到了这儿,就可以项目开发了,代码参考 https://github.com/rongcloud/websdk-demo/tree/master/vue