seajs的使用

seajs是一个jS模块加载器,由淘宝前端架构师玉伯开发,它可以解决命名空间污染,文件依赖的问题.可以在一个js文件中引入另外一个js.require('a.js')

1.安装

npm install --save seajs

2.API

2.1 require

在一个模块中引入其它模块

var addSub = require('./addSub');

2.2 seajs.use()

  • 加载模块,启动模块系统。

    • 加载一个模块 seajs.use('id')
    • 加载一个模块,在加载完成时,执行回调 seajs.use('id', callback)
    • 加载多个模块,加载完成时,执行回调 seajs.use(['id1','id2',…],callback)
  • 注意:
    • 在调用 seajs.use 之前,需要先引入 sea.js 文件
    • seajs.use 与 DOM ready 事件没有任何关系。如果某些操作要确保在 DOM ready 后执行,需要使用 jquery 等类库来保证

      + seajs.use 理论上只用于加载启动,不应该出现在 define 中的模块代码里

2.3 module

module 是一个对象,上面存储了与当前模块相关联的一些属性和方法。

  • module.id

    模块的唯一标识,可以通过 define 方法的第一个参数来指定,默认为该模块文件的绝对路径
  • module.uri

    模块的绝对路径
  • module.dependencies

    dependencies 是一个数组,表示当前模块的依赖
  • module.exports

    当前模块对外提供的接口对象

    相当于每个模块内部最终都执行了这么一句话:return module.exports

    模块与模块之间的通信接口
  1. module.exports={
  2. add:function(x,y){
  3. return parseFloat(x)+parseFloat(y);
  4. },
  5. sub:function(x,y){
  6. return parseFloat(x)-parseFloat(y);
  7. }
  8. }

2.4 exports

每个文件模块中默认的对外接口对象是module.exports,另外seajs还提供了一个接口对象exports

注意:exports是module.exports接口对象的一个引用,也就是说修改了exports就相当于修改了module.exports

将模块中定义的数据接口暴露出去(变量,方法),供其它模块使用.

但是如果要向外暴露一个单独的变量,函数等成员,那就必须通过给module.exports赋值才可以

2.5 define(factory)

  • define 是一个全局函数,用来定义模块。

  • define 接受 factory 参数,factory 可以是一个函数,也可以是一个对象或字符串。

  • factory 为对象、字符串时,表示模块的接口就是该对象、字符串。

  • factory 是一个对象时

  • define({})

  • factory 是一个字符串时

  • define('hello')

  • factory 是一个函数时
  1. define(function(require,exports,module){
  2. //...js代码...
  3. });

3.使用步骤

  • 模块系统:

    • 1.定义模块成员
    • 2.设定交互规则
  • 3.1 引包
  • 3.2 使用define定义一个模块,所有代码写到define回调函数中
  • 3.3 使用module.exports作为模块与模块之间的通信接口对象
  • 3.4 使用require函数加载模块,执行模块中的代码得到模块中的module.exports接口对象
  • 3.5 使用seajs.use方法,启动模块系统.

4.小案例

4.1html文件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <input type="text" id="inputX">
  9. <select name="" id="selMethed">
  10. <option value="0">+</option>
  11. <option value="1">-</option>
  12. </select>
  13. <input type="text" id="inputY">
  14. <button id="btn">=</button>
  15. <input type="text" id="outPut">
  16. <!--1.引入seajs包-->
  17. <script src="lib/sea.js"></script>
  18. <script>
  19. /*2.设置主入口文件*/
  20. seajs.use('./js/main')
  21. </script>
  22. </body>
  23. </html>

4.2main.js文件 主模块入口文件

  1. define(function(require,exports,module){
  2. /*引入addSub模块*/
  3. var addSub = require('./addSub');
  4. var inputX = document.querySelector('#inputX');
  5. var inputY = document.querySelector('#inputY');
  6. var selMethed = document.querySelector('#selMethed');
  7. var outPut = document.querySelector('#outPut');
  8. var addSubClick = document.querySelector('#btn');
  9. var selMethedValue = selMethed.value;
  10. var outPutValue='';//存储计算的结果
  11. addSubClick.onclick=function(){
  12. var xValue = inputX.value;
  13. var yValue = inputY.value;
  14. console.log(xValue);
  15. /*使用addSub中暴露的方法*/
  16. switch(selMethedValue){
  17. case '0':
  18. outPutValue = addSub.add(xValue,yValue);
  19. break;
  20. case '1':
  21. outPutValue = addSub.sub(xValue,yValue);
  22. }
  23. console.log(outPutValue);
  24. //把结果放在输出的input的中
  25. outPut.value=outPutValue;
  26. }
  27. });

4.3addSub.js被引用的模块文件

  1. define(function(require,exports,module){
  2. module.exports={
  3. add:function(x,y){
  4. return parseFloat(x)+parseFloat(y);
  5. },
  6. sub:function(x,y){
  7. return parseFloat(x)-parseFloat(y);
  8. }
  9. }
  10. });

