请问多人协作开发一个 angularjs 项目时,如何避免互相影响? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
mistershi
V2EX    程序员

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

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

    我们正在用 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     Solana     2615 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 14:48 PVG 22:48 LAX 07:48 JFK 10:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86