V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mistershi
V2EX  ›  程序员

请问多人协作开发一个 angularjs 项目时,如何避免互相影响?

  •  
  •   mistershi · 2016-03-06 13:20:43 +08:00 · 3443 次点击
    这是一个创建于 3168 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们正在用 angularjs 开发一个项目,前端是 mvc 的结构,有一个统一的入口文件 index.html

    每个功能模块的逻辑都在不同的 controller 里面, index.html 会加载所有的 controller 文件

    可是,多人协作开发过程中时,如 Dev A 的 controller 里面 js 出错了,就会导致 Dev B 无法正常调试。

    请问大家如何解决这个问题的呢?

    17 条回复    2016-03-09 14:59:01 +08:00
    forsigner
        1
    forsigner  
       2016-03-06 13:35:39 +08:00
    只要组件化做的好, controller 的分层做的好, Dev A 的 controller 里的 js 出错是不会影响 Dev B 的调试的
    crysislinux
        2
    crysislinux  
       2016-03-06 15:28:03 +08:00
    按楼上说的分层做好,然后提交之前都确认下调试器 console 里有 js error 不。我感觉你是在说有人的 js 出错了,导致 js 整个不运行了
    mistershi
        3
    mistershi  
    OP
       2016-03-06 15:59:41 +08:00
    @crysislinux 是的。我说的就是这个意思。
    mistershi
        4
    mistershi  
    OP
       2016-03-06 16:00:20 +08:00
    @crysislinux 请问这个问题,如何处理呢?
    SoloCompany
        5
    SoloCompany  
       2016-03-06 16:03:58 +08:00 via iPhone
    开发环境不要打成一个包不就得了?
    litefy
        6
    litefy  
       2016-03-06 16:59:48 +08:00 via Android
    觉得可以用 git 来解决
    hosealee
        7
    hosealee  
       2016-03-06 23:51:46 +08:00
    做懒加载,用好依赖注入
    sfree2005
        8
    sfree2005  
       2016-03-07 05:57:04 +08:00
    1. 可以参考这个 style guide ,各种依赖更清晰更结构化: https://github.com/johnpapa/angular-styleguide/tree/master/a1
    2. 使用 git ,我想这个你们已经做了吧
    3. 使用 TTD 。 写 unit test 在先, 用 ngmock mock 下其他 Dev 的依赖,调试自己的就好 。
    sfree2005
        9
    sfree2005  
       2016-03-07 06:05:33 +08:00
    补充上一条: 其实也不一定要 TTD (个人觉得这个是最好), 你也可以开始调试的时候写 Unit test 也行。各种 testing 按照网上的教程就好, unit test 就是要 ngmock mock 掉那些依赖
    crysislinux
        10
    crysislinux  
       2016-03-07 14:18:04 +08:00
    @mistershi 不知道你们的任务是怎么分的。可以按照 route 切分任务,不同的人负责不同 route 下的实现,这样只要打包工具能跑过,且你不跑到其他人的 route 下,即使其他人的代码运行时会错误,你也应该也不会有问题
    mistershi
        11
    mistershi  
    OP
       2016-03-07 15:46:56 +08:00
    @crysislinux

    我们的任务是按照大功能分的。每人负责一个大功能。例如 A 负责用户(包括用户注册、登录、退出等等), B 负责文章(包括文章列表、显示、评论等等)。

    我们的 index.html 是入口文件。这个文件里加载了所有人写的 js 功能文件。例如:
    controller/user.js (由 A 编写)
    model/user.js (由 A 编写)
    controller/articel.js (由 B 编写)
    model/articel.js (由 B 编写)

    调试时,每个人都是用浏览器看效果。打开的方式是:
    http://server_ip/index.html#/user
    http://server_ip/index.html#/article

    ---------

    现在的问题是:
    在开发过程中,如果 A 用户写的 user.js 出现了错误(例如语法错误),那么就会导致 B 用户无法在浏览器中调试。因为大家的 js 文件都是被 index.html 统一加载进来的。

    我想问的就是,如何解决这个互相冲突的问题

    (也不知道我说明白了没有)
    sfree2005
        12
    sfree2005  
       2016-03-08 08:48:43 +08:00
    看了你的描述,我的想法是: 每个 Dev 都有自己的 Working Copy , 也就是

    Dev A 调试在 http://serverA_ip/index.html#/user
    Dev B 调试在 http://serverB_ip/index.html#/article

    大家都把调试好的功能 git merge 到
    http://server_ip/

    这就需要团队各个成员明白 git workflow ,这样就不会互相干扰。

    如果 Dev B 调试时需要 Dev A 的正在调试的某个依赖,就用 Unit Testing 来 mock
    mistershi
        13
    mistershi  
    OP
       2016-03-08 10:16:19 +08:00
    @sfree2005 这个方法比较靠谱,可以解决我们的问题,感谢!。
    crysislinux
        14
    crysislinux  
       2016-03-08 20:18:10 +08:00
    看上面说的,你们开发的时候看效果都是部署在一起的么?
    mistershi
        15
    mistershi  
    OP
       2016-03-09 13:08:07 +08:00
    @crysislinux 现在的确是部署在一起的。只有一个环境。
    crysislinux
        16
    crysislinux  
       2016-03-09 14:37:59 +08:00
    @mistershi 这样就不太好。最好是开发的时候自己是自己的,然后合并到 develop 分支的时候再部署到测试服务器,测试好了再合并到 master
    mistershi
        17
    mistershi  
    OP
       2016-03-09 14:59:01 +08:00
    @crysislinux 是的。以前没想到,现在正在向这个模式去改变。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1123 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:40 · PVG 02:40 · LAX 10:40 · JFK 13:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.