• 请不要在回答技术问题时复制粘贴 AI 生成的内容
mistershi
V2EX  ›  程序员

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

  •  
  •   mistershi · Mar 6, 2016 · 4108 views
    This topic created in 3748 days ago, the information mentioned may be changed or developed.

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

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

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

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

    17 replies    2016-03-09 14:59:01 +08:00
    forsigner
        1
    forsigner  
       Mar 6, 2016
    只要组件化做的好, controller 的分层做的好, Dev A 的 controller 里的 js 出错是不会影响 Dev B 的调试的
    crysislinux
        2
    crysislinux  
       Mar 6, 2016
    按楼上说的分层做好,然后提交之前都确认下调试器 console 里有 js error 不。我感觉你是在说有人的 js 出错了,导致 js 整个不运行了
    mistershi
        3
    mistershi  
    OP
       Mar 6, 2016
    @crysislinux 是的。我说的就是这个意思。
    mistershi
        4
    mistershi  
    OP
       Mar 6, 2016
    @crysislinux 请问这个问题,如何处理呢?
    SoloCompany
        5
    SoloCompany  
       Mar 6, 2016 via iPhone
    开发环境不要打成一个包不就得了?
    litefy
        6
    litefy  
       Mar 6, 2016 via Android
    觉得可以用 git 来解决
    hosealee
        7
    hosealee  
       Mar 6, 2016
    做懒加载,用好依赖注入
    sfree2005
        8
    sfree2005  
       Mar 7, 2016
    1. 可以参考这个 style guide ,各种依赖更清晰更结构化: https://github.com/johnpapa/angular-styleguide/tree/master/a1
    2. 使用 git ,我想这个你们已经做了吧
    3. 使用 TTD 。 写 unit test 在先, 用 ngmock mock 下其他 Dev 的依赖,调试自己的就好 。
    sfree2005
        9
    sfree2005  
       Mar 7, 2016
    补充上一条: 其实也不一定要 TTD (个人觉得这个是最好), 你也可以开始调试的时候写 Unit test 也行。各种 testing 按照网上的教程就好, unit test 就是要 ngmock mock 掉那些依赖
    crysislinux
        10
    crysislinux  
       Mar 7, 2016
    @mistershi 不知道你们的任务是怎么分的。可以按照 route 切分任务,不同的人负责不同 route 下的实现,这样只要打包工具能跑过,且你不跑到其他人的 route 下,即使其他人的代码运行时会错误,你也应该也不会有问题
    mistershi
        11
    mistershi  
    OP
       Mar 7, 2016
    @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  
       Mar 8, 2016
    看了你的描述,我的想法是: 每个 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
       Mar 8, 2016
    @sfree2005 这个方法比较靠谱,可以解决我们的问题,感谢!。
    crysislinux
        14
    crysislinux  
       Mar 8, 2016
    看上面说的,你们开发的时候看效果都是部署在一起的么?
    mistershi
        15
    mistershi  
    OP
       Mar 9, 2016
    @crysislinux 现在的确是部署在一起的。只有一个环境。
    crysislinux
        16
    crysislinux  
       Mar 9, 2016
    @mistershi 这样就不太好。最好是开发的时候自己是自己的,然后合并到 develop 分支的时候再部署到测试服务器,测试好了再合并到 master
    mistershi
        17
    mistershi  
    OP
       Mar 9, 2016
    @crysislinux 是的。以前没想到,现在正在向这个模式去改变。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4524 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 10:04 · PVG 18:04 · LAX 03:04 · JFK 06:04
    ♥ Do have faith in what you're doing.