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

資訊專欄INFORMATION COLUMN

require,import區(qū)別

Rango / 2731人閱讀

摘要:,區(qū)別遵循的模塊化規(guī)范不一樣模塊化規(guī)范即為提供一種模塊編寫模塊依賴和模塊運行的方案。出現(xiàn)的時間不同相關(guān)的規(guī)范由于野生性質(zhì),在年前后出生。作為的規(guī)范,一直沿用至今。這其實要感謝原來項目名叫做,后更名為這個神一般的項目。

require,import區(qū)別 遵循的模塊化規(guī)范不一樣

模塊化規(guī)范:即為 JavaScript 提供一種模塊編寫、模塊依賴和模塊運行的方案。誰讓最初的 JavaScript 是那么的裸奔呢——全局變量就是它的模塊化規(guī)范。

require/exports 出生在野生規(guī)范當中,什么叫做野生規(guī)范?即這些規(guī)范是 JavaScript 社區(qū)中的開發(fā)者自己草擬的規(guī)則,得到了大家的承認或者廣泛的應(yīng)用。比如 CommonJS、AMD、CMD 等等。import/export 則是名門正派。TC39 制定的新的 ECMAScript 版本,即 ES6(ES2015)中包含進來。

出現(xiàn)的時間不同

require/exports 相關(guān)的規(guī)范由于野生性質(zhì),在 2010 年前后出生。AMD、CMD 相對命比較短,到 2014 年基本上就搖搖欲墜了。一開始大家還比較喜歡在瀏覽器上采用這種異步小模塊的加載方式,但并不是銀彈。隨著 Node.js 流行和 Browsersify 的興起,運行時異步加載逐漸被構(gòu)建時模塊合并分塊所替代。Wrapper 函數(shù)再也不需要了。 2014 年 Webpack 還是新玩意,現(xiàn)在已經(jīng)是前端必備神器了。

Browsersify、Webpack 一開始的目的就是打包 CommonJS 模塊。

CommonJS 作為 Node.js 的規(guī)范,一直沿用至今。由于 npm 上 CommonJS 的類庫眾多,以及 CommonJS 和 ES6 之間的差異,Node.js 無法直接兼容 ES6。所以現(xiàn)階段 require/exports 任然是必要且實必須的。出自 ES6 的 import/export 相對就晚了許多。被大家所熟知和使用也是 2015 年之后的事了。 這其實要感謝 babel(原來項目名叫做 6to5,后更名為 babel) 這個神一般的項目。由于有了 babel 將還未被宿主環(huán)境(各瀏覽器、Node.js)直接支持的 ES6 Module 編譯為 ES5 的 CommonJS —— 也就是 require/exports 這種寫法 —— Webpack 插上 babel-loader 這個翅膀才開始高飛,大家也才可以稱 " 我在使用 ES6!"

這也就是為什么前面說 require/exports 是必要且必須的。因為事實是,目前你編寫的 import/export 最終都是編譯require/exports 來執(zhí)行的。

require/exports 和 import/export 形式不一樣

require/exports 的用法只有以下三種簡單的寫法:

const fs = require("fs")
exports.fs = fs
module.exports = fs

而 import/export 的寫法就多種多樣:

import fs from "fs"
import {default as fs} from "fs"
import * as fs from "fs"
import {readFile} from "fs"
import {readFile as read} from "fs"
import fs, {readFile} from "fs"

export default fs
export const fs
export function readFile
export {readFile, read}
export * from "fs"
require/exports 和 import/export 本質(zhì)上的差別

形式上看起來五花八門,但本質(zhì)上:

CommonJS 還是 ES6 Module 輸出都可以看成是一個具備多個屬性或者方法的對象;

default 是 ES6 Module 所獨有的關(guān)鍵字,export default fs 輸出默認的接口對象,import fs
from "fs" 可直接導(dǎo)入這個對象;

ES6 Module 中導(dǎo)入模塊的屬性或者方法是強綁定的,包括基礎(chǔ)類型;而 CommonJS 則是普通的值傳遞或者引用傳遞。

1、2 相對比較好理解,3 需要看個例子:

// counter.js
exports.count = 0
setTimeout(function () {
  console.log("increase count to", exports.count++, "in counter.js after 500ms")
}, 500)

// commonjs.js
const {count} = require("./counter")
setTimeout(function () {
  console.log("read count after 1000ms in commonjs is", count)
}, 1000)

//es6.js
import {count} from "./counter"
setTimeout(function () {
  console.log("read count after 1000ms in es6 is", count)
}, 1000)

分別運行 commonjs.js 和 es6.js:

?  test node commonjs.js
increase count to 1 in counter.js after 500ms
read count after 1000ms in commonjs is 0
?  test babel-node es6.js
increase count to 1 in counter.js after 500ms
read count after 1000ms in es6 is 1

鏈接:https://www.zhihu.com/questio...
來源:知乎

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/84613.html

相關(guān)文章

  • require和ES6 import區(qū)別

    摘要:模塊化的進程里,出現(xiàn)了很多模塊化的方案,,。隨著標準的發(fā)布,的規(guī)范也被廣泛使用了。只是瀏覽器的支持程度不高,需要配合轉(zhuǎn)碼工具使用。輸出可以看出,很重要的一個區(qū)別就是一個基本值是否會同步變化, js模塊化的進程里,出現(xiàn)了很多模塊化的方案,commonjs,requirejs(AMD),CMD。隨著ES6標準的發(fā)布,import/export的規(guī)范也被廣泛使用了。只是瀏覽器的支持程度不高,...

    miguel.jiang 評論0 收藏0
  • requireimport區(qū)別是什么?看這個你就懂了

    摘要:所以,在模塊代碼執(zhí)行完之前,根本不知道這個模塊到底出了什么東西,這也是和最大的區(qū)別,因為是基于關(guān)鍵字的模塊化,是可以在解析的過程中就知道導(dǎo)出了什么。 require import 動態(tài)評估 靜態(tài)評估 再運行時報錯 再解析時報錯 不是關(guān)鍵詞 是關(guān)鍵詞 語法 CommonJs dep.js module.exports = { foo: function (...

    lemanli 評論0 收藏0
  • 前端模塊化詳解

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

    zhangfaliang 評論0 收藏0
  • 談?wù)凧s前端模塊化規(guī)范

    摘要:依賴全部加載完成后,調(diào)用回調(diào)函數(shù)規(guī)范異步加載模塊規(guī)范和很相似,簡單,并與和的規(guī)范保持了很大的兼容性在規(guī)范中,一個模塊就是一個文件。 拋出問題: 在開發(fā)中在導(dǎo)入模塊時經(jīng)常使用require和import; 導(dǎo)出模塊時使用module.exports/exports或者export/export default; 有時候為了引用一個模塊會使用require奇怪的是也可以使用import?...

    Steve_Wang_ 評論0 收藏0
  • 談?wù)凧s前端模塊化規(guī)范

    摘要:依賴全部加載完成后,調(diào)用回調(diào)函數(shù)規(guī)范異步加載模塊規(guī)范和很相似,簡單,并與和的規(guī)范保持了很大的兼容性在規(guī)范中,一個模塊就是一個文件。 拋出問題: 在開發(fā)中在導(dǎo)入模塊時經(jīng)常使用require和import; 導(dǎo)出模塊時使用module.exports/exports或者export/export default; 有時候為了引用一個模塊會使用require奇怪的是也可以使用import?...

    NeverSayNever 評論0 收藏0

發(fā)表評論

0條評論

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