为何有这种想法?

由于最近做的项目是用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构建中型项目的更多相关文章

  1. python + django + echart 构建中型项目

    1. python生产环境, 多层modules 导入问题: 多个modules 如何导入不同级别的包: 在每个modules下新建 __init__.pyimport os, sys dir_myt ...

  2. ☀【SeaJS】SeaJS Grunt构建

    如何使用Grunt构建一个中型项目?https://github.com/twinstony/seajs-grunt-build spmjshttp://docs.spmjs.org/doc/inde ...

  3. JS模块化开发:使用SeaJs高效构建页面

    一.扯淡部分 很久很久以前,也就是刚开始接触前端的那会儿,脑袋里压根没有什么架构.重构.性能这些概念,天真地以为前端===好看的页面,甚至把js都划分到除了用来写一些美美的特效别无它用的阴暗角落里,就 ...

  4. Yeoman自动构建js项目

    Aug 19, 2013 Tags: bowergruntJavascriptjsnodejsyeomanyo Comments: 10 Comments Yeoman自动构建js项目 从零开始nod ...

  5. 使用EXtjs6.2构建web项目

    一.项目简介 众所周知ext是一款非常强大的表格控件,尤其是里边的grid为用户提供了非常多的功能,现在主流的还是用extjs4.0-4.2,但是更高一点的版本更加符合人的审美要求.因此,在今天咱们构 ...

  6. 基于dubbo构建分布式项目与服务模块

      关于分布式服务架构的背景和需求可查阅http://dubbo.io/.不同于传统的单工程项目,本文主要学习如何通过maven和dubbo将构建分布项目以及服务模块,下面直接开始. 创建项目以及模块 ...

  7. Jenkins中构建Testcomplete项目的方法介绍

    Jenkins的部署在上一篇随笔中已经和大家介绍了,下面我们介绍一下再Jenkins中构建testcomplete项目.我这里使用的是Testcomplete11,下面详细介绍一下构建步骤. 1.Je ...

  8. maven - Eclipse构建maven项目

    前面的博文已经介绍了如何安装maven,本文将记录如何在Eclipse下构建maven项目. 一.Eclipse maven插件安装 关于安装Eclipse maven插件,网上有很多方法,这里推荐一 ...

  9. vue-cli快速构建Vue项目

    vue-cli是什么? vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. vue-cli怎么使用? 安装vue-cli之前,需要先装好vue 和 webpack npm i ...

随机推荐

  1. Mybatis之SessionFactory原理

    Mybatis在使用前需进行初始化,下面就针对Mybatis的初始化过程进行介绍.Mybatis的初始化过程有两种:基于XML和基于Java API两种方式,下面就针对基于XML的方式进行展开. 一. ...

  2. 【代码笔记】iOS-MBProgressHUD+MJ

    一,效果图. 二,工程图. 三,代码. ViewController.m #import "ViewController.h" #import "MBProgressHU ...

  3. SharePoint designer workflow给一个hyperlink类型得field赋值, How to set value to a hyperlink field by designer workflow

    通过worlfow给一个链接类型得field赋值: 格式是: {link}, {linkDisplayname} 一定要注意逗号后面有个空格. 举个栗子: 如果一个链接显示为 Approve / Re ...

  4. 如何解决Your project contains C++ files but it is not using a supported native build system

    最近因为项目需要下载Android终端模拟器(Android-Terminal-Emulator)源码进行调试编译,编译过程中出现报错 Error:Execution failed for task ...

  5. 使用 PowerShell 创建 Azure VM 的自定义映像

    自定义映像类似于应用商店映像,不同的是自定义映像的创建者是你自己. 自定义映像可用于启动配置,例如预加载应用程序.应用程序配置和其他 OS 配置. 在本教程中,你将创建自己的 Azure 虚拟机自定义 ...

  6. MySQL出现Waiting for table metadata lock的场景浅析

    MySQL版本为5.6.12. 在进行alter table操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的 ...

  7. Android分区

    1. Android 分区: 2. Android各个分区的作用: 2.1 modem分区 实现手机必需的通信功能,大家通常所的刷RADIO就是刷写modem分区,在所有适配的ROM中这部分是不动,否 ...

  8. 阿里云centos7.2 lamp配置

    安装apache 1.安装yum -y install httpd 2.设置apache服务开机启动systemctl enable httpd.service 3.开启apache服务systemc ...

  9. PHP类继承、接口继承关系概述

    PHP类继承: PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承,比如: class frist{ public function __construct(){ echo &quo ...

  10. WaitForMultipleObjects

    WaitForMultipleObjects是Windows中的一个功能非常强大的函数,几乎可以等待Windows中的所有的内核对象 函数原型为: DWORD WaitForMultipleObjec ...