Js模块化开发--seajs和gruntJs
1.Seajs库
解决开发中的冲突依赖等问题,提供代码可维护性。
SeaJS 是由玉伯开发的一个遵循 CommonJS 规范的模块加载框架,可用来轻松愉悦地加载任意 JavaScript 模块和css模块样式。
SeaJS 就两个核心:模块定义和 模块的加载及依赖关系。
官方网站 http://seajs.org
①通过script引入sea.js的库
②把js文件变成模块 –define
③调用模块 –exports
④加载模块 –seajs.use
依赖模块 –require
例如:用define把普通模块变成sea的模块
function show(){
alert(1);
}
//使用define改写model1.js
define(function(require,exports,module){
//sea下的参数 : 不允许修改的 三个参数可以都写,可以都不写或者只写前两个或者只写前一个,只能省略后面的参数,不能省略前面的参数
//exports : 对外提供接口的对象
function show(){
alert(1);
}
exports.show = show;
});
seajs.use两个参数 :
第一个参数 : 模块的地址--相对于sea.js的相对路径,后面的“.js”后缀可以省略 、
第二个参数 :callback回调函数 say.sayHello()就是调用sayHello模块的exports.sayHello方法,当然这callback函数中有个say参数。
seajs.use("sayHello/sayHello",function(say){
say.sayHello("out","Hello SeaJS!");
});
seajs.use('./js/module1.js',function(ex){
ex.show(); //1
});
模块的依赖关系
模块的依赖其实在模块定义的时候就应该存在了。
例如在model2.js里面如果要弹出model3.js模块里面的一个参数
//model2.js
define(function(require,exports,module){
//require : 模块之间依赖的接口
var a = require('./module3.js').a; //当引入的是sea下面的模块的时候,那么require执行完的结果就是exports
function show(){
alert(a);
}
exports.show = show; }); //model3.js
define(function(require,exports,module){
var a = 100;
exports.a=a;
});
页面中调用
seajs.use('./js/module2.js',function(ex){
ex.show(); //
});
3.构建部署
对于正式项目,在发布上线前,还需要对源码进行压缩、合并等操作。
这可以通过 spm 或 Grunt 等构建工具来实现。这之前先了解下模块化历史。
- nodeJS的出现(http://nodejs.org/)
-------commonJS规范(http://www.commonjs.org/)规定服务器模块化端开发规范的
- 浏览器JS的模块化?有两个规范
——AMD规范(http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition)
》代表requireJS库(http://requirejs.org/)
——CMD规范
》代表Seajs采用的cmd规范 针对浏览器端的模块化开发
4.构建工具
gruntjs(http://www.gruntjs.net/ )
gruntjs是构建前端可维护性的项目,如自动化、文件压缩、合并及单元测试等等。
安装流程
- 先安装nodejs和npm(包管理工具)
- npm install -g grunt-cli 全局安装grunt
- npm install grunt --save-dev
- grunt -version 查看版本号安装成功
- npm install grunt --save-dev
参考资料:JavaScript 项目构建工具 Grunt 实践:安装和创建项目框架
Js模块化开发--seajs和gruntJs的更多相关文章
- JS模块化开发:使用SeaJs高效构建页面
一.扯淡部分 很久很久以前,也就是刚开始接触前端的那会儿,脑袋里压根没有什么架构.重构.性能这些概念,天真地以为前端===好看的页面,甚至把js都划分到除了用来写一些美美的特效别无它用的阴暗角落里,就 ...
- JS模块化开发(三)——seaJs+grunt
1.seaJs直接构建存在的问题 由于模块之间的依赖require引用的是模块名,当多个js模块被合并成一个时,会由于找不到模块名而报错 2.seaJs+grunt开发 用到的插件:grunt-cmd ...
- Js模块化开发的理解
Js模块化开发的理解 模块化是一个语言发展的必经之路,其能够帮助开发者拆分和组织代码,随着前端技术的发展,前端编写的代码量也越来越大,就需要对代码有很好的管理,而模块化能够帮助开发者解决命名冲突.管理 ...
- JS模块化开发----require.js
前言 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了,jQuery,Ajax,Node.Js,MVC,MVVM等的助力也使得前 ...
- JS模块化开发(一)——seaJs
模块化开发要解决的问题: 1.冲突 比如:多人协作开发时,不同js库中的函数重名问题 可以用命名空间解决: var module={} module.a=1; module.b=function(){ ...
- 2.精通前端系列技术之JavaScript模块化开发 seajs(一)
在使用seajs模块化开发之前,直接在页面引用js会容易出现冲突及依赖相关的问题,具体问题如下 问题1:多人开发脚本的时候容易产生冲突(比如全局参数冲突,方法名冲突),可以使用命名空间降低冲突,不能完 ...
- js模块化开发——前端模块化
在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即可:如今CPU.浏览器性能得到了极大的提升,很多页面逻辑迁移到了客 户端(表单验证等),随着web2.0时代的到来,Ajax技术 ...
- require.js模块化开发
模块化开发的原因: 1.引入的js过多然后在加载的过程中容易出现假死的状态,导致页面会发生白屏 2.变量名的问题 在多人协作开发的时候容易出现变量名的冲突 面向对象 3.引入优先级的问题 模块化开发分 ...
- 2.精通前端系列技术之JS模块化开发-深入学习seaJs(四)
深入学习seajs 配置信息 alias : 别名配置 paths : 路径配置 vars : 变量配置 map : 映射配置 preload : 预加载项 debug : 调试模式 base : 基 ...
随机推荐
- 3-Perl 基础语法
Perl 基础语法Perl借用了C.sed.awk.shell脚本以及很多其他编程语言的特性,语法与这些语言有些类似,也有自己的特点.Perl 程序有声明与语句组成,程序自上而下执行,包含了循环,条件 ...
- asp.net 6.aspx页面
1.aspx页面的头部 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Us ...
- 将磁盘从FAT格式转换为NTFS格式的方法
不需要进行格式化,只需在命令提示符中输入如下内容:CONVERT X:/FS:NTFS把X换成你需要的盘符,转一个盘需十几或几十秒不等..注意:此方法不可逆转,FAT32转到NTFS后不可转回,当然也 ...
- idea2019 Tomcat9 Tomcat Localhost log 乱码
网上一顿搜索,基本没用,可能版本不一样. idea2019 tomcat9解决方案: 找到Tomcat的安装目录,进入conf目录 打开logging.properties 找到java.util.l ...
- JS downLoad
$.fileDownload(url, { httpMethod: 'GET', data: null, prepareCallback: function (url) { layer.msg(&qu ...
- JS基础_基本数据类型和引用数据类型
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- O038、Shelve Instance 操作详解
参考https://www.cnblogs.com/CloudMan6/p/5524751.html Instance 被 Suspend 后虽然处于 shutdown 状态,但 Hypervis ...
- 阿里Java开发规约【摘录】
1.命名规约 [强制]类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / BO / DTO / VO等. 正例:MarcoPolo / User ...
- Win10系统的开机启动项如何去关闭?
我们在使用电脑时会安装许多的应用程序,而有些应用程序会默认在电脑开机时自行启动,不仅影响开机速度,还会在开机后占用电脑内存资源. 那么在Win10系统中,我们该如何查看有哪些开机启动项呢?我们又该怎么 ...
- linux wireless 基础知识 MAC80211 CFG80211
转:http://blog.csdn.net/liuxd3000/article/details/23761663 1. 基本概念 • cfg80211: 用于对无线设备进行配置管理.与Full ...