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

資訊專欄INFORMATION COLUMN

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

buildupchao / 971人閱讀

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

前言

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

代碼:github地址

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

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

為什么模塊化?

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

在這些 前端模塊化 的東西出現之前,都是用

目錄結構:

...
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({
  // 根路徑設置,paths下面全部都是根據baseUrl的路徑去設置
  baseUrl:"./js",
  paths: { // 定義引用時名稱對應的路徑
    m1: "m1",
    m2: "m2",
    lodash: "lodash"
  },
  // 用來配置不兼容的模塊,沒有module.exports的第三方庫(未驗證。。。)
  // shim:{
  //   "lodash": {
  //     exports: "_"
  //   }
  // }
})

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

模塊定義

define函數格式: 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環境特有的API);同步、動態加載;

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

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

使用 exports/module.exports 方式導出

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

目錄結構:

...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: "./", // 后續引用基于此路徑
      alias: {  // 別名,可以用一個名稱 替代路徑(基于base路徑)
        lodash: "js/lodash.js",
        m1: "js/m1",
        m2: "js/m2",
      },
    });

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

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

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

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

模塊定義

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

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

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

  // 每個函數多帶帶導出
  exports.add = function(x, y) {
    return x + y;
  }

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/6879.html

相關文章

  • 前端面試題及答案 - JS

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

    Shimmer 評論0 收藏0
  • require 和 import 詳解

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

    wanghui 評論0 收藏0
  • 讓 Angular 1.x 跟上時代的步伐

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

    李增田 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<