如何使用seajs+jQuery构建中型项目
为何有这种想法?
由于最近做的项目是用jquery+seajs集成的,所以就突发奇想 如何使用seajs+jquery能更好的构建项目,比如能解决模块化,模块与模块之间的依赖,文件上线后打包,压缩等能更好遵守自己的一套规范,这样的话自己也比较清晰整个前端项目的架构,能更好的维护代码!以后自己做新项目时可以遵守这些规范来做,能更好,更高质量的完成任务!
如何用seaJS+jquery来组织前端页面?
如何来组织前端页面?从个人经验来讲,需要遵守以下几点:
1. JS这块: 在页面顶部引入seaJS压缩源文件,那么jquery文件就不引入了,直接用seajs.config 这个配置下Jquery文件,需要的时候use下或者require下。页面级的JS 都写成模块化,比如:define(function(require, exports, module){}),因为seajs一个文件就是一个模块。
2. CSS这块: 按道理来说,页面上只需要2个css文件即可,一个页面级的css文件,另外一个是reset.css和header.css(全站通用的,两个文件合并一个请求)。但是页面上可能要引入一些外部的插件等。比如bootstrap中的插件等,那么个人建议css文件也直接引入放在头部。因为css文件很多的话,可能发多个请求,但是并不会阻塞浏览器的加载(因为用link引入是边渲染变加载的)。
一: 下面来看看CSS在书写时候要注意哪些规范。
1. 注释肯定需要的。
2. 统一遵循书写顺序规范:
1. 位置属性(position, z-index, display, float等)。
2. 大小(width, height, padding, margin等)。
3.文字系列(font, line-height, letter-spacing, color text-align等)。
4.背景(background, border等)。
二: 命名规范:
1. 所有的class(类名)都一律小写,且多个单词用横线-隔开。
2. 和JS有关的操作class类名 使用J_ 开头。
3. 个人编写的组件风格如下:
define(function(require, exports, module) {
//var $ = require('./jquery');
function XX(){ } XX.prototype = {
init: function(){
console.log(2);
}
};
exports.XX = XX.prototype;
});
seajs与文件项目相关的。
比如我现在项目目录如下:
根目录seajsDemo下有
1. app (专门放html静态文件)
2. sea-modules文件 (存放jquery和seajs等源文件)。
3. static文件 (存放所有的JS文件)。
那现在我们有页面 假如叫index.htm。 JS文件有2个 一个是index.js文件 另外一个是test.js文件。
其中JS文件所有风格遵循如下风格:这是test.js代码。
define(function(require, exports, module){ exports.test = function(){
console.log(1);
}
});
那么index.js代码如下:
define(function(require, exports, module){
var a = require('total/test');
a.test();
});
那么我可以直接在index.html配置下就ok 如:
seajs.config({
paths: {
'gallery': '../sea-modules/jquery/jquery.js',
'total': '../static/',
}
});
调用如下:
seajs.use("total/index");
下面来讲解下seajs的一些属性。注:只是讲解一些常用的属性,详细的可以看seajs官网。
1. 用来对 Sea.js 进行配置
seajs.config({
alias:{},
paths:{},
map: [],
base:'',
charset: 'utf-8'
});
一. alias 别名,方便调用,而不需要调用很长的名字(可以通过base一起使用更方便)。如上面的文件配置,我可以这样设置下他们的别名,不设置paths。如下:
alias: {
"jquery": "sea-modules/jquery/jquery.js",
'test': 'static/test'
}
base: 'http://localhost/demo/seajsDemo/' // 指向根目录文件。那么我们可以直接在页面上这样调用 seajs.use("static/index");就可以了 就可以访问到
http://localhost/demo/seajsDemo/static/index.js文件了。
二. paths: 设置路径,方便跨目录调用。当我们的项目中的文件在不同的文件目录下,那么如果我们还是用上面的alias别名的话,直接让他们指向通用的根目录的话,那么use一个文件的时候 可以文件id要写很长很长,但是如果我用paths来解决的话更方便。
比如 seajs.config({
paths: {
'gallery': '../sea-modules/jquery/jquery.js',
'total': '../static/',
}
});
那么初始化index.js时候 可以这样调用 seajs.use("total/index");因为total用了相对路径 相对于根目录下的。
但是index.js代码中 要这样获取到test.js文件了 var a = require('total/test');
三:map:[ [ '.js', '-debug.js'] ] 是对文件的映射。比如页面上的XX.js 都映射成XX-debug.js,可以方便在线调试等。
把 x.js 后缀的都转成 x-debug.js, 当 x-debug.js 中依赖的模块如过有 y-debug.js 时,
会把y-debug.js 也转成 y-debug-debug.js, 导致没法获取到. 再导致 x 模块返回 null.
你应该撇除 已经是 -debug.js 的情况, 例如:可以如下做
map: [
function(uri) {
if (!/\-debug\.(js|css)+/g.test(uri)) {
uri = uri.replace(/\/(.*)\.(js|css)/g, "/$1-debug.$2")
}
return uri
}
]
四: charset: 'utf-8' 文件编码不用介绍。
2. define 用来定义模块。所有页面上的JS文件风格都遵循如下风格。
define(function(require, exports, module) { // 模块代码 });
3. seajs.use 用来加载一个或者多个模块。如下:
// 加载一个模块
seajs.use('./a'); // 加载一个模块,在加载完成时,执行回调
seajs.use('./a', function(a) {
a.doSomething();
}); // 加载多个模块,在加载完成时,执行回调
seajs.use(['./a', './b'], function(a, b) {
a.doSomething();
b.doSomething();
});
4. exports 是一个对象,用来向外提供模块接口。
define(function(require, exports) { // 对外提供 foo 属性
exports.foo = 'bar'; // 对外提供 doSomething 方法
exports.doSomething = function() {}; });
5. require 用来获取指定模块的接口。
define(function(require) { // 获取模块 a 的接口
var a = require('./a'); // 调用模块 a 的方法
a.doSomething();
});
利用grunt对整个项目文件的合并及压缩等操作。
稍后待续中......
如何使用seajs+jQuery构建中型项目的更多相关文章
- python + django + echart 构建中型项目
1. python生产环境, 多层modules 导入问题: 多个modules 如何导入不同级别的包: 在每个modules下新建 __init__.pyimport os, sys dir_myt ...
- ☀【SeaJS】SeaJS Grunt构建
如何使用Grunt构建一个中型项目?https://github.com/twinstony/seajs-grunt-build spmjshttp://docs.spmjs.org/doc/inde ...
- JS模块化开发:使用SeaJs高效构建页面
一.扯淡部分 很久很久以前,也就是刚开始接触前端的那会儿,脑袋里压根没有什么架构.重构.性能这些概念,天真地以为前端===好看的页面,甚至把js都划分到除了用来写一些美美的特效别无它用的阴暗角落里,就 ...
- Yeoman自动构建js项目
Aug 19, 2013 Tags: bowergruntJavascriptjsnodejsyeomanyo Comments: 10 Comments Yeoman自动构建js项目 从零开始nod ...
- 使用EXtjs6.2构建web项目
一.项目简介 众所周知ext是一款非常强大的表格控件,尤其是里边的grid为用户提供了非常多的功能,现在主流的还是用extjs4.0-4.2,但是更高一点的版本更加符合人的审美要求.因此,在今天咱们构 ...
- 基于dubbo构建分布式项目与服务模块
关于分布式服务架构的背景和需求可查阅http://dubbo.io/.不同于传统的单工程项目,本文主要学习如何通过maven和dubbo将构建分布项目以及服务模块,下面直接开始. 创建项目以及模块 ...
- Jenkins中构建Testcomplete项目的方法介绍
Jenkins的部署在上一篇随笔中已经和大家介绍了,下面我们介绍一下再Jenkins中构建testcomplete项目.我这里使用的是Testcomplete11,下面详细介绍一下构建步骤. 1.Je ...
- maven - Eclipse构建maven项目
前面的博文已经介绍了如何安装maven,本文将记录如何在Eclipse下构建maven项目. 一.Eclipse maven插件安装 关于安装Eclipse maven插件,网上有很多方法,这里推荐一 ...
- vue-cli快速构建Vue项目
vue-cli是什么? vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. vue-cli怎么使用? 安装vue-cli之前,需要先装好vue 和 webpack npm i ...
随机推荐
- nginx配置https转发到tomcat(使用自签名的证书)
一.使用openSSL生成自签名的证书 1.生成RSA私钥 命令:openssl genrsa -des3 -out server.key 1024 说明:生成rsa私钥,des3算法,1024强度, ...
- POJ2955(KB22-C 区间DP)
Brackets Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 7823Accepted: 4151 Description We ...
- 解决input中智能提示框onblur与onclick冲突的问题
背景: 制作一个类似百度输入法的智能提示框, 其中当关键词输入进来时,会有智能提示展开,实际需求是当点击智能提示框的汉字时,输入框中自动补全并关闭智能提示, 当点击其他区域时,智能提示框自动隐藏,如下 ...
- js知识学习图谱,新手必看
前端新手学习也不外乎就是Html css html5 css3 这是最基本的,学会这些仅仅可以说是会写布局,写网页,不算前端开发,还有最重要的js,jq要学习,我自己java后台转前端,现在复 ...
- 面向对象的JS随笔
Scoping 全局与局部 全局变量可用在所有环境中,局部变量只可用在局部 js中连接变量至一个从未声明的变量,后面的变量自动提升成一个全局变量(不要这样用,不易阅读) 只有function(){中才 ...
- ActiveReports 报表控件V12新特性 -- 可定制的安装设置
ActiveReports是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求 ...
- MaterialRefreshLayout+ListView 下拉刷新 上拉加载
效果图是这样的,有入侵式的,非入侵式的,带波浪效果的......就那几个属性,都给出来了,自己去试就行. 下拉刷新 上拉加载 关于下拉刷新-上拉加载的效果,有许许多多的实现方式,百度了一下竟然有几十种 ...
- Unity Profiler Memory
当游戏出现闪退时很大概率是内存出现了问题,查找下代码中是否报错导致一直申请内存,还是申请的内存没有释放掉,比如图集等. 比如开着Profiler,一直开关界面看界面用到的图集是否被释放掉. 点击Mem ...
- [随时更新] Git的过滤规则 .gitignore 配置
往github上传代码的时候,很多文件没必要都传,这就需要在.gitignore文件里配置一下过滤规则.在此记录一下各种项目的配置参数,先从最近做的android开始. 原文地址请保留http://w ...
- Android Vsync 原理浅析
Preface Android中,Client测量和计算布局,SurfaceFlienger(server)用来渲染绘制界面,client和server的是通过匿名共享内存(SharedClient) ...