模块系统 #240

Closed
lifesinger opened this Issue Jul 2, 2012 · 25 comments

Projects

None yet
@lifesinger
Member

什么是系统

在生活和工作中,我们会接触到大量系统:自然界生态系统、计算机操作系统、软件办公系统,还有教育系统、金融系统、网络系统、理论系统等等。究竟什么是系统呢?

来看下维基百科的解释:

系统泛指由一群有关连的个体组成,根据预先编排好的规则工作,能完成个别元件不能单独完成的工作的群体。系统分为自然系统与人为系统两大类。

简言之,系统有两个基本特性:

  1. 系统由个体组成。
  2. 个体之间有关连,按照规则协同完成任务。

系统中的个体可称之为系统成员,这样,要构建一个系统,最基本层面需要做两件事:

  1. 定义系统成员:确定成员是什么。
  2. 约定系统通讯:确定成员之间如何交互,遵循的规则是什么。

只要把这两个问题描述清楚,我们就可以构建出系统。

模块系统

Sea.js 是一个适用于 Web 浏览器端的模块加载器。在 Sea.js 里,一切皆是模块,所有模块协同构建成模块系统。Sea.js 首要要解决的是模块系统的基本问题:

  1. 模块是什么?
  2. 模块之间如何交互?

在前端开发领域,一个模块,可以是JS 模块,也可以是 CSS 模块,或是 Template 等模块。在 Sea.js 里,我们专注于 JS 模块(其他类型的模块可以转换为 JS 模块):

  1. 模块是一段 JavaScript 代码,具有统一的基本书写格式。
  2. 模块之间通过基本交互规则,能彼此引用,协同工作。

把上面两点中提及的基本书写格式和基本交互规则描述清楚,就能构建出一个模块系统。对书写格式和交互规则的详细描述,就是模块定义规范(Module Definition Specification)。比如 CommonJS 社区的 Modules 1.1.1 规范,以及 NodeJS 的 Modules 规范,还有 RequireJS 提出的 AMD 规范等等。

Sea.js 遵循的是 CMD 规范,会在接下来的文档中详细阐述。

延伸阅读

@lifesinger
Member

有任何问题,欢迎留言交流。
注意:已解决的问题,会在整理后删除掉。

@lifesinger lifesinger closed this Jul 2, 2012
@jiuyuehe

50分钟都没有入门,泪奔啊

@zhiyi10
zhiyi10 commented Oct 30, 2013

学习一下~

@shingchi
shingchi commented Nov 6, 2013

@rebornvip 你所使用依赖JQ的模块里,定义的依赖是不是['$']?如果是这样,很可能获取不到。

@dxq613
dxq613 commented Nov 9, 2013

控制台里面输出:Found circular dependencies,但是我没有发现对应模块的循环引用,这是怎么回事儿,1.30的版本

@Cleam
Cleam commented Mar 4, 2014

学习一下~~正在准备入门中~~~

@yanyinxi

学习中

@fully100

要想深入还是挺难的啊。。。

@Lucici
Lucici commented Jun 19, 2014

必须掌握,最近写JS稍微复杂一些的功能居然要写400多行JS代码,而且是引用了JQuery库的情况下,我想我该静心深入的学习学习。

@lancejchen

@jiuyuehe 个人理解,使用级别就是知道seajs就是做cmd的调用器,能起到管理module(片段及函数调用不污染全局变量的作用,module看起来更系统)。使用的话主要会用 seajs.use(./filename), config, define(require, export, module)。
之后改下已有js文件们使他们符合define(require,export,module)标准,就完成了seajs化。
看下作者的api上手文章:#266

@ekinwei
ekinwei commented Aug 13, 2014

请问下,我加载一个dialog模块,会引用很多依赖模块,那请求是不是太多了?

@wtsoftware

感觉水还是挺深的,快速入手好多关键点没提出来,简单点可能为了一步步吸引开发者吧!最好把一个例子完整的介绍一下吧,东西不错大家都会认真学习的!

@1129778586

看了3天才入门。。

@lizzie
Member
lizzie commented Mar 20, 2015

@1129778586 好吧。如果跟你说这都快过时了,会打击你更多么?😭

@beckgoal23

支持支持

@janryWang

@beckgoal23 看看我的kvm吧,简单,强大https://github.com/janryWang/kvm

@selenium888

订单

@JamesSky
JamesSky commented Mar 7, 2016

开始使用中...

@wangguozheng

还是没搞明白啊,如何搭建环境啊,没有更详细的入门讲解吗?

@ianguyue

没搞明白define(function(require,exports,module){
var a = require('./jquery')
})

seajs.config({
base: "../sea-modules/",
alias: {
"jquery": "jquery/jquery/1.10.1/jquery.js"
}
});
中 require('./jquery') 与 alias: { "jquery": "jquery/jquery/1.10.1/jquery.js"} 这两者有什么关系

@ChristopherMa2012

@ianguyue jquery是“jquery/jquery/1.10.1/jquery.js”这一大串的别名

@clywind
clywind commented Aug 26, 2016

50天都没入门,血奔。。。

@jiajinning

一天了都还没有入门,云里雾里哈!这都是给高手看的

@JackieDark

这个确实挺好的,个人感觉比requireJs更适合模块化开发的新手。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment