`

模块化开发之sea.js实现原理总结

    博客分类:
  • web
 
阅读更多
seajs官网说:seajs是一个模块加载器,所以学习它并不难。

在我的理解就是:本来我们是需要手动创建 script标签 引入 js文件的,但用seajs后,它就自动帮我们完成这些工作。



这里只说实现原理,具体使用请看seajs官网:http://seajs.org/docs/

下面总结一下:

1. sea.js 是怎样解决 模块加载(这里说的模块其实就是js文件加载),

2. sea.js 是怎样解决 模块依赖

3. sea.js 是怎样解决 命名冲突



1.模块加载

  其实,原理很简单,和手动引入js文件是一样的。

  就是当调用有加载功能的函数 如 seajs.use 、 require 、require.async 时,

  其内部代码会创建一个script标签,把src设置成你要引入的js文件,然后append到DOM文档中进行加载,

  当加载完毕后,再把这个script标签移除掉,所以当我们审查元素时看不到有那个<script>标签,

  但因为文件已经引入了,即使把这个script移除也不会影响代码使用.

  我们可以用360卫士限制网速的功能,把网速降低,然后引入jq,是可以看到它就是这样处理的

  sea.js,原理,模块化,开发0

加载完毕后,sea.js会把这个script标签移除:

sea.js,原理,模块化,开发1

总的一句 : 就是利用 script 标签进行模块加载



2.模块依赖

  上面的问题清楚了,其实这个依赖也很简单啦,也就是 加载 顺序的问题。

  例如 a.js 依赖于 b.js, 那在sea.js内部代码中,就先加载b.js然后再加载a.js,这样就可以解决依赖问题了。



3.命名冲突

  解决了上面的两个问题,就剩下依赖接口的问题了, 就是模块的依赖是搞定了,但是sea.js是用define( fn )函数来定义模块的,里面的变量都是局部的,

  得给外面一个接口调用才行啊。

  so,  exports对象就出场啦, 当你使用sea.js定义一个模块的时候,你可以把你的 对外函数接口 都放在exports对象上,  如:

1 define(function (require, exports, module){
2     var arr = [12,3,4,5,56];
3     var method = function (){
4         //code...
5      }
6     exports.arr = arr;   //对外接口
7     exports.method = method;  //对外接口
8 })

当别一个文件要依赖此文件时, 调用 require( url )时,返回值就是这个exports对象,所以就解决了接口的问题。

同时也很好的解决了命名冲突的问题,就算几个同事都用一样的名字,也不会有问题。

因为这里返回的exports就相当于一个命名空间了。

分享到:
评论

相关推荐

    sea.js官方实例

    Sea.js 是一款流行的 JavaScript 模块加载器,它遵循 ...通过这些官方实例,开发者可以深入理解 Sea.js 的工作原理,掌握其使用技巧,并在实际项目中有效利用模块化管理JavaScript代码,提升开发效率和代码质量。

    AMD之require.js与CMD之sea.js

    AMD(Asynchronous Module Definition)和CMD(Common Module Definition)是两种JavaScript模块化开发的规范,它们主要用于解决JavaScript在浏览器环境中异步加载和组织代码的问题。本文将深入探讨AMD的代表作...

    js整合文件

    JavaScript是Web开发中不可或缺的一部分,而sea.js是一个流行的模块加载器,它致力于解决JavaScript的模块化问题。在本文中,我们将深入探讨sea.js的核心概念、功能以及如何整合JavaScript代码。 **1. sea.js 概述*...

    关于seaJsDemo

    这个名为 "Sea.js Demo" 的项目旨在展示 Sea.js 如何在实际应用中工作,帮助开发者理解和学习如何使用 Sea.js 进行模块化开发。 **Sea.js 基础知识** 1. **模块加载机制**: Sea.js 提供了一种按需加载的方式,...

    0223seaJSrequireJSDemo

    在"0223seaJSrequireJSDemo"这个项目中,可能包含的是这两个库的示例代码,演示如何在实际项目中使用 Sea.js 和 Require.js 进行模块化开发。通过分析这些示例,开发者可以更好地理解这两种工具的使用方法和它们在...

    JS前端模块化原理与实现方法详解

    2. **模块化开发的好处** - **避免变量污染和命名冲突**:每个模块都有自己的作用域,模块内部的变量不会影响全局空间。 - **提高代码利用率**:模块可以被多次引用,无需重复编写相同功能的代码。 - **提高维护...

    javascript 构建模块化开发过程解析

    JavaScript 模块化开发是现代前端开发中的重要组成部分,它帮助开发者组织代码,提高代码的可维护性和复用性。在 JavaScript 中,我们通常使用不同的库或框架来实现模块化,如 Sea.js、Require.js 和 Angular。这些...

    node-spm-源码.rar

    通过分析源码,我们可以学习到Node.js的模块化开发、文件系统操作、依赖关系分析、代码打包优化等多个方面的知识。对于想要深入理解和定制模块打包流程的开发者来说,研究`node-spm`源码无疑是一次宝贵的学习机会。

    SeaJS与RequireJS区别

    它的设计目标是符合 CommonJS 规范,提供一种在浏览器环境中实现服务器端模块化开发的方式。SeaJS 的主要特点包括: 1. **简单易用**:SeaJS 的 API 简洁明了,易于理解和上手。例如,使用 `seajs.use` 方法可以...

    js开发手册 js开发手册

    JavaScript,简称JS,是一种轻量级的解释型编程语言,广泛应用于网页和网络应用开发,实现客户端的交互性。在JavaScript开发过程中,了解并掌握其核心概念和语法至关重要。本手册将深入探讨JavaScript的关键知识点,...

    seajs1.3.0源码解析之module依赖有序加载

    Sea.js通过一个简单的全局函数`seajs.use`来加载模块,使得JavaScript模块化开发变得简单易行。 在这个Sea.js 1.3.0版本的源码解析中,我们关注的核心是模块加载机制,以及它是如何确保依赖模块有序加载的。通过...

    简单分页插件simplePagination改造为CMD模块

    CMD是JavaScript模块化开发的一种规范,尤其在中国社区广泛使用,如Sea.js等模块加载器就是基于CMD规范。CMD强调的是就近依赖,即在需要使用某个模块的地方直接require,而不是预先全局定义。 首先,理解`...

    seajs和requirejs模块化简单案例分析

    总结来说,Seajs和RequireJS都是为了实现前端的模块化,使得代码结构更加清晰,依赖关系更容易管理。虽然现在Webpack和Gulp等构建工具在前端开发中更为流行,但Seajs和RequireJS仍然在一些项目中发挥着作用,尤其...

    spm全新的静态包管理器

    它借鉴了Node.js的npm(Node Package Manager)思想,但针对浏览器环境进行了优化,支持浏览器端的模块化开发。spm引入了一种名为Sea.js的模块加载器,使得浏览器可以直接加载和执行模块化的JavaScript代码。 spm的...

    前端项目-seajs.zip

    【前端项目-seajs.zip】是一个包含前端开发工具的压缩包,主要关注的是Seajs模块加载器,这是一个专为Web设计的模块化解决方案。Seajs在前端开发领域扮演着重要角色,因为它提供了一种组织和管理JavaScript代码的...

    seajs实现强制刷新本地缓存的方法分析

    此外,seajs本身还有很多其他功能,例如通过require引入模块时的异步加载等,这些功能可以帮助开发者更高效地进行模块化开发,同时解决一些开发中遇到的难题。 在实际应用seajs进行强制刷新本地缓存时,还应该注意...

    犀利开发+jQuery内核详解与实践(1)

    2. **模块化开发**:介绍AMD(Asynchronous Module Definition)和CMD(Common Module Definition)模块化方案,如RequireJS和Sea.js,以及ES6的模块系统。 3. **响应式设计**:讲解如何使用媒体查询、流式布局等...

    前端开源库-gulp-cmd-build

    Cmd 支持动态加载模块,使得模块化开发更加灵活。Gulp-cmd-build 正是用于帮助开发者将遵循 Cmd 规范的项目进行构建,使其更适合生产环境的部署。 **Gulp-cmd-build** 的主要功能包括: 1. **模块合并**:将多个...

Global site tag (gtag.js) - Google Analytics