日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ES6之Module 的加载实现(2)

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ES6之Module 的加载实现(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

3.Node 加載

Node 對 ES6 模塊的處理比較麻煩,因為它有自己的 CommonJS 模塊格式,與 ES6 模塊格式是不兼容的。目前的解決方案是,將兩者分開,ES6 模塊和 CommonJS 采用各自的加載方案

3.1在靜態分析階段,一個模塊腳本只要有一行import或export語句,Node 就會認為該腳本為 ES6 模塊,否則就為 CommonJS 模塊。如果不輸出任何接口,但是希望被 Node 認為是 ES6 模塊,可以在腳本中加一行語句

上面的命令并不是輸出一個空對象,而是不輸出任何接口的 ES6 標準寫法

3.2import 命令加載 CommonJS 模塊

Node 采用 CommonJS 模塊格式,模塊的輸出都定義在module.exports這個屬性上面。在 Node 環境中,使用import命令加載 CommonJS 模塊,Node 會自動將module.exports屬性,當作模塊的默認輸出,即等同于export default

import命令加載上面的模塊,module.exports會被視為默認輸出

如果采用整體輸入的寫法(import * as xxx from someModule),default會取代module.exports,作為輸入的接口直接賦予在對象上成為屬性**

上面代碼中需要注意的是,整體的輸出,Node 會自動為baz添加default屬性,通過baz.default才能拿到module.exports

bar本身是一個對象,不能當作函數調用,只能通過bar.default調用

CommonJS 模塊的輸出緩存機制,在 ES6 加載方式下依然有效

即,CommonJS輸出緩存的機制導致即使通過import加載了foo.js文件,得到的結果依然是緩存里的123

由于 ES6 模塊是編譯時通過export確定輸出接口,而CommonJS 模塊是運行時確定輸出接口,所以采用import命令加載 CommonJS 模塊時,不允許采用下面的寫法(不要添加大括號,因為等價于輸出的是export default)

上面的寫法不正確,因為fs的書寫是 CommonJS 格式的,只有在運行時才能確定readfile接口,而import命令要求編譯時就確定這個接口。解決方法就是改為整體輸入


這里的’express’就沒有出現大括號的形式

3.3require 命令加載 ES6 模塊

采用require命令加載 ES6 模塊時,ES6 模塊的所有輸出接口,會成為輸入對象的屬性

上面代碼中,ES6模塊的default接口變成了通過require產生的es_namespace.default對象的屬性。另外,由于CommonJS的輸出緩存機制,所以es.js在已經輸出foo后再對foo的重新賦值沒有在模塊外部反映出來

總結

以上是生活随笔為你收集整理的ES6之Module 的加载实现(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。