已有的web项目,一直使用Maven做工程管理,现阶段前端调整为使用requirejs来负责模块加载依赖,同时使用jasmine来完成前端的UT。

便与在maven下统一管理,简单整理了下合在一起的使用,Maven,require,jasmine三者技术细节自去google

一、使用requirejs做模块依赖管理。

叙述下前提摘要

1、为什么使用requirejs

项目越来越大,前端越来越重要,代码越来越多,缺乏有效的管理。于是关注到业内的AMD规范。

AMD规范全称是Asynchronous Module Definition,即异步模块加载机制,完整描述了模块的定义,依赖关系,引用关系以及加载机制,requirejs是该规范的一个比较好的实现,于是……采用

2、如何使用requirejs

define,require等语法不必多说,参考API文档http://www.requirejs.cn/

这里其实还得说回前端代码的结构划分,依据我们已有的工程代码,简单整理了如下结构,希望对大家有用。

前端按照后端领域模型开发的方式,同时有针对性的提出UI库,模板库划分

Lib

依赖库

Basic

基础,设计命名空间、版本定义、BaseType定义等。

Model

模型对象,类似后台的bean

onepiecework

业务逻辑库,可以存放统一复杂业务逻辑在前端的调用,处理代码。

UI

前端UI库

业务逻辑的服务大家都比较认同,但是关于UI,大家总觉得太low,或者有细节差异等等。但是,建议千万不要到处复制粘贴,如果相似,抽取公共部分,这个位置就是专为此准备的)

view

最终与html打交道的js脚本,control层

Commonjs

requireConfig文件,提供全局加载路径、lib库等的管理

测试目录对照开发目录,清晰(喜欢maven这一点

二、使用maven来处理对requirejs工程的混淆和编译打包

【注】exec插件的调用命令mvn exec:exec

代码压缩混淆会影响到UT,建议在最终打包时调用,当前工程定义混淆专属的profile,需要在测试执行时-P指定,完整命令为 mvn exec:exec -PjsCompile

1、r.js,熟悉requirejs的大伙对此肯定不生疏。

使用思路很简单,在maven中配置exec-maven-plugin 插件来调用本地编写好的bat命名,命令很简单,核心就一句。可以参考build目录下的build.bat

node r.js -o buildConfig.js

buildConfig.js, 压缩混淆配置,制定对js代码进行压缩,合并的规则。

细节API依旧不说,参考这http://www.yfznw.com/node/22

完了?没完

2、上面的东东大家学习下也就都会了,问题是如何最终发布。压缩合并我们最终考虑的是前端性能,那么在前段展示时需要考虑另外一个就是依赖库的加载性能。

规则:

  • 一定得做合并,工程为了清晰我们代码很分散,不合并前端得加载20+js
  • lib库千万不要合并到自己的业务库中
  • 重复的库提取重复部分

这个和上面的工程分割有关联,大家看的过程中可以翻回去看看

对比下多种方案

  1. 针对最终的每个view,提供除了lib库依赖的独立js

页面相互独立,比较少有公共逻辑,那就这么干

  1. 如果是对外提供的类似SDK库,那就把所有的js文件压缩成为一个,类似jquery.js

前端SDK开发者,不多说什么,吧你们需要整体对外提供的东东打一个包

  1. 如果是上面两者的过渡体(常态)
  • 建议按照硬结构,先提取Basic和Util模块,合并
  • 软结构(业务功能),相关联业务模块合并压缩到一起。
  • UI库最好独立打成一个lib,太大的话按照UIKu类型分割,类似bootstrap的插件划分哪种方式

其他东东不好说,业务太复杂,不能妄论。

3、针对上面3),如何提供自己的subLib库,不被合并到最终的view.js中,又能将分散的多文件合并到一起呢。

module中,定义自己的模块,然后再view中排除掉

完了,真的完了

三、jasmine的UT测试

这里按照官方的示例简单搭建了下,给个链接

http://searls.github.io/jasmine-maven-plugin/amd-support.html

示例代码git工程

https://github.com/searls/jasmine-maven-plugin/tree/master/src/test/resources/examples/jasmine-webapp-amd-support

