成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

require 和 import 詳解

wanghui / 2552人閱讀

摘要:第二行,在第一行之后運行,因此必須等加載完成。類似于,但是是依賴就近,延遲執(zhí)行,是依賴前置,提前執(zhí)行。是一個文件名重命名導(dǎo)入成員名稱標識符從已經(jīng)存在的模塊腳本文件等導(dǎo)入返回一個對象。

前言

JS模塊化編程是前端小伙伴們必不可少的知識,下面妹子將于自認為比較清晰的方式列舉出來。

1 require

特點:

1.運行時加載

2.拷貝到本頁面

3.全部引入

1.1 CommonJS

Node.js就是用CommonJS思想。
在CommonJS中,有一個全局性方法require(),用于加載模塊。

1.1.1 用法
var math = require("math");
math.add(2, 3);
var math = require("math");
const Math = new math(2, 3)
Math.add();
1.1.2 模塊寫法

模塊寫法分exports和module.exports。

exports.add = (x,y) => x+y;
module.exports = class math {
  constructor(x,y) {
    this.x = x;
    this.y = y;
  }

  add() {
    return  x+y;
  }
};
1.2 AMD

require.js和cujo.js就是用AMD思想。

AMD是”Asynchronous Module Definition”的縮寫,意思就是”異步模塊定義”。它采用異步方式加載模塊,模塊的加載不影響它后面語句的運行。所有依賴這個模塊的語句,都定義在一個回調(diào)函數(shù)中,等到加載完成之后,這個回調(diào)函數(shù)才會運行。

第二行math.add(2, 3),在第一行require(‘math’)之后運行,因此必須等math.js加載完成。也就是說,如果加載時間很長,整個應(yīng)用就會停在那里等。
這對服務(wù)器端不是一個問題,因為所有的模塊都存放在本地硬盤,可以同步加載完成,等待時間就是硬盤的讀取時間。但是,對于瀏覽器,這卻是一個大問題,因為模塊都放在服務(wù)器端,等待時間取決于網(wǎng)速的快慢,可能要等很長時間,瀏覽器處于”假死”狀態(tài)。
因此,瀏覽器端的模塊,不能采用”同步加載”(synchronous),只能采用”異步加載”(asynchronous)。這就是AMD規(guī)范誕生的背景。

1.2.1 用法
//require([module], callback);
require(["math"], function (math) {
 math.add(2, 3);
});
1.2.1 模塊寫法

define(id?, dependencies?, factory)

id:字符串,模塊名稱(可選)

dependencies: 是我們要載入的依賴模塊(可選),使用相對路徑。,注意是數(shù)組格式

factory: 工廠方法,返回一個模塊函數(shù)

一個模塊不依賴其他模塊寫法

// math.js
  define(function (){
    var add = function (x,y){
      return x+y;
    };
    return {
      add: add
    };
  });

模塊還依賴其他模塊

define(["a","b"], function(a,b){
    function foo(){
      a.doSomething();// 依賴前置,提前執(zhí)行
      b.doSomething();
    }
    return {
      foo : foo
    };
  });
當(dāng)require()函數(shù)加載上面這個模塊的時候,就會先加載Lib.js文件。
1.3 CMD

sea.js就是用CMD思想。
CMD是"Common Module Definition"的縮寫。類似于requirejs,但是seajs是依賴就近,延遲執(zhí)行,requirejs是依賴前置,提前執(zhí)行。

1.3.1 用法
seajs.config({
  alias: {
    "jquery": "http://modules.seajs.org/jquery/1.7.2/jquery.js"
  }
});

seajs.use(["./hello", "jquery"], function(hello, $) {
  $("#beautiful-sea").click(hello.sayHello);
});
1.3.1 模塊寫法
define(function(require, exports, module) {
  var $ = require("jquery");

  exports.sayHello = function() {
    $("#hello").toggle("slow");
  };
   var b = require("b");
   b.doSomething();    // 依賴就近,延遲執(zhí)行
});
2 import

特點:

1.編譯時加載

2.只引用定義

3.按需加載

可對比require的特點,發(fā)現(xiàn)import完勝require,推薦用import取代require
2.1.1 用法

import有兩種模塊導(dǎo)入方式:命名式導(dǎo)入(名稱導(dǎo)入)和默認導(dǎo)入(定義式導(dǎo)入),以及 import()。

import defaultMember from "module-name";
import * as name from "module-name";
import { member } from "module-name";
import { member as alias } from "module-name";
import { member1 , member2 } from "module-name";
import { member1 , member2 as alias2 , [...] } from "module-name";
import defaultMember, { member [ , [...] ] } from "module-name";
import defaultMember, * as name from "module-name";
import "module-name";

name-從將要導(dǎo)入模塊中收到的導(dǎo)出值的名稱

member, memberN-從導(dǎo)出模塊,導(dǎo)入指定名稱的多個成員

defaultMember-從導(dǎo)出模塊,導(dǎo)入默認導(dǎo)出成員

alias, aliasN-別名,對指定導(dǎo)入成員進行的重命名

module-name-要導(dǎo)入的模塊。是一個文件名

as-重命名導(dǎo)入成員名稱(“標識符”)

from-從已經(jīng)存在的模塊、腳本文件等導(dǎo)入

import()

import()返回一個 Promise 對象。

// 報錯
if (x === 2) {
  import MyModual from "./myModual";
}

