使用maven结合requirejs管理前端脚本

已有的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)

时间: 2024-09-30 22:55:29

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

Maven创建并管理Web项目(上传Web项目的API的JAR到Nexus 私服上)

目录 1.简介 2.安装Eclipse Maven插件 3.用Eclipse创建Maven Web项目 4.配置settings.xml 文件并下载项目依赖的JAR,并上传Web项目的api的JAR到Nexus 私服 1.简介 Maven.Nexus 私服的安装和配置和Maven的优点在Maven和 Sonatype Nexus私服的安装.配置及使用入门已经有介绍了,这里就不在介绍了,今天我们要介绍Maven创建并管理Web项目,方便我们项目的开发和管理. 2.安装Eclipse Maven插件

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

该系列脚本结合日常工作,方便DBA做数据管理.迁移.同步等功能,以下为该系列的脚本,按照功能划分不同的包.功能有如下: 1)数据库对象管理(添加.修改.删除.禁用/启用.编译.去重复.闪回.文件读写.会话管理.表空用.用户/权限管理): 2)数据库分析: 3)数据库备份: 4)数据库同步: 5)数据库数据导出: 6)获取数据库对象源码: 7)数据库对比智能升级: ...... 更多功能请自行体验. 本系列包依赖于Oracle DBA管理包脚本系列系列(一)的脚本. EXEC PKG_DBMANA

maven 项目的管理

maven 项目的管理 项目的结构 src main java - pakeage test java - pakeage mvn的常用命令 mvn -v 查看版本 mvn compile 编译 mvn test 测试执行单元测试 mvn package 打包 生成jar包 mvn clean 删除 target mvn install 安装jar 包到本地 mvn 自动化生成项目结构 mvn archetype:generate 按照提示进行选择 mvn archetype:generate

二、Maven包的管理与更新

一.Maven中由pom.xml文件进行包管理,在我们创建的项目中找到这个文件并打开 project:文件中顶级元素 modelVersion指明POM使用的对象模型的版本.这个值很少改动 groupId:指明创建项目的组织或小组的唯一标识.GroupId是项目的关键标识,典型的,此标识以组织的完全限定名来定义.比如,org.apache.maven.plugins是所有maven插件项目制定的groupId. artifactId:指明此项目产生的主要产品的基本名称.项目的主要产品通常为一个J

简述WEB项目前端脚本的一次重构历程,labJs,requireJs实践[转载]

重构前的状态:    大量的js代码混在繁多的Jsp文件中,对第三方的js库依赖也很杂乱.虽然在部分交互性较强的页面中,将js代码分离到了独立的js文件中,但是代码结构及依赖管理依然很乱.不说新人来了无所适从,就是我自己看了,也会一头雾水.不是代码有多深奥,是看着实在太累.于是,一次重构工作开始了. 重构中的事情:    1.首先,整个项目的页脚页头都有用到一些js和js库,这些具有共性的js先抽离到一个独立的head.js与foot.js中,放到include文件夹下.    2.对于公用的j

Java+TestNG+Maven+Selenium的web自动化测试脚本环境的搭建

一.环境搭建 1.安装java环境 a. 安装JDK b.安装eclipse c.安装maven 参考:http://www.cnblogs.com/s1328/p/4620812.html 2.安装eclipse下的testng插件 Eclipse中点击Help->Install new software -> 点击Add 在Location输入 http://beust.com/eclipse 选中Testng版本,点击Next,按照提示安装,安装完之后重启Eclipse 3.安装fire

maven的命令程序mvn脚本分析

    最近公司将svn迁移到git,而且使用maven管理代码仓库,所以小小的研究了一下,为自动化持续集成做知识准备,以下是分析了maven的命令程序mvn:     总体感觉与tomcat的启动脚本startup大同小异 #!/bin/sh # ---------------------------------------------------------------------------- # Licensed to the Apache Software Foundation (AS

基于angularJS和requireJS的前端架构

1.概要描述 1.1.angularJS描述:angularJS是可以用来构建WEB应用的,WEB应用中的一种端对端的完整解决方案.通过开发者呈现一个更高层次的抽象来简化应用的开发.最适合的就是用它来构建一个CRUD应用,它提供了非常方便的且统一高效的解决方案,其数据绑定.基本模版标识符.表单验证.路由.深度链接.组件重用.依赖注入.以及HTML标记等,最受欢迎的莫过于它的双向数据绑定. 1.2.requireJS描述:requireJS是来解决传统的页面加载script标记操作,通过其初始化配

Maven项目构建管理

一.Maven的作用 在开发中,为了保证编译通过,我们会到处去寻找jar包,当编译通过了,运行的时候,却发现"ClassNotFoundException",我们想到的是,难道还差jar包? 每个Java项目的目录结构都没有一个统一的标准,配置文件到处都是,单元测试代码到底应该放在那里也没有一个权威的规范. 因此,我们就要用到Maven(使用Ant也可以,不过编写Ant的xml脚本比较麻烦)----一个项目管理工具. Maven主要做了两件事: 统一开发规范与工具 统一管理jar包 二