sea.js模块加载工具的更多相关文章

  1. 第三课:sea.js模块加载原理

    模块加载,其实就是把js分成很多个模块,便于开发和维护.因此加载很多js模块的时候,需要动态的加载,以便提高用户体验. 在介绍模块加载库之前,先介绍一个方法. 动态加载js方法: function l ...

  2. js模块化/js模块加载器/js模块打包器

    之前对这几个概念一直记得很模糊,也无法用自己的语言表达出来,今天看了大神的文章,尝试根据自己的理解总结一下,算是一篇读后感. 大神的文章:http://www.css88.com/archives/7 ...

  3. js模块加载之AMD和CMD

    当我写这篇文章的时候,sea.js已经逐渐退出历史的舞台,详细链接.不过任何新事物的出现都是对旧事物的取其精华,去其糟粕,所以了解一下以前模块的加载也是一件好事. js模块化的原因自不比多说,看看HU ...

  4. nodejs js模块加载

    本文地址:http://www.cnblogs.com/jasonxuli/p/4381747.html nodejs的非核心模块(core module)加载主要使用的就是module.js. 项目 ...

  5. 实现简单的 JS 模块加载器

    实现简单的 JS 模块加载器 1. 背景介绍 按需加载是前端性能优化的一个重要手段,按需加载的本质是从远程服务器加载一段JS代码(这里主要讨论JS,CSS或者其他资源大同小异),该JS代码就是一个模块 ...

  6. js模块加载框架 sea.js学习笔记

    seajs实现了JavaScript 的 模块开发及按模块加载.用来解决繁琐的js命名冲突,文件依赖等问题,其主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载. 官方文档:http:/ ...

  7. 关于前端JS模块加载器实现的一些细节

    最近工作需要,实现一个特定环境的模块加载方案,实现过程中有一些技术细节不解,便参考 了一些项目的api设计约定与实现,记录下来备忘. 本文不探讨为什么实现模块化,以及模块化相关的规范,直接考虑一些技术 ...

  8. 【 js 模块加载 】深入学习模块化加载(node.js 模块源码)

    一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须按照一定的格式编写.AMD,CMD,CommonJS 是目前最常用的三种模块化书写规范.  1.AMD(Asy ...

  9. webpack前端模块加载工具

    最近在看许多React的资料,发现了大部分的项目都是用webpack行模块化管理的工具.这次也是借着写了一个React-Todos的小应用,对webPack最基本实用的功能体验了一番,顺带做个小记录. ...

随机推荐

  1. appium 链接真机运行时报错

    今天用appium链接真机时,碰到的第一个问题:Attempt to re-install io.appium.settings without first uninstalling.(这是日志中显示 ...

  2. strcpy函数学习

    strcpy的功能如下: 原型声明:char *strcpy(char* dest, const char *src); 头文件:#include <string.h> 和 #includ ...

  3. ceph-pg

    版本:mimic https://192.168.1.5:8006/pve-docs/chapter-pveceph.html#pve_ceph_osds As a rule of thumb, fo ...

  4. webservice 应用

    一直以来,dashboard就会面临一个非常难堪的问题.就是刷新速度太慢了.它要连接query 来获取数据.而query每刷一次都需要时间.这是无可避免的结果.尽管它也是结果集,可还是比较慢.最近实践 ...

  5. python学习笔记:sys、os模块

    os模块:负责程序与操作系统的交互,提供了访问操作系统底层的接口; sys模块:负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境. --os 常用方法-- ...

  6. CSRF如何防御

    总结网上所说,细细的归纳下 CSRF利用的时网站对用户网页浏览器的信任.在受害人不知情的情况下以 受害人的名义伪造请求发送给攻击者的站点. 1.首先XSS漏洞先防护好(一般是通过过滤器更改特殊字符) ...

  7. 17-vim-查找字符或单词-02-查找并替换

    在vi中查找和替换命令需要在末行模式下执行. 命令 功能 :%s///g 末行模式下,查找并替换字符.例:%s /hello/world/g 1.全局替换 一次性替换文件中的所有文件的旧文本. 命令格 ...

  8. tomcat部署项目后,项目没有成功部署到tomcat里面,或者部署的是之前项目

    用svn下载java项目到本地,导入eclipse里面,然后部署到tomcat里,启动tomcat,一闪而过,在浏览器中打开,报404错(找不到页面),其实是项目没有成功部署到tomcat,可以打开t ...

  9. 2019南昌邀请赛预选赛 I. Max answer (前缀和+单调栈)

    题目:https://nanti.jisuanke.com/t/38228 这题题解参考网上大佬的. 程序的L[i],R[i]代表a[i]这个点的值在区间 [L[i],R[i]] 中最小的并且能拓展到 ...

  10. webpack起的项目怎么用手机访问?

    默认情况下 webpack-dev-server只能通过 localhost 访问 如果需要通过 ip 地址访问,修改 npm 配置文件中的 scripts 属性中对应的启动脚本 例如 start 或 ...