Javascript 模块化开发上线解决方案
最近又换部门了,好频繁地说。。。于是把这段时间搞的小工具们简单整理了一下,作了一个小的总结。这次用一个简单业务demo来向大家介绍一下Javascript模块化开发的方式和自动化合并压缩的一些自己的处理。
模块化开发已经有一些标准(AMD/CMD)而且现在也算比较普及了,其为开发人员提供了很大的方便。模块化开发可以按结构整理代码,将一些功能分小颗粒来实现,这样的代码维护起来会方便很多,也更灵活,更容易在一定程度上去满足各种需求的变更。
比如这是demo中的代码结构:

先说page目录,这里的每一个js文件对应于一个页面,这就是页面js的入口文件,所有的功能模块通过对应的js去加载。
general目录就是一般的针对业务的一些功能,比如这里的picView就是一个图片查看功能,该目录的定位是与业务紧密相关。
common目录就是相对业务要底层一些,属于基础组件,它可以在各业务模块中使用,组成业务相关的功能。
utils目录其实就是一个函数库,也跟业务没关系,只是实现一般常用小颗粒功能的封装。
lib目录就是放的第三方的一些库,比如jquery,requirejs
conf就是进行一些项目的配置
这样我们就可以把各功能按其职责分别扔到相应的目录下以实现各模块的分类。
我们在开发中的时候就可以像这样:
<script type="text/javascript" src="../js/lib/require.js"></script>
<script type="text/javascript" src="../js/conf/requireConf.js"></script>
<script type="text/javascript" src="../js/page/index.js"></script>
引入页面代码后,在页面入口文件进行开发了。
开发确实方便,不过上线的话,肯定不能直接这么上线,因为从前端优化的角度上讲,一般情况下我们是需要尽量减少请求的。现在的情况是模块越多,我们的请求肯定也会很多,性能就会受到影响。虽然模块化加载工具已经提供了处理方法(像requireJS有r.js来进行编译),但始终还是要依赖于require.js引导文件,这样会有点多余。于是我的处理方式就是将这些模块文件按页面合并后,再进行代码原生化处理,这要就去除了define/require的依赖,也就不再需要引入像require.js这样的引导文件(虽然在代码编写中需要有一些约束,不过还是能满足大部分情况吧。),使用方法就是在项目的build目录里进行grunt build就行了,具体可以在demo中尝试。
demo地址:
https://github.com/randomyang/javascript-module
而且大家可以根据代码里的注释自己切换不同情况看效果。
最后说明一下,这次讨论的应用场景只适合单文件一次引入的时候,如果是多文件或有业务交互中异步引入的方式,暂不在这次讨论之列,这里只是给大家提供一种开发方式的选择,谢谢。
Javascript 模块化开发上线解决方案的更多相关文章
- Javascript模块化开发-轻巧自制
Javascript模块化开发-轻巧自制 一.前言现在javascript的流行,前端的代码越来越复杂,所以我们需要软件工程的思想来开发前端.模块化是必不可少的,这样不仅能够提高代码的可维护性.可扩展 ...
- Javascript模块化开发,使用模块化脚本加载工具RequireJS,提高你代码的速度和质量。
随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试.模块化是一种非常好的代码组织方式,本文试着对Ja ...
- JavaScript模块化开发整理
在网上已经有很多关于模块化开发的文章了,这里还是按照自己的理解来整理一下. 随着项目文件的越来越大和需求的越来越贴近现实(我发现现在客户不如:一个领导说我要审批你们报上来的资料,系统发布以后用的还不错 ...
- JavaScript模块化开发的那些事
模块化开发在编程开发中是一个非常重要的概念,一个优秀的模块化项目的后期维护成本可以大大降低.本文主要介绍了JavaScript模块化开发的那些事,文中通过一个小故事比较直观地阐述了模块化开发的过程. ...
- JavaScript模块化开发&&模块规范
在做项目的过程中通常会有一些可复用的通用性功能,之前的做法是把这个功能抽取出来独立为一个函数统一放到commonFunctions.js里面(捂脸),实现类似于snippets的代码片段收集. fun ...
- 详解JavaScript模块化开发
什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了,jQuery,Ajax,Node.Js,MVC,MVVM等 ...
- 2.精通前端系列技术之JavaScript模块化开发 seajs(一)
在使用seajs模块化开发之前,直接在页面引用js会容易出现冲突及依赖相关的问题,具体问题如下 问题1:多人开发脚本的时候容易产生冲突(比如全局参数冲突,方法名冲突),可以使用命名空间降低冲突,不能完 ...
- JavaScript模块化开发实例
最近接触了一些JavaScript开发的例子,在这里与大家一起分享一下: 例子:当我们一个团队在写Js文件的时候,你一个人写的JS代码自己可以看懂也可以维护,但是别人想对你的JS进行扩展的话,如果都在 ...
- (转)详解JavaScript模块化开发
https://segmentfault.com/a/1190000000733959 什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来j ...
随机推荐
- 重新认识mapreduce
写这篇文章,是因为最近遇到了mapreduce的二次排序问题.以前的理解不完全正确.首先看一下mapreduce的过程 相信这张图熟悉MR的人都应该见过,再来一张图 wordcount也不细说了,ha ...
- Xcode同时兼容Xcode7和Xcode8,两个版本并存,也适用于先升8再安装7
先吐槽一下之前看到的一个教程,如下: 先在应用程序内,拷贝一份之前的xcode,然后再安装新版本,发现这种安装完成就是在之前上面迭代了 有木有?等于没任何作用 我这边就是不小心先升级了8,然后再安装 ...
- Linux IPC tcp/ip socket 编程
模型 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include < ...
- android JAVA字符串转日期或日期转字符串(转)
用法: SimpleDateFormat sdf = new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " ); 这一行最重要,它确立了转换的 ...
- Windows Azure 虚拟机的IP地址操作
Windows Azure上的一个虚拟机对应两个IP地址,VIP和DIP. VIP,公网IPv4地址,动态分配.虚拟机停止(deallocate,在管理控制台上关机或者使用PowerShell关机)后 ...
- [转]ASP.NET 成员资格 Part.1(API)
本文转自:http://www.cnblogs.com/SkySoot/archive/2013/04/08/3008418.html 表单验证解决了 ASP.NET 应用程序页面验证的问题,但另一方 ...
- MMORPG大型游戏设计与开发(part5 of net)
上一部分将服务器的具体代码的实现介绍给了大家,想必大家也了解到了服务器处理一次消息的复杂度.如果大家能够将各个过程掌握清楚,就会发觉其实整个逻辑与交互过程是比较清晰的.那么服务器与服务器之间的通讯,其 ...
- 【2016-10-13】【坚持学习】【Day4】【模板方法模式】
今天学习模板方法模式 例子代码; 模板抽象类,定义了一套流程,有一些方法已经实现,有一些抽象方法需要继承它的子类实现 abstract class DataViewer { //抽象方法:获取数据 p ...
- 【温故而知新-Javascript】使用canvas元素(第二部分)
本文将继续介绍canvas的功能,展示如何绘制更复杂的图形(包括圆弧和曲线),如何使用剪裁区域来限制操作以及如何绘制文本.还是介绍可以应用在画布上的特效和变换,包括阴影.透明度.旋转和坐标重映射. 1 ...
- POJ 1696 Space Ant --枚举,模拟,贪心,几何
题意: 有很多点,从最右下角的点开始走起,初始方向水平向右,然后以后每步只能向左边走,问最多能走多少个点. 解法: 贪心的搞的话,肯定每次选左边的与它夹角最小的点,然后走过去. 然后就是相当于模拟地去 ...