RequireJS與SeaJS模塊化加載示例

web應用越變的龐大,模塊化越顯得重要,尤爲Nodejs的流行,Javascript不限用於瀏覽器,還用於後臺或其餘場景時,沒有Class,沒有Package的Javascript語言變得難以管理,因而出現CommonJS項目,提出了一些規範模塊化的寫法,在Nodejs中廣泛應用,一樣瀏覽器端也出現了相似的解決方案,並結合瀏覽器異步加載的特性,有RequireJS提出的AMD(Asynchronous Module Definition)規範,以及SeaJS提出的CMD(Common Module Definition)規範,二者都實現Javascript了模塊化定義的APIs,各有異同,下面將分別使用兩種方案,實現Qunee組件的模塊化加載javascript

相關文章

關於RequireJS的文章不少,這裏重複介紹,列出幾篇專業文章:html

模塊化定義

兩種模塊化方式,都使用define來定義模塊,因此須要將qunee.js改形成模塊化的方式,由於Qunee只有一個全局變量,自己就符合模塊化的寫法,直接用define包一下就能夠了,起名爲qunee-module.js前端

lib/qunee-module.jsjava

define(function (require, exports, module) {
    return function (t, i, e) {
        "use strict";
        ...
    }
});

使用requireJS加載模塊

<script data-main="main" src="lib/require.js"></script>
<script>
require.config({
baseUrl: 'js',
paths: {
Q: '../lib/qunee-module'
}
});</script>

首先須要引入requireJS,並設置了"data-main"屬性爲"main",表示入口模塊"js/main.js",之因此在./js/目錄,是由於後面配置了require,設置了"baseUrl"爲"js",表示根目錄爲"js/",後面配置的paths,也是相對這個目錄,paths中至關於設置模塊別名,後面可經過別名引入模塊web

var Q = require("Q");

使用SeaJS加載模塊

若是用SeaJS則能夠改爲下面的代碼編程

<script src="lib/sea.js"></script>
<script>
// seajs 的簡單配置
seajs.config({
base: "./js",
alias: {
"Q": "../lib/qunee-module.js"
}
});
// 加載入口模塊
seajs.use("main");
</script>

入口模塊

入口程序也可使用define的形式,並經過傳入參數"require"來加載模塊
好比引入qunee-module.jscanvas

var Q = require("Q");

js/main.js瀏覽器

define(function(require) {
    var Q = require("Q");
    var graph = new Q.Graph("canvas");
    var hello = graph.createNode("Hello", -100, -50);
    hello.image = Q.Graphs.server;
    var qunee = graph.createNode("Qunee", 100, 50);
    var edge = graph.createEdge("Hello\nQunee", hello, qunee);

    edge.setStyle(Q.Styles.LABEL_OFFSET_Y, -10);
    edge.setStyle(Q.Styles.LABEL_POSITION, Q.Position.CENTER_TOP);
    edge.setStyle(Q.Styles.LABEL_ANCHOR_POSITION, Q.Position.CENTER_BOTTOM);
    edge.setStyle(Q.Styles.LABEL_BORDER, 1);
    edge.setStyle(Q.Styles.LABEL_POINTER, true);
    edge.setStyle(Q.Styles.LABEL_PADDING, new Q.Insets(2, 5));
    edge.setStyle(Q.Styles.LABEL_BACKGROUND_GRADIENT, Q.Gradient.LINEAR_GRADIENT_VERTICAL);
});

目錄結構

示例下載:load-qunee-by-module.zip
異步

相關文章
相關標籤/搜索