1)使用SeaJS开发JavaScript的基本原则就是:一切皆为模块。
SeaJS中使用“define”函数定义一个模块。
个人建议遵循SeaJS官方示例的标准,用一个参数的define定义模块。
另外,每个模块应该都定义在一个单独js文件中,即一个js对应一个模块。
包括SeaJS的官方示例在内几乎所有用到define的地方都只传递一个工厂函数进去,
define(function(require, exports, module) {
//code of the module...
});
工厂函数是模块的主体和重点。在只传递一个参数给define时(推荐写法),这个参数就是工厂函数,
此时工厂函数的三个参数分别是:
1.require——模块加载函数,用于加载依赖模块。
2.exports——接口点,将数据或方法定义在其上则将其暴露给外部调用。
3.module——模块的元数据。
2)seajs.use
seajs.use主要用于载入入口模块。
//单一模式
<script>seajs.use('member/subsidy_log');</script>
//回调模式
<script>seajs.use('member/subsidy_log', function(a) {
a.run();
}
</script>
如果入口模块只有一个,也可以通过给引入sea.js的script标签加入”data-main”属性来省略seajs.use,如:
<script src="./sea.js" data-main="./init"></script>
3)require
一个模块对应一个js文件,而载入模块时一般都是提供一个字符串参数告诉载入函数需要的模块,可以使用相对路径,引入
需要的模块:require('jquery'),引入同一路径下的jquery.js文件
require是SeaJS主要的模块加载方法,当在一个模块中需要用到其它模块时一般用require加载:
var m = require('/path/to/module/file');
4)require.async
上文说过SeaJS会在html页面打开时通过静态分析一次性加载所有需要的js文件,
如果想要某个js文件在用到时才下载,可以使用require.async:
require.async('/path/to/module/file', function(m) {
//code of callback...
});
5)注意上面在载入模块时都不用传递后缀名“.js”,SeaJS会自动添加“.js”。但是下面三种情况下不会添加:
载入css时,如:require("./module1-style.css");
路径中含有”?”时,如:require(<a href="http://example/js/a.json?cb=func">http://example/js/a.json?cb=func</a>);
路径以”#”结尾时,如:require("http://example/js/a.json#");
6)传给require的路径标识必须是字符串字面量,不能是表达式,如:require('Module'.toLowerCase());是错的
7)SeaJS提供了一个seajs.config方法可以设置全局配置,接收一个表示全局配置的配置对象。
SeaJS中使用“define”函数定义一个模块。
个人建议遵循SeaJS官方示例的标准,用一个参数的define定义模块。
另外,每个模块应该都定义在一个单独js文件中,即一个js对应一个模块。
包括SeaJS的官方示例在内几乎所有用到define的地方都只传递一个工厂函数进去,
define(function(require, exports, module) {
//code of the module...
});
工厂函数是模块的主体和重点。在只传递一个参数给define时(推荐写法),这个参数就是工厂函数,
此时工厂函数的三个参数分别是:
1.require——模块加载函数,用于加载依赖模块。
2.exports——接口点,将数据或方法定义在其上则将其暴露给外部调用。
3.module——模块的元数据。
2)seajs.use
seajs.use主要用于载入入口模块。
//单一模式
<script>seajs.use('member/subsidy_log');</script>
//回调模式
<script>seajs.use('member/subsidy_log', function(a) {
a.run();
}
</script>
如果入口模块只有一个,也可以通过给引入sea.js的script标签加入”data-main”属性来省略seajs.use,如:
<script src="./sea.js" data-main="./init"></script>
3)require
一个模块对应一个js文件,而载入模块时一般都是提供一个字符串参数告诉载入函数需要的模块,可以使用相对路径,引入
需要的模块:require('jquery'),引入同一路径下的jquery.js文件
require是SeaJS主要的模块加载方法,当在一个模块中需要用到其它模块时一般用require加载:
var m = require('/path/to/module/file');
4)require.async
上文说过SeaJS会在html页面打开时通过静态分析一次性加载所有需要的js文件,
如果想要某个js文件在用到时才下载,可以使用require.async:
require.async('/path/to/module/file', function(m) {
//code of callback...
});
5)注意上面在载入模块时都不用传递后缀名“.js”,SeaJS会自动添加“.js”。但是下面三种情况下不会添加:
载入css时,如:require("./module1-style.css");
路径中含有”?”时,如:require(<a href="http://example/js/a.json?cb=func">http://example/js/a.json?cb=func</a>);
路径以”#”结尾时,如:require("http://example/js/a.json#");
6)传给require的路径标识必须是字符串字面量,不能是表达式,如:require('Module'.toLowerCase());是错的
7)SeaJS提供了一个seajs.config方法可以设置全局配置,接收一个表示全局配置的配置对象。