电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JavaScript ES 模塊的使用

瀏覽:47日期:2023-10-08 15:47:13

自從 ES 模塊被添加到規范中后,JavaScript 中的模塊就更加簡單了。模塊按文件分開,異步加載。導出是用 export 關鍵字定義的;值可以用 import 關鍵字導入。

雖然導入和導出單個值的基礎知識非常容易掌握和使用,但還有許多其他方法可以使用 ES 模塊來使你的導入和導出按照你需要的方式工作。在本文中,我將介紹你可以在模塊中導出和導入的所有方法。

需要記住的一點是,導出和靜態導入只能發生在模塊的最外層。你不能從函數、if 語句或任何其他塊中導出或靜態導入。另外,動態導入可以在函數中完成,我們將在本文最后討論它。

導出

默認導出

每個模塊都有一個 '默認 '導出,它代表了模塊導出的主要值。可能會有更多的導出值,但默認導出值代表模塊的定義。一個模塊中只能有一個默認導出。

const fruitBasket = new FruitBasket()export default fruitBasket

注意,在默認導出之前,我必須先定義該值。如果我想,我也可以立即導出我的值,而不把它分配給一個變量,但這樣我就不能在導出的同時將其賦值給一個變量。

我們可以默認導出一個函數聲明和一個類聲明,而不需要先把它分配給一個變量。

