初学seaJs模块化开发,利用grunt打包,减少http请求
原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求
未压缩合并的演示地址:demo2
学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构
js —
—dist //压缩后的目标文件夹
—lib //各个模块
—drag //拖拽模块
—scale //缩放模块
—seajs //seajs库
—seajs_drag //入口的主文件main.js
—main.js
/*———————————————————————————————————————————–*/
首先是seajs_drag.html
<input type="button" id="inp" value="点击显示红色方框" /> <div id="div1">
<div id="div2"></div>
</div> <div id="div3"></div> <script src="js/lib/seajs/sea.js"></script>
<script> seajs.config({
base : "./"
}); seajs.use('js/dist/drag.js'); //引入压缩合并后的单个文件,如果没有压缩,这里则为请求main.js </script>
main.js中分别引入模块的功能(拖拽,缩放),这样后面如果增加了功能只需在主文件main.js中引入即可。
define(function(require, exports, module){
var inp = document.getElementById("inp");
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
var div3 = document.getElementById("div3"); var drag = require('../lib/drag/drag.js');
drag.drag(div3);
// require("../lib/drag/drag.js").drag(div3); // require('../lib/modal/modal.js');
inp.onclick = function () {
div1.style.display = "block"; // var scale = require('../lib/scale/scale.js');
// scale.scale(div1, div2);
// 按需异步加载
var scale = require.async('../lib/scale/scale.js', function(e){
e.scale(div1, div2);
}); }
})
/*———————————————————————————————————————————–*/
然后是利用grunt打包
package.json为
{
“name”: “drag”,
“version”: “1.0.0”,
“description”: “this is a grunt example for seajs”,
“main”: “Gruntfile.js”,
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1″
},
“author”: “”,
“license”: “ISC”,
“devDependencies”: {
“grunt”: “^0.4.5″,
“grunt-cmd-concat”: “^0.2.8″,
“grunt-cmd-transport”: “^0.5.1″,
“grunt-contrib-clean”: “^0.6.0″,
“grunt-contrib-copy”: “^0.8.0″,
“grunt-contrib-uglify”: “^0.9.1″
}
}
可以下载代码包后,npm install,一般npm init后就会生成初始的内容,然后npm install 包名 -save-dev 就会添加到package.json中
Gruntfile.js文件内容
module.exports = function(grunt) { grunt.initConfig({
/**
* step 1:
* 将入口文件拷贝到 产出目录
*/
copy: {
hellosea:{
files:{
"js/dist/drag.js" : ["js/seajs_drag/main.js"]
} }
}, /**
* step 2:
* 创建一个临时目录
* 将需要合并的js文件转为具名函数,并保持独立地保存在这个临时目录
*/
transport: {
drag: {
options: {
// // 是否采用相对地址
relative: true,
// // 生成具名函数的id的格式 默认值为 {{family}}/{{name}}/{{version}}/{{filename}}
format: './js/dist/{{filename}}'
// // paths: [buildDir],
// // include: 'all' }, files: [{
expand: true,
// 相对路径地址
'cwd':'',
// 需要生成具名函数的文件集合
'src':['./js/dist/drag.js', './js/lib/drag/drag.js', './js/lib/scale/scale.js', './js/lib/rang/rang.js'],
// 生成存放的文件目录。里面的目录结构与 src 里各个文件名带有的目录结构保持一致
'dest':'.build'
}]
}
}, /**
* step 3:
* 将临时目录下独立的具名函数文件 合并为 1个 js 文件
* 将这个合并的 js 文件 拷贝到 我们的输出目录
*/
concat: {
drag: {
options: {
// 是否采用相对地址
relative: true
},
files: {
// 合并后的文件地址
'js/dist/drag.js': ['.build/js/dist/drag.js', '.build/js/lib/drag/drag.js', '.build/js/lib/scale/scale.js', '.build/js/lib/rang/rang.js']
}
}
}, /**
* step 4:
* 压缩 这个 合并后的 文件
*/
uglify: {
drag: {
files: {
'js/dist/drag.js': ['js/dist/drag.js'] //对dist/application.js进行压缩,之后存入dist/application.js文件
}
}
}, /**
* step 5:
* 将这个临时目录删除
*/
clean: {
build: ['.build']
}
}); grunt.loadNpmTasks('grunt-cmd-transport');
grunt.loadNpmTasks('grunt-cmd-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy'); grunt.registerTask('default', ['copy','transport', 'concat', 'uglify', 'clean']); //
}
这里要注意文件分别的路径,不知道插件如何用可以到官网查看,点这里 ,可以分别搜索相应的插件后查看用法。
还要注意的是,在seaJs中,ID与路径一致的原则,看这里 ,具体的需要自己多看,多找,多实践。
代码包:seaJs_demo_02
演示地址:demo
参考:
初学seaJs模块化开发,利用grunt打包,减少http请求的更多相关文章
- seaJs模块化开发简单入门
随着前端技术的日益成熟,功能越来越丰富强大,规范也越来越健全,在这样的背景环境下很快便有了CommonJs.AMD.CMD等一系列规范,使前端发开趋向模块化.规范化.CMD模块化的代表之一就是国内开发 ...
- Loadrunner 脚本开发-利用web_submit_data函数实现POST请求
脚本开发-利用web_submit_data函数实现POST请求 by:授客 QQ:1033553122 概述 web_link()和web_url()函数都是页面访问型函数,实现HTTP请求中的 ...
- 轻轻谈一下seaJs——模块化开发的利器
"仅做一件事,做好一件事." 这个应该就是seaJs的精髓了. 我在自己的一些项目中使用过seaJs.对其算是了解一二.如今就班门弄斧.轻轻地谈一下. 首先上一段度娘的话: &qu ...
- seajs模块化开发
seajs是一个起辅助作用的库,所以它可以更方便开发,而它可以解决以下问题: 1.命名问题,就是冲突 2.性能问题,就是只要一个功能,但却使用一个大插件中的一个小功能,所以要手动拆分出这个功能 3.j ...
- Javascript模块化开发3——Grunt之预处理
一.grunt预处理简述 grunt的注册任务函数本身会对传入的参数和配置对象里的相关属性进行一定的预处理,方便任务函数进行操作. grunt的registerTask方法和registerMulti ...
- Javascript模块化开发4——Grunt常用模块
一.copy 用于复制文件与目录. grunt-contrib-copy 二.eslint 检测代码的合理性. grunt-eslint 常见参数: 1.quiet 是否只显示errors.默认值fa ...
- JS模块化开发(一)——seaJs
模块化开发要解决的问题: 1.冲突 比如:多人协作开发时,不同js库中的函数重名问题 可以用命名空间解决: var module={} module.a=1; module.b=function(){ ...
- 2.精通前端系列技术之JavaScript模块化开发 seajs(一)
在使用seajs模块化开发之前,直接在页面引用js会容易出现冲突及依赖相关的问题,具体问题如下 问题1:多人开发脚本的时候容易产生冲突(比如全局参数冲突,方法名冲突),可以使用命名空间降低冲突,不能完 ...
- gulp基于seaJs模块化项目打包实践【原创】
公司还一直在延续使用jq+seajs的技术栈,所以只能基于现在的技术栈进行静态文件打包,而众所周知seajs的打包比较"偏门",在查了不少的文档和技术分享后终于琢磨出了自己的打包策 ...
随机推荐
- MySQL碎碎念
1. 如何修改Mysql的用户密码 mysql> update mysql.user set password=password('hello') where user='root'; mysq ...
- BPM配置故事之案例12-触发另外流程
还记得阿海么,对就是之前的那个采购员,他又有了些意见. 阿海:小明,你看现在的流程让大家都这么方便,能不能帮个忙让我也轻松点啊-- 小明:--你有什么麻烦,现在不是已经各个部门自己提交申请了嘛? 阿海 ...
- git远程库GitHub
首先,注册一个GitHub(github.com)帐号,免费获得Git远程仓库 由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置: 第1步:创建SSH Key.在用 ...
- Git学习笔记一:新建本地仓库及初始化
1.百度搜索Git下载安装,直接按默认选项安装即可. 例如:Git-2.7.2-32-bit_setup.1457942412.exe 2.配置Git信息,建立版本仓库 (Alt+PrintScerr ...
- 好用的Markdown编辑器一览 readme.md 编辑查看
https://github.com/pandao/editor.md https://pandao.github.io/editor.md/examples/index.html Editor.md ...
- 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践
提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...
- TFS 2015 敏捷开发实践 – 看板的使用
看板在现代应用开发过程中使用非常广泛,不管是使用传统的瀑布式开发还是敏捷开发,都可以使用看板管理.因为看板拥有简单的管理方法,直观的显示方式,所以很多软件开发团队选择使用看板进行软件开发管理.本文不在 ...
- Linux初识
在这篇文章中你讲看到如下内容: 计算机的组成及功能: Linux发行版之间的区别和联系: Linux发行版的基础目录及功用规定: Linux系统设计的哲学思想: Linux系统上获取命令帮助,及man ...
- Windows Server 2008 R2常规安全设置及基本安全策略
这篇文章主要介绍了Windows Web Server 2008 R2服务器简单安全设置,需要的朋友可以参考下 用的腾讯云最早选购的时候悲催的只有Windows Server 2008 R2的系统,原 ...
- Linux服务器安全配置
众所周知,网络安全是一个非常重要的课题,而服务器是网络安全中最关键的环节.Linux被认为是一个比较安全的Internet服务器,作为一种开放源代码操作系统,一旦Linux系统中发现有安全漏洞,Int ...