人妻精品在线观看一区二区三区,蜜臀av精品一区二区三区网站,中文一区二区三区亚洲欧美,熟女人妇精品一区二区,人妻av在线观看视频,欧美日韩国产三级精品网站,黄色免费网站直接进入,超碰公开福利正在播放,国产毛片乡下农村妇女毛片

淺析node中怎么使用import語法-全球播資訊

來源:php中文網(wǎng) | 2023-03-21 19:05:53 |

node.js支持import語法,很簡單一個知識點,但是卻能提醒我們從知識誤區(qū)里走出來,多關注外邊的知識世界,不斷打開自己的知識邊界。


(資料圖片)

js模塊化

前端主流模塊化規(guī)范,目前有以下幾種:

CommonJS, Node.js提出的規(guī)范ECMAScript Module,ESM,由ECMAScript組織提出的JavaScript標準規(guī)范已淘汰的有:CMD、AMD等,再就綜合體UMD(支持各種規(guī)范的集合體)

因此,主流有兩種規(guī)范CommonJSESM兩種規(guī)范,但是由于Node.js不支持ESM規(guī)范,導致很多時候我們的項目里面并存兩種規(guī)范的代碼,從而出現(xiàn)下面這種情況:

// 在node端執(zhí)行構建的時候const _ = require("loadsh")// 在瀏覽器端實現(xiàn)的時候import _ from "loadsh";

這樣子開發(fā)就很容易出現(xiàn)痛點,往往我們的解決方案就是通過各種構建工具去解決,如:webpackvite,尤其是我們在寫項目中寫node.js編譯腳本,經(jīng)常需要切換。【相關教程推薦:nodejs視頻教程、編程教學】

但是從Node.js V14+版本后,它開始支持ESM規(guī)范啦,你可以直接在Node.js中使用importexport等語法了,終于等到這一天?。

PS: 其實早在Node.js V8.5版本就已經(jīng)加入該特性了,只不過一直需要通過全局變量–experimental-modules去開啟這一特性,由于不穩(wěn)定性大多數(shù)項目都沒有開啟,不過自從16+后,我們就可以大膽放心在項目中使用了,不過一些古老的項目建議暫時不用開啟。

怎么使用

我們先從官網(wǎng)上去看相關使用說明:

通過上述我們就可以知道幾個使用方式:

將文件后綴改為.mjs,node.js加載的時候自動會用ESM規(guī)范

在項目中package.json新增配置項"type":"module",那么整個項目中的.js文件都會按照ESM規(guī)范去執(zhí)行

增加執(zhí)行參數(shù)--input-type也可以實現(xiàn)相同效果

各種使用方式

1、常規(guī)方式:

import _ from "lodash";import { readFile } from "fs";import Demo from "./Demo.mjs"; // 絕對路徑或相對路徑都可以export readFile;export default readFile;

2、帶參數(shù)的使用:

// 由于參數(shù)不同, 這個會讓`foo.mjs`被加載兩次,而不會利用緩存中的`foo.mjs`import "./foo.mjs?query=1"; // loads ./foo.mjs with query of "?query=1"import "./foo.mjs?query=2"; // loads ./foo.mjs with query of "?query=2"

3、支持data:格式URL的形式

import "data:text/javascript,console.log("hello!");"; // text/javascript 會將后面的內容當成js模塊import { test } from "data:text/javascript,function test(){console.log("test")};export {test};"; // 這里我們是不是擴寬思路,直接加載在線js呢?import _ from "data:application/json,"world!"" assert { type: "json" }; // application/json 則是json// application/wasm for Wasm

4、assert斷言(實驗特性)將文件強制加載為某種格式內容,如:jsonjavascriptwebassembly

import fooData from "./foo.json" assert { type: "json" };

5、加載commonjs規(guī)范模塊

當然肯定也支持加載commonjs規(guī)范的模塊,用法如下:

import { default as cjs } from "cjs"; // module.exports 導出import cjsSugar from "cjs"; // module.exportsimport * as m from "cjs";

6、import() 異步導入這種用法就很正常,不需要實時加載,等到需要用的時候再加載

const { default: barData } =  await import("./bar.json", { assert: { type: "json" } });

7、支持從http/https引入(實驗特性)

目前屬于實驗特性,有限制,比如:

不支持http2/3協(xié)議http協(xié)議只能用于127.0.0.1等本地ip地址Cookie、Authorization等信息不會攜帶發(fā)送只會加載執(zhí)行遠端的js文件,而不會加載遠端中依賴其他文件
import worker_threads from "node:worker_threads";import { configure, resize } from "https://example.com/imagelib.mjs";configure({ worker_threads });

限制

唯一的限制:當開啟ESM規(guī)范后,你只允許填寫importexport,不允許使用requiremodule.exports,會報一下錯誤:

const a  = require("a")           ^ReferenceError: require is not defined in ES module scope, you can use import instead    at file:///Users/borfyqiu/Desktop/study/github/qiubohong.github.io/code/demo-rollup/test.mjs:4:12    at ModuleJob.run (node:internal/modules/esm/module_job:193:25)    at async Promise.all (index 0)    at async ESMLoader.import (node:internal/modules/esm/loader:530:24)    at async loadESM (node:internal/process/esm_loader:91:5)    at async handleMainPromise (node:internal/modules/run_main:65:12)

總結

其實這個也不算是冷門知識,只要稍微對Node.js有做持續(xù)關注,基本上都可以了解到該特性。

但是作為不關注的人,很容易就陷入自己的知識誤區(qū),會一直認為Node.js不支持ESM規(guī)范,甚至會吐槽Node.js為什么不支持呢?

所以這里有一句話需要提醒自己—— 【書山無路勤為徑,學海無涯苦作舟】。

更多node相關知識,請訪問:nodejs 教程!

以上就是淺析node中怎么使用import語法的詳細內容,更多請關注php中文網(wǎng)其它相關文章!

關鍵詞: