淺析node中怎麼使用import語法
node.js支援import語法,很簡單一個知識點,但卻能提醒我們從知識迷思裡走出來,多關注外邊的知識世界,不斷打開自己的知識邊界。
js模組化
前端主流模組化規範,目前有以下幾種:
- #CommonJS,Node.js提出的規範
- ECMAScript Module,ESM,由ECMAScript組織提出的JavaScript標準規範
- 已淘汰的有:CMD、AMD等,再就綜合體UMD(支援各種規範的集合體)
因此,主流有兩種規範CommonJS
和ESM
兩種規範,但是由於Node.js不支持ESM
規範,導致很多時候我們的專案裡面並存兩種規範的程式碼,從而出現下面這種情況:
// 在node端执行构建的时候 const _ = require('loadsh') // 在浏览器端实现的时候 import _ from 'loadsh';
這樣子開發就很容易出現痛點,往往我們的解決方案是透過各種建置工具去解決,例如:webpack
vite
,尤其是我們在寫專案中寫node.js編譯腳本,常常需要切換。 【相關教學推薦:nodejs影片教學、程式設計教學】
#但是從Node.js V14 版本後,它開始支援ESM規格啦,你可以直接在Node.js中使用import
export
等語法了,終於等到這一天?。
PS: 其實早在Node.js V8.5版本就已經加入該特性了,只不過一直需要透過全域變數–experimental-modules
去開啟這一特性,由於不穩定性大多數項目都沒有開啟,不過自從16 後,我們就可以大膽放心在專案中使用了,不過一些古老的專案建議暫時不用開啟。
怎麼使用
我們先從官網上去看相關使用說明:
Node.js 有兩個模組規格:
CommonJS
模組規範和ECMAScript
模組規範 開發者可以透過.mjs
檔案副檔名、package.json
中設定type=module
或node xxx.js --input-type
標誌告訴Node.js 使用ECMAScript
規格去執行程式碼。如果沒這些設置,Node.js 將使用CommonJS
去執行。 Node.js Modules: ECMAScript modules
透過上述我們就可以知道幾個使用方式:
將檔案後綴改為
.mjs
,node.js載入的時候自動會用ESM
規格在專案中
package.json
新增配置項目"type":"module"
,那麼整個專案中的.js檔案都會依照ESM
規格去執行- ##增加執行參數
--input-type
也可以實現相同效果
各種使用方式
#1、常規方式:import _ from 'lodash'; import { readFile } from 'fs'; import Demo from './Demo.mjs'; // 绝对路径或相对路径都可以 export readFile; export default readFile;
// 由于参数不同, 这个会让`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"
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
json
javascript
webassembly等
import fooData from './foo.json' assert { type: 'json' };
當然也肯定支援載入commonjs規範的模組,用法如下:
import { default as cjs } from 'cjs'; // module.exports 导出 import cjsSugar from 'cjs'; // module.exports import * as m from 'cjs';
const { default: barData } = await import('./bar.json', { assert: { type: 'json' } });
- 不支援http2/3協定http協定只能用於127.0.0.1等本地ip位址Cookie、Authorization等資訊不會攜帶發送只會載入執行遠端的js文件,而不會載入遠端依賴其他文件
import worker_threads from 'node:worker_threads'; import { configure, resize } from 'https://example.com/imagelib.mjs'; configure({ worker_threads });
##限制唯一的限制:當開啟ESM規格後,你只允許填入
import或 但身為一個不關注的人,很容易就陷入自己的知識迷思,會一直認為Node.js不支援ESM規範,甚至會吐槽Node.js為什麼不支援呢? 所以這裡有一句話需要提醒自己- 【書山無路勤為徑,學海無涯苦作舟】。 更多node相關知識,請造訪: 以上是淺析node中怎麼使用import語法的詳細內容。更多資訊請關注PHP中文網其他相關文章!export
,不允許使用require
或module.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有做持續關注,基本上都可以了解該特性。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

nvm刪除node的方法:1、下載「nvm-setup.zip」並將其安裝在C碟;2、設定環境變量,並透過「nvm -v」指令查看版本號;3、使用「nvm install」指令安裝node;4、透過「nvm uninstall」指令刪除已安裝的node即可。

怎麼處理文件上傳?以下這篇文章為大家介紹一下node專案中如何使用express來處理文件的上傳,希望對大家有幫助!

這篇文章跟大家分享Node的進程管理工具“pm2”,聊聊為什麼需要pm2、安裝和使用pm2的方法,希望對大家有幫助!

PiNetwork節點詳解及安裝指南本文將詳細介紹PiNetwork生態系統中的關鍵角色——Pi節點,並提供安裝和配置的完整步驟。 Pi節點在PiNetwork區塊鏈測試網推出後,成為眾多先鋒積極參與測試的重要環節,為即將到來的主網發布做準備。如果您還不了解PiNetwork,請參考Pi幣是什麼?上市價格多少? Pi用途、挖礦及安全性分析。什麼是PiNetwork? PiNetwork項目始於2019年,擁有其專屬加密貨幣Pi幣。該項目旨在創建一個人人可參與

你好,我是somenzz,可以叫我徵哥。 Python的import是非常直覺的,但即使這樣,有時你會發現,明明套件就在那裡,我們仍會遇到ModuleNotFoundError,明明相對路徑非常正確,就是報錯ImportError:attemptedrelativeimportwithnoknownparentpackage導入同一個目錄的模組和不同的目錄的模組是完全不同的,本文透過分析使用import經常遇到的一些問題,來幫助你輕鬆搞定import,據此,你可以輕鬆創建屬

如何用pkg打包nodejs可執行檔?以下這篇文章跟大家介紹一下使用pkg將Node專案打包為執行檔的方法,希望對大家有幫助!

npm node gyp失敗是因為“node-gyp.js”跟“Node.js”版本不匹配,其解決辦法:1、透過“npm cache clean -f”清除node快取;2、透過“npm install -g n”安裝n模組;3、透過「n v12.21.0」指令安裝「node v12.21.0」版本即可。

身份驗證是任何網路應用程式中最重要的部分之一。本教程討論基於令牌的身份驗證系統以及它們與傳統登入系統的差異。在本教程結束時,您將看到一個用Angular和Node.js編寫的完整工作演示。傳統身份驗證系統在繼續基於令牌的身份驗證系統之前,讓我們先來看看傳統的身份驗證系統。使用者在登入表單中提供使用者名稱和密碼,然後點擊登入。發出請求後,透過查詢資料庫在後端驗證使用者。如果請求有效,則使用從資料庫中獲取的使用者資訊建立會話,然後在回應頭中傳回會話訊息,以便將會話ID儲存在瀏覽器中。提供用於存取應用程式中受
