codecamp

5分钟上手Sea.js

基本应用

导入Seajs库

  1. 去官网下载最新的seajs文件:https://seajs.github.io/seajs/docs/#downloads
  2. 在页尾引入seajs:
    <script src="/site/script/sea.js"></script>
  3. 然后在它下面写模块的配置和入口。

    // seajs 的简单配置
    seajs.config({
      base: "../sea-modules/",
      alias: {
        "jquery": "jquery/jquery/1.10.1/jquery.js"
      }
    });
    
    // 加载入口模块
    seajs.use("../static/hello/src/main");

目录结构

所有源码都存放在 GitHub 上:seajs/examples,目录结构为:

examples/
  |-- sea-modules      存放 seajs、jquery 等文件,这也是模块的部署目录
  |-- static           存放各个项目的 js、css 文件
  |     |-- hello
  |     |-- lucky
  |     `-- todo
  `-- app              存放 html 等文件
        |-- hello.html
        |-- lucky.html
        `-- todo.html

我们从 hello.html 入手,来瞧瞧使用 Sea.js 如何组织代码。

在页面中加载模块

hello.html 页尾,通过 script 引入 sea.js 后,有一段配置代码:

// seajs 的简单配置seajs.config({
  base: "../sea-modules/",
  alias: {
    "jquery": "jquery/jquery/1.10.1/jquery.js"
  }})// 加载入口模块seajs.use("../static/hello/src/main")

   

sea.js 在下载完成后,会自动加载入口模块。页面中的代码就这么简单。

模块代码

这个小游戏有两个模块 spinning.jsmain.js,遵循统一的写法:

// 所有模块都通过 define 来定义define(function(require, exports, module) {

  // 通过 require 引入依赖
  var $ = require('jquery');
  var Spinning = require('./spinning');

  // 通过 exports 对外提供接口
  exports.doSomething = ...

  // 或者通过 module.exports 提供整个接口
  module.exports = ...});

   

上面就是 Sea.js 推荐的 CMD 模块书写格式。如果你有使用过 Node.js,一切都很自然。

构建部署

对于正式项目,在发布上线前,还需要对源码进行压缩、合并等操作。      
     这可以通过 spm 或 Grunt 等工具来实现。简明教程请参考:构建工具    

结束语

怎么样,Sea.js 入门真的只需 5 分钟吧:)

使用 Sea.js,可以规范模块的书写格式、能自动处理模块的依赖,还非常有助于代码组织、开发调试和性能优化。Sea.js      期待能给你提供简单、极致的模块化开发体验。我相信,你会爱上她的。

若喜欢,可查看更多例子:seajs/examples      
     若已爱上,请继续阅读:使用文档

注意事项

  • 模块内的函数依赖必须交代清楚,防止模块在函数依赖加载前先加载出来。而且还增强了模块的独立性。
  • 引入 seajs 的时候最好给<script>标签加个id,可以快速访问到这个标签(我是在模块合并时用到它的)
  • 还有前面提到的使用seajs.use()在.html页面上写js时如果有多个模块依赖,需要使用暴露出来的接口就要让参数与它一一对应。

  • 前端模块化开发的价值
    API 快速参考
    温馨提示
    下载编程狮App,免费阅读超1000+编程语言教程
    取消
    确定
    目录

    插件

    关闭

    MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }