Webpack?ECMAScript?模塊詳解
前言
標(biāo)題一
ECMAScript 模塊(ESM)
是在 Web
中使用模塊的規(guī)范。 所有現(xiàn)代瀏覽器均支持此功能,同時也是在 Web
中編寫模塊化代碼的推薦方式。
webpack
支持處理 ECMAScript
模塊以優(yōu)化它們。
導(dǎo)出
關(guān)鍵字 export 允許將 ESM 中的內(nèi)容暴露給其他模塊:
export const CONSTANT = 42; export let variable = 42; // 對外暴露的變量為只讀 // 無法從外部修改 export function fun() { console.log('fun'); } export class C extends Super { method() { console.log('method'); } } let a, b, other; export { a, b, other as c }; export default 1 + 2 + 3 + more();
導(dǎo)入
關(guān)鍵字 import 允許從其他模塊獲取引用到 ESM 中:
import { CONSTANT, variable } from './module.js'; // 導(dǎo)入由其他模塊導(dǎo)出的“綁定” // 這些綁定是動態(tài)的. 這里并非獲取到了值的副本 // 而是當(dāng)將要訪問“variable”時 // 再從導(dǎo)入的模塊中獲取當(dāng)前值 import * as module from './module.js'; module.fun(); // 導(dǎo)入包含所有導(dǎo)出內(nèi)容的“命名空間對象” import theDefaultValue from './module.js'; // 導(dǎo)入 `default` 導(dǎo)出的快捷方式
將模塊標(biāo)記為 ESM
默認(rèn)情況下,webpack 將自動檢測文件是 ESM 還是其他模塊系統(tǒng)。
Node.js 通過設(shè)置 package.json 中的屬性來顯式設(shè)置文件模塊類型。 在 package.json 中設(shè)置 “type”: “module” 會強(qiáng)制 package.json 下的所有文件使用 ECMAScript 模塊。 設(shè)置 ?"type": "commonjs"? 將會強(qiáng)制使用 CommonJS 模塊。
{ "type": "module" }
除此之外,文件還可以通過使用?.mjs?
或?.cjs?
擴(kuò)展名來設(shè)置模塊類型。 ?.mjs?
將它們強(qiáng)制置為 ESM
,?.cjs?
將它們強(qiáng)制置為 CommonJs
。
在使用text/javascript
或 application/javascript mime type
的DataURI
中,也將使用 ESM
。
除了模塊格式外,將模塊標(biāo)記為 ESM
還會影響解析邏輯,操作邏輯和模塊中的可用符號。
導(dǎo)入模塊在 ESM
中更為嚴(yán)格,導(dǎo)入相對路徑的模塊必須包含文件名和文件擴(kuò)展名(例如 *.js 或者 *.mjs
),除非你設(shè)置了 fullySpecified=false
。
Tip
依舊支持導(dǎo)入包,例如 import “lodash” .
non-ESM 僅能導(dǎo)入 default 導(dǎo)出的模塊,不支持命名導(dǎo)出的模塊。
CommonJs 語法不可用: ?require?, ?module?, ?exports?, ?__filename?, ?__dirname?.
Tip
HMR 使用 import.meta.webpackHot 代替 module.hot。
到此這篇關(guān)于Webpack ECMAScript 模塊的文章就介紹到這了,更多相關(guān)Webpack ECMAScript 模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript實現(xiàn)json頁面分頁實例代碼
這篇文章主要介紹了javascript實現(xiàn)json頁面分頁實例代碼,需要的朋友可以參考下2014-02-02bootstrap timepicker在angular中取值并轉(zhuǎn)化為時間戳
這篇文章主要介紹了bootstrap timepicker在angular中取值并轉(zhuǎn)化為時間戳的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06uni-app調(diào)取接口的3種方式以及封裝uni.request()詳解
我們在實際工作中要將數(shù)據(jù)傳輸?shù)椒?wù)器端,從服務(wù)器端獲取信息,都是通過接口的形式,下面這篇文章主要給大家介紹了關(guān)于uni-app調(diào)取接口的3種方式以及封裝uni.request()的相關(guān)資料,需要的朋友可以參考下2022-08-08js中異步函數(shù)async function變同步函數(shù)的簡單入門
這篇文章主要介紹了js中異步函數(shù)async function變同步函數(shù)的簡單入門,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04如何學(xué)JavaScript?前輩的經(jīng)驗之談
這篇文章主要介紹了如何學(xué)JavaScript?前輩的經(jīng)驗之談,也就是怎么學(xué)前端的問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12微信小程序?qū)崿F(xiàn)頁面導(dǎo)航與傳參功能詳解
這篇文章主要為大家詳細(xì)介紹一下微信小程序?qū)崿F(xiàn)頁面導(dǎo)航的幾種方法以及幫助大家掌握微信小程序如何進(jìn)行傳遞參數(shù),感興趣的朋友可以了解一下2022-08-08window.event快達(dá)到全瀏覽器支持了,以后使用就方便了
在Tangram群里討論到<a href="#" onclick="baidu.event.preventDefault(event);">的寫法時,以為標(biāo)準(zhǔn)瀏覽器只能用arguments[0]來獲取到event,結(jié)果nodiseal同學(xué)說已經(jīng)可以這么用了,于是做了以下測試2011-11-11