1 var loder = {}; 2 var define = loder.define = function(id,deps,factory){ 3 loader[id] = factory; 4 };
/
)分隔的多项组成。.
或 ..
。.js
。.
或 ..
,则该模块标识是相对标识.
或 ..开头
顶级路径,不以
.或 ..及
斜线(/
)开头"http://"
、"https://"
、"file:///"
等协议标识开头的seajs/x.y.z
字串,也可以指定seajs.config({base:});require
所在模块的标识来解析base
基础路径解析。(顶级标识由字符串开头)模块定义中require
和 require.async
的相对路径相对当前模块路径来解析。
如果我们能理解其模块标识解析设计的出发点,那么就可以轻易的理解这些而不用记忆这么多:
目录结构如下:
www
--app --blog index.html --sea-modules --seajs
--2.2.0
sea.js
--blog
--user
--1.0.0
main.js
--static
--user
--src
a.js
b.js
main.js
--dist
main.js
package.json
Makefile
// /www/static/user/src/a.js define(function(require,exports,module){ module.exports = function(){ // .......................... }; });
// /www/static/user/src/b.js define(function(require,exports,module){ module.exports = function(){ // .......................... }; });
// /www/static/user/src/main.js define(function(require,exports,module){
var a = require(‘./a");
var b = require(‘./b");
// ..............
});
// /www/static/user/package.json { family:"blog", name:"user", version:"1.0.0", spm:{ output:["main.js"] } }
// /www/static/user/Makefile
build: @spm build deploy: @rm -rf ../../sea-modules/blog/user @mkdir ../../sea-modules/blog/user @mkdir ../../sea-modules/blog/user/1.0.0 @cp dist/*.* ../../sea-modules/blog/user/1.0.0 @echo @echo " deploy to seajs-modules/blog/user/1.0.0" @echo
// /www/static/user/dist/main.js
define("blog/user/1.0.0/main",["./a","./b"],function(require){ var a = require(‘./a"); var b = require(‘./b"); }); define("blog/user/1.0.0/a",[],function(require,exports,module){ // ....................... }); define("blog/user/1.0.0/b",[],function(require,exports,module){ // ....................... });
然后运行make deploy
会将 ../dist/main 部署到 /www/sea-modules/blog/user/1.0.0/main.js
在页面中如何加载模块呢?
<!-- www.expample.com/app/blog/index.html --> <script src="/sea-modules/seajs/2.4.0/sea.js" id="seajson"></script> <script> seajs.config({charset:"gbk"}); seajs.use("blog/user/1.0.0/main"); </script>
原文:http://www.cnblogs.com/xuntu/p/3799988.html