引擎處理import語句是在編譯時,這時不會去分析或執(zhí)行if語句,所以import語句放在if代碼塊之中毫無意義,因此會報句法錯誤,而不是執(zhí)行時錯誤。沒辦法像require樣根據(jù)條件動態(tài)加載。
于是提案引入import()函數(shù),編譯時分析if語句,完成動態(tài)加載。

if(x === 2){
  import("myModual").then((MyModual)=>{
    new MyModual();
  })
}
2.2.1 模塊寫法

export有兩種模塊導(dǎo)出方式:命名式導(dǎo)出(名稱導(dǎo)出)和默認導(dǎo)出(定義式導(dǎo)出),命名式導(dǎo)出每個模塊可以多個,而默認導(dǎo)出每個模塊僅一個。

export { name1, name2, …, nameN };
export { variable1 as name1, variable2 as name2, …, nameN };
export let name1, name2, …, nameN; // also var
export let name1 = …, name2 = …, …, nameN; // also var, const
 
export default expression;
export default function (…) { … } // also class, function*
export default function name1(…) { … } // also class, function*
export { name1 as default, … };
 
export * from …;
export { name1, name2, …, nameN } from …;
export { import1 as name1, import2 as name2, …, nameN } from …;

name1… nameN-導(dǎo)出的“標識符”。導(dǎo)出后,可以通過這個“標識符”在另一個模塊中使用* import引用

default-設(shè)置模塊的默認導(dǎo)出。設(shè)置后import不通過“標識符”而直接引用默認導(dǎo)入

-繼承模塊并導(dǎo)出繼承模塊所有的方法和屬性

as-重命名導(dǎo)出“標識符”

from-從已經(jīng)存在的模塊、腳本文件…導(dǎo)出

參考資料

https://raoenhui.github.io/es6/2018/12/06/import

http://es6.ruanyifeng.com/#docs/module#import

https://www.cnblogs.com/liaojie970/p/7376682.html

Happy coding .. :)

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99938.html

相關(guān)文章

  • 前端模塊化詳解

    摘要:提倡依賴前置,在定義模塊的時候就要聲明其依賴的模塊。適用場景按需加載條件加載動態(tài)的模塊路徑注關(guān)于模塊化,詳細見阮一峰的入門模塊與模塊化區(qū)別模塊化的規(guī)范和兩種。 模塊化開發(fā)方便代碼的管理,提高代碼復(fù)用性,降低代碼耦合,每個模塊都會有自己的作用域。當(dāng)前流行的模塊化規(guī)范有CommonJS,AMD,CMD,ES6的import/export CommonJS的主要實踐者就是nodejs,一般...

    zhangfaliang 評論0 收藏0
  • 前端模塊化詳解(完整版)

    摘要:二模塊化規(guī)范概述應(yīng)用由模塊組成,采用模塊規(guī)范。模塊化語法命令用于規(guī)定模塊的對外接口,命令用于輸入其他模塊提供的功能。 前言 在JavaScript發(fā)展初期就是為了實現(xiàn)簡單的頁面交互邏輯,寥寥數(shù)語即可;如今CPU、瀏覽器性能得到了極大的提升,很多頁面邏輯遷移到了客戶端(表單驗證等),隨著web2.0時代的到來,Ajax技術(shù)得到廣泛應(yīng)用,jQuery等前端庫層出不窮,前端代碼日益膨脹,此時...

    Sanchi 評論0 收藏0
  • 前端模塊化詳解(完整版)

    摘要:二模塊化規(guī)范概述應(yīng)用由模塊組成,采用模塊規(guī)范。模塊化語法命令用于規(guī)定模塊的對外接口,命令用于輸入其他模塊提供的功能。 前言 在JavaScript發(fā)展初期就是為了實現(xiàn)簡單的頁面交互邏輯,寥寥數(shù)語即可;如今CPU、瀏覽器性能得到了極大的提升,很多頁面邏輯遷移到了客戶端(表單驗證等),隨著web2.0時代的到來,Ajax技術(shù)得到廣泛應(yīng)用,jQuery等前端庫層出不窮,前端代碼日益膨脹,此時...

    Pines_Cheng 評論0 收藏0
  • JavaScrip模塊系統(tǒng)詳解

    摘要:是一個字符串,它表示模塊的標識。模塊標準主要有兩部分聲明語法和可編程的加載配置模塊如何以及有條件地加載模塊模塊的基礎(chǔ)在的模塊系統(tǒng)中,有兩種命名的和默認的。 在這幾天的工作中,我需要調(diào)用同事編寫的兼容jQuery和React的通用組件。他為了兼容jQuery風(fēng)格的調(diào)用和React的組件化,分別export了一個default和幾個方法函數(shù)。在調(diào)用的過程中,出現(xiàn)了一些小插曲:React代碼...

    testbird 評論0 收藏0
  • 【JS基礎(chǔ)】一文看懂前端模塊化規(guī)范

    摘要:參考資料前端模塊化詳解完整版入門近一萬字的語法知識點補充徹底搞清楚中的和和詳解 前言 前端的模塊化之路經(jīng)歷了漫長的過程,想詳細了解的小伙伴可以看浪里行舟大神寫的前端模塊化詳解(完整版),這里根據(jù)幾位大佬們寫的文章,將模塊化規(guī)范部分做了匯總和整理,希望讀完的小伙伴能有些收獲,也希望覺得有用的小伙伴可以點個贊,筆芯。 什么是模塊 將一個復(fù)雜的程序依據(jù)一定的規(guī)則(規(guī)范)封裝成幾個塊(文件)...

    HelKyle 評論0 收藏0

發(fā)表評論

0條評論

wanghui

|高級講師

TA的文章

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