目錄
js模組化
怎麼使用
首頁 web前端 js教程 淺析node中怎麼使用import語法

淺析node中怎麼使用import語法

Mar 21, 2023 pm 06:53 PM
nodejs​ node import

node.js支援import語法,很簡單一個知識點,但卻能提醒我們從知識迷思裡走出來,多關注外邊的知識世界,不斷打開自己的知識邊界。

淺析node中怎麼使用import語法

js模組化

前端主流模組化規範,目前有以下幾種:

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

因此,主流有兩種規範CommonJSESM兩種規範,但是由於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=modulenode 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;
登入後複製

2、帶參數的使用:

// 由于参数不同, 这个会让`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斷言(實驗特性) 將檔案強制載入為某種格式內容,如:

json javascript webassembly

import fooData from './foo.json' assert { type: 'json' };
登入後複製

5、載入commonjs規格模組

當然也肯定支援載入commonjs規範的模組,用法如下:

import { default as cjs } from 'cjs'; // module.exports 导出
import cjsSugar from 'cjs'; // module.exports
import * as m from 'cjs';
登入後複製

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

const { default: barData } =
  await import('./bar.json', { assert: { type: 'json' } });
登入後複製

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

目前屬於實驗特性,有限制,例如:

    不支援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

export,不允許使用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有做持續關注,基本上都可以了解該特性。

但身為一個不關注的人,很容易就陷入自己的知識迷思,會一直認為Node.js不支援ESM規範,甚至會吐槽Node.js為什麼不支援呢?

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

更多node相關知識,請造訪:

nodejs 教學

以上是淺析node中怎麼使用import語法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

nvm 怎麼刪除node nvm 怎麼刪除node Dec 29, 2022 am 10:07 AM

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

node專案中如何使用express來處理檔案的上傳 node專案中如何使用express來處理檔案的上傳 Mar 28, 2023 pm 07:28 PM

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

深入淺析Node的進程管理工具'pm2” 深入淺析Node的進程管理工具'pm2” Apr 03, 2023 pm 06:02 PM

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

Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node? Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node? Mar 05, 2025 pm 05:57 PM

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

Python 的 import 是怎麼運作的? Python 的 import 是怎麼運作的? May 15, 2023 pm 08:13 PM

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

聊聊用pkg將Node.js專案打包為執行檔的方法 聊聊用pkg將Node.js專案打包為執行檔的方法 Dec 02, 2022 pm 09:06 PM

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

npm node gyp失敗怎麼辦 npm node gyp失敗怎麼辦 Dec 29, 2022 pm 02:42 PM

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進行基於令牌的身份驗證 使用Angular和Node進行基於令牌的身份驗證 Sep 01, 2023 pm 02:01 PM

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

See all articles