首頁 > web前端 > js教程 > 主體

require.js的模組化開發

php中世界最好的语言
發布: 2018-03-19 17:06:09
原創
1278 人瀏覽過

這次帶給大家require.js的模組化開發,require.js模組化開發的注意事項有哪些,下面就是實戰案例,一起來看一下。

一、Require.js及AMD

#Require.js:是一個非常小巧的JavaScript 模組載入框架,是AMD規格最好的實作者之一。

AMD(Asynchronous Module Definition):非同步模組定義規範(AMD)制定了定義模組的規則,這樣模組和模組的依賴可以被非同步載入。這和瀏覽器的非同步載入模組的環境剛好適應(瀏覽器同步載入模組會導致效能、可用性、偵錯和跨網域存取等問題)。

// AMD规范// 第一个参数,id,是个字符串。它指的是定义中模块的名字,这个参数是可选的。如果没有提供该参数,模块的名字应该默认为模块加载器请求的指定脚本的名字。如果提供了该参数,模块名必须是“顶级”的和绝对的(不允许相对名字)。// 第二个参数,dependencies,是个定义中模块所依赖模块的数组。依赖模块必须根据模块的工厂方法优先级执行,并且执行的结果应该按照依赖数组中的位置顺序以参数的形式传入(定义中模块的)工厂方法中。// 第三个参数,factory,为模块初始化要执行的函数或对象。如果为函数,它应该只被执行一次。如果是对象,此对象应该为模块的输出值。define(id?, dependencies?, factory);
登入後複製

二、Require.js使用

#1、目錄結構

 舉例中用到了個中文轉換拼音的插件(GitHub位址:https://github.com/sxei/pinyinjs/),這個外掛還挺好用的,但由於中文中存在多音字,經常會出現不符合常規的拼音,例如(賈寶玉=> "gu bao yu")

  ├─scripts
     │─plus
        ├─pinyin
        │ ├─dist
        │ │  ├─pinyin_dict_firstletter.js
        │ │  ├─pinyin_dict_notone.js
        │ │  ├─pinyin_dict_polyphone.js
        │ │  └─pinyin_dict_withtone.js
        │ └─pinyinUtil.js
        ├─jquery.js
        ├─plusMain.js
        ├─require.js
        └─test.js
登入後複製

2、引入r equire.js

<script src="/scripts/plus/require.js"></script>
登入後複製

3、掛載模組

  [1 ] 局部載入

//test.jsdefine(function () {    return {
        add: function (a, b) {
            alert("传参没用上,哈哈");
        }
    }
});//页面代码$(function () {
    require(["/scripts/plus/test.js"], function (h) {
        h.add(1, 2);
    );
})
登入後複製

  [2] 全域載入

//plusMain.jsrequire.config({
    paths: {        jquery: "jquery",
    }
});//页面引用<script src="/scripts/plus/require.js" data-main="/scripts/plus/plusMain" defer async="true></script>
登入後複製

  以此方法載入時,會預設以「/scripts /plus」為根目錄,參數baseUrl可以重設根目錄。

//效果相同require.config({
    baseUrl: "/scripts/plus",
    paths: {        jquery: "jquery"
    }
});
登入後複製

  也可引用遠端文件,也可以同時引用本地文件,當遠端文件載入失敗時就會載入本機文件了。

require.config({
    paths: {        jquery: ["http://libs.baidu.com/jquery/2.0.3/jquery", "jquery"],
    }
});
登入後複製

  透過require載入的模組一般都需要符合AMD規範即使用define來申明模組,但是部分時候需要載入非AMD規範的js,這時候就需要用到另一個功能:shim。

  shim解釋起來也比較難理解,shim直接翻譯為"墊",其實也是有這層意思的,目前我主要用在兩個地方:

  一個是,配置模組的依賴關係:例如,拼音插件pinyinUtil.js需要依賴字典才可以正常轉換。

 1 require.config({ 2     paths: { 3         jquery: "jquery", 4         pinyin_dict_firstletter: "pinyin/dict/pinyin_dict_firstletter", 5         pinyin_dict_withtone: "pinyin/dict/pinyin_dict_withtone", 6         pinyin: "pinyin/pinyinUtil" 7     }, 8     shim: { 9         pinyin: {10             deps: ["pinyin_dict_firstletter", "pinyin_dict_withtone"],// 依赖模块集合11         }12     }13 });14 15 //可以简写成16 shim: {17     pinyin: ["pinyin_dict_firstletter", "pinyin_dict_withtone"]18 }
登入後複製

  也可以依賴css檔案

require.config({
    paths: {
        select2: "select2/select2.min"
    },
    shim: {
        select2: ["/scripts/plus/select2/select2.min.css"]
    },
});
登入後複製

  另一個是,載入非AMD模組輸出,將非標準的AMD模組"墊"成可用的模組。

// test.js(function () {    var NGY = {
        Hi: function() {
            alert("跨越过去之后");
        }
    }
    window.NGY = NGY;
})();//配置require.config({
    paths: {
        ngy: "test"
    },
    shim: {
        ngy: { exports: "NGY" }
    },
});//使用,不需要声明变量就可以直接使用require(["ngy"], function () {
    NGY.Hi();
});
登入後複製

4、使用require

require(["jquery", "pinyin"], function ($, pinyin) {
    $("span").html("谁最可爱?");    var dl = pinyin.getPinyin('当然是我');
});
登入後複製

##我相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

React中有哪些類別定義元件

#navigator.clipboard瀏覽器怎麼製作原生剪貼簿
#

以上是require.js的模組化開發的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!