初学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使用教程指南

seaJs学习笔记

Grunt 实例之 构建 seajs 项目

时间: 2024-11-09 05:04:20

初学seaJs模块化开发,利用grunt打包,减少http请求的相关文章

seaJs模块化开发简单入门

随着前端技术的日益成熟,功能越来越丰富强大,规范也越来越健全,在这样的背景环境下很快便有了CommonJs.AMD.CMD等一系列规范,使前端发开趋向模块化.规范化.CMD模块化的代表之一就是国内开发的seaJs,它有很多优点: 遵从CMD规范,代码模块化 中文文档通俗易懂,入门上手简单 兼容性好.配置简洁明了.提供插件接口 seajs模块化基本流程: 引入sea.js库 define定义模块 exports暴露模块 require导入模块 安装 npm安装 npm i seajs bower安

轻轻谈一下seaJs——模块化开发的利器

"仅做一件事,做好一件事." 这个应该就是seaJs的精髓了. 我在自己的一些项目中使用过seaJs,对其算是了解一二,现在就班门弄斧,轻轻地谈一下. 首先上一段度娘的话: "seaJs是一个遵循CommonJs规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按模块加载.SeaJS的主要目的是令JavaScript开

利用css sprites减少图片请求

sprites是鬼怪,小妖精,调皮鬼的意思,初听这个高端洋气的名字我被震慑住了,一步步掀开其面纱后发觉很简单的东西,作用却很大 什么是CSS Sprites CSS Sprites是指把网页中很多小图片(很多图标文件)做成按规律排列的一张大图上,在显示的时候通过background-image.background-position显示图片特定部分达到和分散的一张张小图片一样的效果. JqueryUI的效果图如下 很多页面常用的小图标,但是我们看看每个小图标的源码的时候会发现,这些小图标的src

2.精通前端系列技术之JavaScript模块化开发

在使用seajs模块化开发之前,直接在页面引用js会容易出现冲突及依赖相关的问题,具体问题如下 问题1:多人开发脚本的时候容易产生冲突(比如全局参数冲突,方法名冲突),可以使用命名空间降低冲突,不能完全避免冲突 // JavaScript Document /*var a = 10; function tab(){} function drag(){} function dialog(){}*/ var miaov = {}; //名字比较长 , 只能降低冲突,不能完全避免 miaov.a =

转载,网站前端模块化开发策略研究

引言 当今互联网飞速发展,网络用户的需求变化既快又大,且不可捉摸,大部分网站的更新周期都是以日.小时甚至分钟为单位.在这种情况下,网站的前端就成了 变化最频繁的部分.随着互联网公司对前端开发的逐渐重视,前端开发人数也越来越多,可是,技术人员的投入总是有限的.面对需求的快速变化,引发了很多如前 端编码规范.前端性能优化.前端安全漏洞防范等方面的问题.为了解决这些问题,一种具有先进开发思想和良好设计模式的前端模块化技术正逐渐成熟,并受到越来越多公司的青睐. 1 前端模块化技术的应用现状 前端模块化开

JS模块化开发(三)——seaJs+grunt

1.seaJs直接构建存在的问题 由于模块之间的依赖require引用的是模块名,当多个js模块被合并成一个时,会由于找不到模块名而报错 2.seaJs+grunt开发 用到的插件:grunt-cmd-transport和grunt-cmd-concat       (CMD规范) grunt-cmd-transport:提取本模块的ID和本模块所依赖的ID(数组格式),作为define函数的两个参数:define(ID,[依赖数组],function(require,exports,modul

seajs进行模块化开发

seajs进行模块化开发 模块化前端开发入门指南(二) 2015-08-26 15:23 by paseo, 370 阅读, 0 评论, 收藏, 编辑 概览 使用seajs模块化加载器进行模块化开发,以及它的一些弊端. 使用seajs进行模块化开发 项目目录 新建新项目 引入sea.js,文件路径modules/sea.js 引入公共库jquery. 新建index.html,index.js 项目目录如下: 关于sea.js的公共模块路径sea.js加载时,会自动获取sea.js所在的路径,将

前端模块化开发篇之grunt&amp;webpack篇

几个月前写了一篇有关gulp和browserify来做前端构建的博客,因为browserify用来做js的打包时可能有些麻烦(特别是在写React的时候),所以这里再强烈推荐一款js打包工具-webpack.webpack很强大,不光可以模块化加载js,甚至还有jsx,css,图片等等.可以看看webpack托管到github的官网,相信你看一眼就能懂webpack的强大之处了.进入webpack官网>> = =说到此处,不免有些尴尬,由于博主的英文so 一般,对webpack的认识还不够深,

seajs的模块化开发--实践笔记

2017-04-02 SeaJS是一个遵循CMD规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.有效的解决复杂项目中命名冲突.依赖.性能等问题. SeaJS中使用define函数定义一个模块.define可以接收三个参数:require, exports, module. require--模块加载函数,用于记载依赖模块. exports--接口点,将数据或方法定义在其上则将其暴露给外部调用. module--模块的元数据. SeaJS的基本用法有以下