Skip to content

Commit

Permalink
模块加载器增加别名机制
Browse files Browse the repository at this point in the history
1、模块加载器增加别名机制
2、模块加载器增加对data-baseurl的支持
3、合并工具的优化
  • Loading branch information
chenmnkken committed Sep 17, 2013
1 parent cc10601 commit 3fc87c5
Show file tree
Hide file tree
Showing 11 changed files with 132 additions and 144 deletions.
2 changes: 0 additions & 2 deletions core/build/easy-1.0.2.min.js

This file was deleted.

69 changes: 47 additions & 22 deletions core/build/easy-1.0.2.js → core/build/easy-1.1.0.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
/*
* easy.js v1.0.2
* easy.js v1.1.0
*
* Copyright (c) 2013 Yiguo Chan
* Released under the MIT Licenses
*
* Mail : chenmnkken@gmail.com
* Date : 2013-7-15 23:30:52
* Date : 2013-9-17 22:16:4
*/

// ---------------------------------------------
Expand Down Expand Up @@ -39,7 +39,8 @@ var document = window.document,
// 模块加载器的配置对象
moduleOptions = {
baseUrl : null,
charset : {} // 模块对应的charset存储对象
charset : {}, // 模块对应的charset存储对象
alias : {}
},

// 浏览器判定的正则
Expand Down Expand Up @@ -157,7 +158,7 @@ easyJS.mix = function( target, source, override, whitelist ){

easyJS.mix( easyJS, {

version : '1.0.2',
version : '1.1.0',

__uuid__ : 2,

Expand Down Expand Up @@ -279,19 +280,22 @@ easyJS.mix( easyJS, {
*/
use : function( ids, fn ){
ids = typeof ids === 'string' ? [ ids ] : ids;
var module = easyJS.module,
var alias = moduleOptions.alias,
module = easyJS.module,
len = ids.length,
isLoaded = true,
namesCache = [],
modNames = [],
modUrls = [],
j = 0,
mod, modName, result, useKey, args, name, i;
mod, modName, result, useKey, args, name, i, id;

for( i = 0; i < len; i++ ){
id = ids[i];

// 获取解析后的模块名和url
result = easyModule.parseModId( ids[i], moduleOptions.baseUrl );
modName = result[0];
result = easyModule.parseModId( alias[id] || id, moduleOptions.baseUrl );
modName = alias[ id ] ? id : result[0];
mod = module[ modName ];

if( !mod ){
Expand Down Expand Up @@ -363,18 +367,23 @@ easyJS.mix( easyJS, {
* @param { Object }
*/
config : function( options ){
var baseUrl = options.baseUrl,
var baseUrl, isHttp;

if( options.baseUrl ){
baseUrl = options.baseUrl;
isHttp = baseUrl.slice( 0, 4 ) === 'http';

if( isHttp ){
moduleOptions.baseUrl = baseUrl;
}
// 相对路径的baseUlr是基于HTML页面所在的路径(无论是http地址还是file地址)
else{
moduleOptions.baseUrl = easyModule.mergePath( baseUrl, document.location.href );
if( isHttp ){
moduleOptions.baseUrl = baseUrl;
}
// 相对路径的baseUlr是基于HTML页面所在的路径(无论是http地址还是file地址)
else{
moduleOptions.baseUrl = easyModule.mergePath( baseUrl, window.location.href );
}
}

moduleOptions.charset = easyJS.merge( moduleOptions.charset, options.charset );
easyModule.merge( 'charset', options.charset );
easyModule.merge( 'alias', options.alias );
},

error : function( msg ){
Expand All @@ -388,11 +397,22 @@ easyJS.euid = easyJS.guid();
modClassName = easyJS.guid( 'easyJS_mod_' );

var easyModule = {

// 用于合并模块加载器配置的工具函数
merge : function( key, options ){
if( options ){
var name;

for( name in options ){
moduleOptions[ key ][ name ] = options[ name ];
}
}
},

// 初始化模块加载器时获取baseUrl(既是当前js文件加载的url)
init : function(){
var i = 0,
script, scripts, initMod, url;
script, scripts, initMod, initBaseUrl, url;

// firefox支持currentScript属性
if( document.currentScript ){
Expand All @@ -405,8 +425,11 @@ var easyModule = {
}

initMod = script.getAttribute( 'data-main' );
initBaseUrl = script.getAttribute( 'data-baseurl' );
url = script.hasAttribute ? script.src : script.getAttribute( 'src', 4 );
moduleOptions.baseUrl = url.slice( 0, url.lastIndexOf('/') + 1 );
moduleOptions.baseUrl = initBaseUrl ?
easyModule.mergePath( initBaseUrl, window.location.href ) :
url.slice( 0, url.lastIndexOf('/') + 1 );

// 初始化时加载data-main中的模块
if( initMod ){
Expand Down Expand Up @@ -798,15 +821,16 @@ window.define = function( name, deps, factory ){
deps = null;
}

var module = easyJS.module,
var alias = moduleOptions.alias,
module = easyJS.module,
mod = module[ name ],
isRepeat = false,
isLoaded = true,
names = [],
urls = [],
insertIndex = 0,
pullIndex = 0,
useKey, data, modUrl, factorys, baseUrl, depMod, depName, result, exports, args, depsData, repeatDepsData, i, repeatName;
useKey, data, modUrl, factorys, baseUrl, depMod, depName, result, exports, args, depsData, repeatDepsData, i, repeatName, dep;

// 在模块都合并的情况下直接执行factory
if( !mod ){
Expand Down Expand Up @@ -838,8 +862,9 @@ window.define = function( name, deps, factory ){
// 遍历依赖模块列表,如果该依赖模块没加载过,
// 则将该依赖模块名和模块路径添加到当前模块加载队列的数据去进行加载
for( i = 0; i < deps.length; i++ ){
result = easyModule.parseModId( deps[i], baseUrl );
depName = result[0];
dep = deps[i];
result = easyModule.parseModId( alias[dep] || dep, baseUrl );
depName = alias[ dep ] ? dep : result[0];
depMod = module[ depName ];
mod.deps.push( depName );
depsData[ depName ] = true;
Expand Down
2 changes: 2 additions & 0 deletions core/build/easy-1.1.0.min.js

Large diffs are not rendered by default.

63 changes: 44 additions & 19 deletions core/src/easy.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ var document = window.document,
// 模块加载器的配置对象
moduleOptions = {
baseUrl : null,
charset : {} // 模块对应的charset存储对象
charset : {}, // 模块对应的charset存储对象
alias : {}
},

// 浏览器判定的正则
Expand Down Expand Up @@ -269,19 +270,22 @@ easyJS.mix( easyJS, {
*/
use : function( ids, fn ){
ids = typeof ids === 'string' ? [ ids ] : ids;
var module = easyJS.module,
var alias = moduleOptions.alias,
module = easyJS.module,
len = ids.length,
isLoaded = true,
namesCache = [],
modNames = [],
modUrls = [],
j = 0,
mod, modName, result, useKey, args, name, i;
mod, modName, result, useKey, args, name, i, id;

for( i = 0; i < len; i++ ){
id = ids[i];

// 获取解析后的模块名和url
result = easyModule.parseModId( ids[i], moduleOptions.baseUrl );
modName = result[0];
result = easyModule.parseModId( alias[id] || id, moduleOptions.baseUrl );
modName = alias[ id ] ? id : result[0];
mod = module[ modName ];

if( !mod ){
Expand Down Expand Up @@ -353,18 +357,23 @@ easyJS.mix( easyJS, {
* @param { Object }
*/
config : function( options ){
var baseUrl = options.baseUrl,
var baseUrl, isHttp;

if( options.baseUrl ){
baseUrl = options.baseUrl;
isHttp = baseUrl.slice( 0, 4 ) === 'http';

if( isHttp ){
moduleOptions.baseUrl = baseUrl;
}
// 相对路径的baseUlr是基于HTML页面所在的路径(无论是http地址还是file地址)
else{
moduleOptions.baseUrl = easyModule.mergePath( baseUrl, document.location.href );
if( isHttp ){
moduleOptions.baseUrl = baseUrl;
}
// 相对路径的baseUlr是基于HTML页面所在的路径(无论是http地址还是file地址)
else{
moduleOptions.baseUrl = easyModule.mergePath( baseUrl, window.location.href );
}
}

moduleOptions.charset = easyJS.merge( moduleOptions.charset, options.charset );
easyModule.merge( 'charset', options.charset );
easyModule.merge( 'alias', options.alias );
},

error : function( msg ){
Expand All @@ -378,11 +387,22 @@ easyJS.euid = easyJS.guid();
modClassName = easyJS.guid( 'easyJS_mod_' );

var easyModule = {

// 用于合并模块加载器配置的工具函数
merge : function( key, options ){
if( options ){
var name;

for( name in options ){
moduleOptions[ key ][ name ] = options[ name ];
}
}
},

// 初始化模块加载器时获取baseUrl(既是当前js文件加载的url)
init : function(){
var i = 0,
script, scripts, initMod, url;
script, scripts, initMod, initBaseUrl, url;

// firefox支持currentScript属性
if( document.currentScript ){
Expand All @@ -395,8 +415,11 @@ var easyModule = {
}

initMod = script.getAttribute( 'data-main' );
initBaseUrl = script.getAttribute( 'data-baseurl' );
url = script.hasAttribute ? script.src : script.getAttribute( 'src', 4 );
moduleOptions.baseUrl = url.slice( 0, url.lastIndexOf('/') + 1 );
moduleOptions.baseUrl = initBaseUrl ?
easyModule.mergePath( initBaseUrl, window.location.href ) :
url.slice( 0, url.lastIndexOf('/') + 1 );

// 初始化时加载data-main中的模块
if( initMod ){
Expand Down Expand Up @@ -788,15 +811,16 @@ window.define = function( name, deps, factory ){
deps = null;
}

var module = easyJS.module,
var alias = moduleOptions.alias,
module = easyJS.module,
mod = module[ name ],
isRepeat = false,
isLoaded = true,
names = [],
urls = [],
insertIndex = 0,
pullIndex = 0,
useKey, data, modUrl, factorys, baseUrl, depMod, depName, result, exports, args, depsData, repeatDepsData, i, repeatName;
useKey, data, modUrl, factorys, baseUrl, depMod, depName, result, exports, args, depsData, repeatDepsData, i, repeatName, dep;

// 在模块都合并的情况下直接执行factory
if( !mod ){
Expand Down Expand Up @@ -828,8 +852,9 @@ window.define = function( name, deps, factory ){
// 遍历依赖模块列表,如果该依赖模块没加载过,
// 则将该依赖模块名和模块路径添加到当前模块加载队列的数据去进行加载
for( i = 0; i < deps.length; i++ ){
result = easyModule.parseModId( deps[i], baseUrl );
depName = result[0];
dep = deps[i];
result = easyModule.parseModId( alias[dep] || dep, baseUrl );
depName = alias[ dep ] ? dep : result[0];
depMod = module[ depName ];
mod.deps.push( depName );
depsData[ depName ] = true;
Expand Down
2 changes: 1 addition & 1 deletion core/test/anim.html
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ <h1 class="page_tit">easy.js 动画模块测试</h1>
</ul>
</div>

<script type="text/javascript" src="../build/easy-1.0.2.min.js"></script>
<script type="text/javascript" src="../build/easy-1.1.0.min.js"></script>
<script type="text/javascript">
E( '#show' ).on( 'click', function(){
E( '#box1' ).show( 600 );
Expand Down
2 changes: 1 addition & 1 deletion core/test/event.html
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ <h3><span class="arrow"></span>卸载普通输入框的 change 事件</h3>
</div>


<script type="text/javascript" src="../build/easy-1.0.2.min.js"></script>
<script type="text/javascript" src="../build/easy-1.1.0.min.js"></script>
<script type="text/javascript">
E( '.box h3' ).on( 'mouseenter', function(){
E( this ).addClass( 'current' );
Expand Down
2 changes: 1 addition & 1 deletion core/test/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ <h3><span class="arrow"></span>样式模块</h3>
</div>


<script type="text/javascript" src="../build/easy-1.0.2.min.js"></script>
<script type="text/javascript" src="../build/easy-1.1.0.min.js"></script>
<script type="text/javascript">
E( '.box h3' ).on( 'mouseenter', function(){
E( this ).addClass( 'current' );
Expand Down
2 changes: 1 addition & 1 deletion core/test/module/easyCheck.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ return function(){
check.run( 'version', function(){
return E.version;
})
.equal( '1.0.2' );
.equal( '1.1.0' );

// 输出结果
check.output();
Expand Down
2 changes: 1 addition & 1 deletion core/tools/build.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var version = '1.0.2',
var version = '1.1.0',
licenses = 'MIT Licenses',
rDefine = /define\(.+\r\n/,
date = new Date(),
Expand Down
3 changes: 1 addition & 2 deletions easycombo/build.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
require( './easyCombo' ).easyCombo({
baseUrl : './',
//uglifyUrl : '../uglify/uglify-js',
modules : [{
input : ['hello'],
input : ['hello.js'],
output : 'output/hello.js'
}]
});
Loading

0 comments on commit 3fc87c5

Please sign in to comment.