国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

前端模塊化之AMD/require.js、CMD/sea.js

buildupchao / 974人閱讀

摘要:代碼地址模塊化的主要區(qū)別此前年前前前前前端模塊化,主流的就是,支持的二者都可以用為什么模塊化一直以來,前端開發(fā)的痛點(diǎn)之一就是代碼復(fù)用職責(zé)劃分問題,兼容性比如等新語法的支持組件化代碼壓縮等不在本文討論范圍。

前言

請(qǐng)注意,現(xiàn)在是2019/05/22,這!不!是!墳!貼!,你沒!有!穿!越!!
為了以后,可能需要搞一下以前的舊項(xiàng)目,自己也想玩玩,,,所以補(bǔ)一下舊時(shí)代的模塊化玩法。。。

代碼:github地址

AMD/CMD/Common.js/UMD/ES6模塊化的主要區(qū)別

此前(2019年前前前前)前端模塊化,主流的就是AMD/CommonJS,支持UMD的二者都可以用

為什么模塊化?

一直以來,前端開發(fā)的痛點(diǎn)之一就是 代碼復(fù)用/職責(zé)劃分 問題,兼容性比如ES6等新語法的支持/組件化/代碼壓縮等不在本文討論范圍。

在這些 前端模塊化 的東西出現(xiàn)之前,都是用

目錄結(jié)構(gòu):

...
equire.js-AMD
    ├─ index.html
    ├─ js
      ├─ lodash.js
      ├─ m1.js
      └─ m2.js
    ├─ main.js
    └─ require.js
HTML
<script src="./require.js" data-main="./main.js">script>
入口 main.js
// js/mian.js
// 全局配置
require.config({
  // 根路徑設(shè)置,paths下面全部都是根據(jù)baseUrl的路徑去設(shè)置
  baseUrl:"./js",
  paths: { // 定義引用時(shí)名稱對(duì)應(yīng)的路徑
    m1: "m1",
    m2: "m2",
    lodash: "lodash"
  },
  // 用來配置不兼容的模塊,沒有module.exports的第三方庫(未驗(yàn)證。。。)
  // shim:{
  //   "lodash": {
  //     exports: "_"
  //   }
  // }
})

define("main", function() {
  require(["m1"], function(m1) {
    console.log("name: ", m1.name);
    console.log("add: ", m1.add(2, 8));
  });
})

模塊定義

define函數(shù)格式: define(id");

// js/m1.js
// define(id");
define("m1", ["lodash", "m2"], function(_, m2) {
  
  _.map([1,2], function(num){
    console.log("num: ", num);
  });

  console.log(m2);

  var add = function(x, y) {
    return x + y;
  };

  return {
    name: "m1.js",
    add: add
  };
})

二、CMD/sea.js

什么是CMD?

在瀏覽器端的CommonJS(除去某些Node.js環(huán)境特有的API);同步、動(dòng)態(tài)加載;

依賴就近,哪里需要哪里require

異步引入 require.async([dependencies], callback)

使用 exports/module.exports 方式導(dǎo)出

以下使用sea.js v3.0.0示例:

目錄結(jié)構(gòu):

...sea.js--CMD
    ├─ index.html
    ├─ js
      ├─ lodash.js
      ├─ m1.js
      └─ m2.js
    ├─ main.js
    └─ sea.js
HTML
  <script src="./js/lodash.js">script>
  <script src="./sea.js">script>
  <script>
    // 配置
    seajs.config({
      base: "./", // 后續(xù)引用基于此路徑
      alias: {  // 別名,可以用一個(gè)名稱 替代路徑(基于base路徑)
        lodash: "js/lodash.js",
        m1: "js/m1",
        m2: "js/m2",
      },
    });

    // 加載入口模塊
    seajs.use("./main.js", function(main) {
      // 執(zhí)行完 main.js導(dǎo)出(exports/module.exports)之前的同步操作之后的 回調(diào)
      main.init(); // init
    });

  script>
入口 main.js
// js/mian.js
define(function(require, exports, module) {
  var m1 = require("m1");
  console.log(m1.add(2,8));

  // 多帶帶導(dǎo)出
  exports.init = function init() {
    console.log("init");
  }

  // 或者 先定義,再統(tǒng)一導(dǎo)出
  // function init() {
  //   console.log("init");
  // }
  // module.exports = {
  //   init: init
  // }
});

模塊定義

define函數(shù)格式: define(function(require, exports, module) {})

// js/m1.js
define(function(require, exports, module) {
  // 使用第三方庫 lodash.js,script標(biāo)簽導(dǎo)入
  // 優(yōu)先require,不然使用script
  _.map([1,2], function(item) {
    console.log(item);
  })

  // 異步引入
  require.async("m2", function(m2) {
    console.log("異步引入 m2");
  }); // m2

  // 每個(gè)函數(shù)多帶帶導(dǎo)出
  exports.add = function(x, y) {
    return x + y;
  }

  // 或者 先定義,再統(tǒng)一導(dǎo)出
  // function add(x, y) {
  //   return x + y;
  // }
  // modules.exports = {
  //   add: add
  // }
});

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/6879.html

相關(guān)文章

  • 前端面試題及答案 - JS

    摘要:中使用操作符具體做了哪些事情創(chuàng)建了一個(gè)空對(duì)象空對(duì)象的屬性指向構(gòu)造函數(shù)的屬性執(zhí)行構(gòu)造函數(shù),將的指向前端面試題及答案瀏覽器篇前端面試題及答案篇前端面試題及答案篇前端面試題及答案性能優(yōu)化篇 這篇文章并不是最全的前端面試題(沒有最全,只有更全),只是針對(duì)自己面試過程中遇到的一些難題、容易忽略的題做一個(gè)簡單的筆記,方便后面有面試需要的小伙伴們借鑒,后續(xù)內(nèi)容會(huì)不定時(shí)更新,有錯(cuò)誤之處希望大家不吝指出...

    Shimmer 評(píng)論0 收藏0
  • require 和 import 詳解

    摘要:第二行,在第一行之后運(yùn)行,因此必須等加載完成。類似于,但是是依賴就近,延遲執(zhí)行,是依賴前置,提前執(zhí)行。是一個(gè)文件名重命名導(dǎo)入成員名稱標(biāo)識(shí)符從已經(jīng)存在的模塊腳本文件等導(dǎo)入返回一個(gè)對(duì)象。 前言 JS模塊化編程是前端小伙伴們必不可少的知識(shí),下面妹子將于自認(rèn)為比較清晰的方式列舉出來。 1 require 特點(diǎn): 1.運(yùn)行時(shí)加載 2.拷貝到本頁面 3.全部引入 1.1 CommonJS No...

    wanghui 評(píng)論0 收藏0
  • 讓 Angular 1.x 跟上時(shí)代的步伐

    摘要:所以說的模塊機(jī)制沒有解決文件依賴關(guān)系和文件異步加載的問題。大部分團(tuán)隊(duì)還是停留在第二第三階段,每個(gè)階段的實(shí)現(xiàn)都有很多種選擇。希望這篇文章能夠激起大家永遠(yuǎn)保持積極向前追求完美代碼的心,不僅對(duì)自己的成長也會(huì)對(duì)公司帶來無限的價(jià)值。 本篇技術(shù)博客來自有著化腐朽為神奇能力的,Worktile 技術(shù)牛人Web 總監(jiān) @徐海峰 大神的分享~滿滿的干貨,你值得擁有! Worktile 的前端構(gòu)建之路 2...

    李增田 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<