146人参与 • 2024-05-15 • Seajs
介绍
众所周知前端开发模块化已经是大势所趋,目前模块化的规范有很多,众所周知的有commonjs,module/wrappings和amd等,而且es6也着手开始制定模块化机制的实现。类似于c/c++的include,java中的import
关键字,在js中也定义了require
关键字,用以引进依赖模块。
由于规范的多样性,模块化的实现也是各有各的不同。
nodejs遵从的就是commonjs规范,它有着一些形式上的约定:
1、require为函数,该函数接受一个字符串作为模块标示符
2、require函数返回值为该模块api
3、require函数出错,则抛出异常
4、exports导出模块api
5、如果有多个require,则依次加载依赖
但是浏览器端加载的模块却不像服务器端,依赖模块不在本地,需要通过http请求获取文件,这就涉及到异步加载。但是异步加载并不阻塞代码的运行,如果函数上下文中应用了加载的依赖模块,而此时依赖模块并未加载或者解析完毕,就会抛出undefined错误,避免该错误的发生可以使用回调模式。当所有依赖模块均加载完毕,后执行代码。这也就是module/wrappings规范,而seajs基本实现了该规范。
seajs 是一个模块加载器,模块加载器需要实现两个基本功能:
1、实现模块定义规范,这是模块系统的基础。
2、模块系统的启动与运行。
剖析
阅读seajs官网的入门demo,首先在主页面引入seajs文件,并设置入口
// seajs 的简单配置 seajs.config({ base: "../sea-modules/", alias: { "jquery": "jquery/jquery/1.10.1/jquery.js" } }) // 加载入口模块 seajs.use("../static/hello/src/main")
其次定义模块(main.js)
// 所有模块都通过 define 来定义 define(function(require, exports, module) { // 通过 require 引入依赖 var $ = require('jquery'); var spinning = require('./spinning'); // 通过 exports 对外提供接口 exports.dosomething = ... // 或者通过 module.exports 提供整个接口 module.exports = ... });
这样,当打开页面时,会调用seajs.use
函数并加载main.js文件,此时解析main模块的依赖,并加载jquery和spining模块,待这两个模块加载完毕,执行回调函数。具体执行细节将会在分析源码时提到。
总结
以上就是关于seajs介绍与剖析的全部内容,希望本文的内容对大家学习或者使用seajs能有所帮助,如果有疑问大家可以留言交流。小编还会陆续更新关于seajs的文章,感兴趣的朋友们请继续关注代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论