export default function addToFruitBasket(fruit) { // ...}

我們甚至可以將字面值作為默認導出。

export default 123

命名導出

任何變量聲明都可以在創建時導出,這將創建一個 '命名導出',使用變量名作為導出名。

export const fruitBasket = new FruitBasket()

我們還可以立即導出函數和類的聲明。

export function addToFruitBasket(fruit) { // ...}export class FruitBasket { // ...}

如果我們想導出一個已經定義好的變量,我們可以通過大括號把變量名包裝為對象來實現。

const fruitBasket = new FruitBasket()export { fruitBasket }

我們甚至可以使用 as 關鍵字來重命名我們的導出,使之與變量名不同。如果需要,我們還可以同時導出其他變量。

const fruitBasket = new FruitBasket()class Apple {}export { fruitBasket as basketOfFruit, Apple }

聚合導出

我們還會經常遇到這種情況,就是從一個模塊導入模塊,然后立即導出這些值。比如這樣:

import fruitBasket from ’./fruitBasket.js’export { fruitBasket }

當你要同時導入和導出很多東西時,這可能會變得很繁瑣。ES 模塊允許我們同時導入和導出多個值。

export * from ’./fruitBasket.js’

這將把 ./fruitBasket.js 中所有命名導出重新包裝在一起再導出,但它不會導出默認導出值,因為一個模塊只能有一個默認導出值。如果我們要導入和導出多個具有默認導出的模塊,哪個值將成為導出模塊的默認導出值呢?

我們可以專門從其他文件中導出默認模塊,或者在重新導出時為默認導出命名。

export { default } from ’./fruitBasket.js’// 或者export { default as fruitBasket } from ’./fruitBasket.js’

我們也可以有選擇地從另一個模塊導出不同的項目,而不是把所有的項目都重新導出。在這種情況下,我們也使用大括號。

export { fruitBasket as basketOfFruit, Apple } from ’./fruitBasket.js’

最后,我們可以使用 as 關鍵字將整個模塊打包成一個單獨的命名導出。假設我們有以下文件:

// fruits.jsexport class Apple {}export class Banana {}

現在我們可以將其打包成一個單獨的導出對象,這個對象包含了所有命名導出和默認導出對象。

export * as fruits from ’./fruits.js’// { Apple: class Apple, Banana: class Banana }

導入

默認導入

當導入一個默認值時,我們需要給它指定一個名字。既然是默認值,我們給它取什么名字并不重要。

import fruitBasketList from ’./fruitBasket.js’

我們也可以同時導入所有的導出,包括命名導出和默認導出。這將會把所有的導出放到一個對象中,而默認導出將被賦予 'default '的屬性名。

import * as fruitBasket from ’./fruitBasket.js’// { default: fruitBasket }

命名導入

我們可以通過用大括號包裝導出的名稱來導入任何命名導出。

import { fruitBasket, Apple } from ’./fruitBasket.js’

我們也可以在導入時使用 as 關鍵字重命名導入。

import {fruitBasket as basketOfFruit, Apple} from ’./fruitBasket.js’

我們也可以在同一個導入語句中混合命名導出和默認導出。默認導出的內容會先列出,然后是大括號內的命名導出內容。

import fruitBasket, { Apple } from ’./fruitBasket.js’

副作用導入

有時候一個模塊并沒有導出值,我們只希望把該模塊導入進來立即執行。導入這樣的一個模塊時,不需要在文件中列出任何導出值。這被稱為”副作用(side-effect)“導入,它將直接執行模塊中的代碼而不提供任何導出值。

import ’./fruitBasket.js’

動態導入

有時我們在導入文件之前并不知道文件的名稱。或者我們在執行代碼到一半的時候才需要導入一個文件,我們可以使用動態導入在代碼中的任何位置導入模塊。之所以稱之為 '動態',是因為導入的路徑可能是不確定的,可以是字符串變量也可以是字符串表達式,而不像靜態導入那樣必須是一個字符串字面量。

由于 ES 模塊是異步的,所以模塊不會立即可用。我們必須等待它被加載后才能對它做事情。正因為如此,動態導入會返回一個解析模塊的 Promise。

async function createFruit(fruitName) { try { const FruitClass = await import(`./${fruitName}.js`) } catch { console.error(’Error getting fruit class module:’, fruitName) } return new FruitClass()}

總結

ES 導出的內容可以是值(包括變量和字面量)也可以是類和函數的聲明,從導出方式上可以分為默認導出、命名導出和聚合導出。根據不同的導出方式,導入可以分為默認導入、命名導入、副作用導入和動態導入。命名導出和導入均可以使用 as 指定別名。​導出和靜態導入必須在文件的最外層,動態導入可以在代碼的函數中異步完成。

以上就是JavaScript ES 模塊的使用的詳細內容,更多關于JavaScript ES 模塊的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 耐磨陶瓷管道_除渣器厂家-淄博浩瀚陶瓷科技有限公司 | 破碎机锤头_耐磨锤头_合金锤头-鼎成机械一站式耐磨铸件定制服务 微型驱动系统解决方案-深圳市兆威机电股份有限公司 | PVC快速门-硬质快速门-洁净室快速门品牌厂家-苏州西朗门业 | PAS糖原染色-CBA流式多因子-明胶酶谱MMP-上海研谨生物科技有限公司 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 北京成考网-北京成人高考网 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 科威信洗净科技,碳氢清洗机,超声波清洗机,真空碳氢清洗机 | 广州网站建设_小程序开发_番禺网站建设_佛山网站建设_粤联网络 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 北京西风东韵品牌与包装设计公司,创造视觉销售力! | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 恒温恒湿试验箱厂家-高低温试验箱维修价格_东莞环仪仪器_东莞环仪仪器 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 长春网站建设,五合一网站设计制作,免费优化推广-长春网站建设 | 至顶网 | 天津拓展_天津团建_天津趣味运动会_天津活动策划公司-天津华天拓展培训中心 | 山东风淋室_201/304不锈钢风淋室净化设备厂家-盛之源风淋室厂家 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | ◆大型吹塑加工|吹塑加工|吹塑代加工|吹塑加工厂|吹塑设备|滚塑加工|滚塑代加工-莱力奇塑业有限公司 | 上海三信|ph计|酸度计|电导率仪-艾科仪器| 道达尔润滑油-食品级润滑油-道达尔导热油-合成导热油,深圳道达尔代理商合-深圳浩方正大官网 | 万烁建筑设计院-建筑设计公司加盟,设计院加盟分公司,市政设计加盟 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 标策网-专注公司商业知识服务、助力企业发展 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | 上海新光明泵业制造有限公司-电动隔膜泵,气动隔膜泵,卧式|立式离心泵厂家 | 广州市哲铭油墨涂料有限公司,水性漆生产研发基地 | 广东教师资格网-广东教师资格证考试网| 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 刹车盘机床-刹车盘生产线-龙口亨嘉智能装备| 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 磁力链接搜索神器_BT磁力狗_CILIMAO磁力猫_高效磁力搜索引擎2024 | 首页_中夏易经起名网 | 隧道烘箱_隧道烘箱生产厂家-上海冠顶专业生产烘道设备 | 杭州实验室尾气处理_实验台_实验室家具_杭州秋叶实验设备有限公司 | 金属清洗剂,防锈油,切削液,磨削液-青岛朗力防锈材料有限公司 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 韦伯电梯有限公司 | 丙烷/液氧/液氮气化器,丙烷/液氧/液氮汽化器-无锡舍勒能源科技有限公司 |