上述示例工程源码提交到了oschina上( http://git.oschina.net/hansj/maven-require)

使用maven结合requirejs管理前端脚本的更多相关文章

  1. 使用bower管理前端依赖

    bower,类似于npm.maven等后端管理构建工具一样,bower可以用来管理前端浏览器依赖,关于bower详细介绍参考官网:https://bower.io/ bower init命令:初始化项 ...

  2. 基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程

    项目简介 vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 + Element Plus 版本的后台管理前端解决方案,是 有来技术团队 继 youla ...

  3. 使用gulp解决RequireJS项目前端缓存问题(一)

    1.前言 前端缓存一直是个令人头疼的问题,你有可能见过下面博客园首页的资源文件链接: 有没有发现文件名后面有一串不规则的东东,没错,这就是运用缓存机制,我们今天研究的就是这种东西. 先堵为快,猛戳链接 ...

  4. MS SQL 日常维护管理常用脚本(二)

    监控数据库运行 下面是整理.收集监控数据库运行的一些常用脚本,也是MS SQL 日常维护管理常用脚本(一)的续集,欢迎大家补充.提意见. 查看数据库登录名信息   Code Snippet SELEC ...

  5. Oracle DBA管理包脚本系列(二)

    该系列脚本结合日常工作,方便DBA做数据管理.迁移.同步等功能,以下为该系列的脚本,按照功能划分不同的包.功能有如下: 1)数据库对象管理(添加.修改.删除.禁用/启用.编译.去重复.闪回.文件读写. ...

  6. Asp.Net Core 2.0 项目实战(3)NCMVC角色权限管理前端UI预览及下载

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  7. Maven的依赖管理

    我们知道dependencies是可以被继承的,这个时候我们就想到让我们的发生了共用的依赖元素转移到parent中,这样我们又进一步的优化了配置.可是问题也随之而来,如果有一天我创建了一个新的模块,但 ...

  8. 着重基础之—构建工具—Maven的依赖管理

    着重基础之—构建工具—Maven的依赖管理 项目构建利器Maven给我们开发人员带来了极大的便利,从繁琐的jar包管理中脱身的程序员终于可以有时间再进入另一个坑了. 我今天要给大家分享的内容是我在实际 ...

  9. maven 实践 :管理依赖

    有人认为Maven是一个依赖管理工具,当然这种想法是错误的(确切的说Maven是一个项目管理工具,贯穿了整个项目生命周期,编译,测试,打包,发布...),但Maven给人造成这种错误的印象也是有原因的 ...

随机推荐

  1. UVA 10160 Servicing Stations(状态压缩+迭代加深)

    [题目链接] LInk [题目大意] 给出一些点和边,选择一个点就能把这个点和相邻的点都覆盖,求最小点覆盖 [题解] 我们压缩点被覆盖的状态,迭代加深搜索覆盖的最小点数, 当剩余的点全部选上时都无法完 ...

  2. golang垃圾回收

    常见GC算法 我总结了一下常见的 GC 算法.分别是:引用计数法.Mark-Sweep法.三色标记法.分代收集法. 1. 引用计数法 原理是在每个对象内部维护一个整数值,叫做这个对象的引用计数,当对象 ...

  3. Oracle TRCA 工具 说明 10046

    本篇文章主要介绍了"Oracle TRCA 工具 说明 ",主要涉及到Oracle TRCA 工具 说明 方面的内容,对于Oracle TRCA 工具 说明 感兴趣的同学可以参考一 ...

  4. RedisTemplate SerializationFailedException: Failed to deserialize payload 异常解决

    问题描述: 使用RedisTemplate(spring-data-redis )进行redis操作的封装 , 现有一个incr的key , 当调用incr后返回值一切正常, 当对此key进行get调 ...

  5. 直接拿来用!最火的iOS开源项目(二)

    每一次的改变总意味着新的开始.”这句话用在iOS上可谓是再合适不过的了.GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有 ...

  6. Thunderbird使用发邮件模板

    Thunderbird的强大之处是可以使用多种第三方插件,其中有个插件SmartTemplate4,是用来设置Thunderbird发件模板的. 然后,模板设置内容如下: <p>:< ...

  7. 'dict_values' object does not support indexing, Python字典dict中由value查key

    Python字典dict中由value查key 众所周知,字典dict最大的好处就是查找或插入的速度极快,并且不想列表list一样,随着key的增加越来越复杂.但是dict需要占用较大的内存空间,换句 ...

  8. scrapy安装使用教程

    1. 安装Python,我用的是Python2.7.11,你喜欢用什么版本,你开心就好,只是后面的软件有些可能需要配套. 2. 安装pip,下载pip-8.1.2.tar.gz (md5, pgp). ...

  9. 利用CMD查看系统硬件信息

    利用CMD查看系统硬件信息对于在windows下查看系统信息大家一定不陌生了,我现在说几个最常用的方法,对命令感兴趣的朋友看看,(给菜鸟看的,老手就不要笑话我了,大家都是从那个时候过来的,^_^).一 ...

  10. C++中的模板学习

    https://www.cnblogs.com/eleclsc/p/5918114.html