JS 模塊 目前已獲得全部主流瀏覽器的支持。
JS modules 其實(shí)是一系列功能的集合。以前你可能聽(tīng)過(guò)說(shuō) Common JS ,AMD 等模塊標(biāo)準(zhǔn),不一樣標(biāo)準(zhǔn)的模塊功能都是相似的,都容許你 import 或者 export 一些東西。
JavaScript 模塊目前有標(biāo)準(zhǔn)的語(yǔ)法,在模塊中,你能夠經(jīng)過(guò) export 關(guān)鍵字,導(dǎo)出一切東西(變量,函數(shù),其它聲明等等)
//lib.mjs export const repeat = (string) => `${string} ${string}`; export function shout(string) { return `${string.toUpperCase()}!`; }
而想要導(dǎo)入該模塊,只須要在其它文件中使用import 關(guān)鍵字引入便可
//main.mjs import {repeat, shout} from './lib.mjs'; repeat('hello'); // → 'hello hello' shout('Modules in action'); // → 'MODULES IN ACTION!'
模塊中還能夠?qū)С瞿J(rèn)值
//lib.mjs export default function(string) { return `${string.toUpperCase()}!`; }
具備默認(rèn)值的模塊能夠以任意名字導(dǎo)入到其它模塊中jquery
//main.mjs import shout from './lib.mjs'; // ^^^^^
模塊和傳統(tǒng)的script 標(biāo)簽引入腳本有一些區(qū)別,以下:
因?yàn)榇嬖谏鲜霾灰粯樱?jīng)過(guò)傳統(tǒng)方式引入的腳本 和 以模塊方式引入的腳本,就會(huì)有相同的代碼,也會(huì)產(chǎn)生不一樣的行為,于是 JS 執(zhí)行環(huán)節(jié)須要知道那些腳本是模塊。
在 瀏覽器中,經(jīng)過(guò)設(shè)置 <script> 元素的type 屬性為 module 能夠聲明其實(shí)一個(gè)模塊。
<script type="module" src="main.mjs"></script> <script nomodule src="fallback.js"></script>
支持type="module"的瀏覽器會(huì)忽略帶有nomudule屬性的的<script>元素,這樣就提供了降級(jí)處理的空間。其意義不只如此,支持type="module"的環(huán)境意味著其也支持箭頭函數(shù),async-await等新語(yǔ)法功能,這樣引入的腳本無(wú)須再作轉(zhuǎn)義處理了。