国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
簡(jiǎn)介
異步編程
全程掌控
全局作用域
安裝
Hello World 應(yīng)用
HTTP 服務(wù)器
處理URL 參數(shù)
讀取和寫(xiě)入文件
訪(fǎng)問(wèn)MySQL 數(shù)據(jù)庫(kù)
結(jié)論
首頁(yè) web前端 js教程 node.js初學(xué)者

node.js初學(xué)者

Mar 14, 2025 am 10:33 AM

Node.js for Beginners

Node.js 的事件驅(qū)動(dòng)編程對(duì)於新手來(lái)說(shuō)可能比較棘手,但這並不意味著難以入門(mén)。本文將介紹Node.js 的基礎(chǔ)知識(shí),並解釋其流行的原因。

簡(jiǎn)介

要開(kāi)始使用Node.js,首先必須了解Node.js 與傳統(tǒng)服務(wù)器端腳本環(huán)境(如PHP、Python 或Ruby)的區(qū)別。

異步編程

您很可能熟悉異步編程;畢竟,它是AJAX 中的“A”。 Node 中的每個(gè)函數(shù)都是異步的。因此,所有通常會(huì)阻塞線(xiàn)程的操作都使用Promise 在後臺(tái)執(zhí)行。這是關(guān)於Node 最重要的一點(diǎn)。例如,如果您正在讀取文件系統(tǒng)上的文件,則將使用異步函數(shù)。

如果您使用的是某些版本的Node 函數(shù),則使用回調(diào)函數(shù),這些函數(shù)是在Promise 出現(xiàn)之前設(shè)計(jì)的?,F(xiàn)在大多數(shù)Node 函數(shù)都有Promise 等效項(xiàng),因此最好將此處使用的回調(diào)函數(shù)轉(zhuǎn)換為基於Promise 的等效項(xiàng),並比較語(yǔ)法。

全程掌控

使用Node,您必須自己完成很多工作。例如,HTTP 模塊非常精簡(jiǎn)且不拘泥於特定風(fēng)格。這對(duì)新手來(lái)說(shuō)可能令人不知所措,但好處是能夠構(gòu)建高性能的Web 應(yīng)用(儘管JavaScript 的性能很大程度上歸功於V8 優(yōu)化的引擎)。一個(gè)腳本處理與所有客戶(hù)端的所有通信。這大大減少了應(yīng)用程序使用的資源數(shù)量。例如,這是一個(gè)簡(jiǎn)單的Node.js 應(yīng)用程序代碼:

 const i, a, b, c, max;
max = 1000000000;
var d = Date.now();
for (i = 0; i <p>以下是使用PHP 編寫(xiě)的等效代碼:</p><pre class="brush:php;toolbar:false"> $a = null;
$b = null;
$c = null;
$i = null;
$max = 1000000000;

$start = microtime(true);

for ($i = 0; $i <p>現(xiàn)在讓我們看看基準(zhǔn)測(cè)試數(shù)據(jù)。下表列出了這兩個(gè)簡(jiǎn)單應(yīng)用程序的響應(yīng)時(shí)間(以毫秒為單位):</p><pre class="brush:php;toolbar:false"> const http = require('http');

http 變量。

在上面的代碼中,我們將模塊的名稱(chēng)傳遞給exports 對(duì)象,並使用要公開(kāi)的代碼片段填充其屬性和方法。考慮以下模塊示例:

 exports.area = function (r) {
  return Math.PI * r ** 2;
};

exports.circumference = function (r) {
  return 2 * Math.PI * r;
};

此代碼創(chuàng)建了一個(gè)exports 對(duì)象。這些函數(shù)可以在模塊外部訪(fǎng)問(wèn),因?yàn)樗鼈兪窃赑I 上定義的,完全受到保護(hù),免受外部干擾。因此,您可以放心,circumference() 將始終按預(yù)期工作(只要為import 關(guān)鍵字提供值):

 // file
import myModule from "./myModule.js"
// Node 內(nèi)置/包import http from "http"

在瀏覽器中,ESM 只能使用相對(duì)文件路徑進(jìn)行搜索,如上所示。但是,在Node 中,您可以傳遞沒(méi)有node: 前綴的路徑。

但是,以前的方法僅適用於默認(rèn)導(dǎo)出。如果您使用的是命名導(dǎo)出(稍後將詳細(xì)介紹),則需要使用稍微不同的語(yǔ)法。

 import { exportOne, exportTwo } from "./myModule.js"

要導(dǎo)出內(nèi)容,請(qǐng)使用export default 關(guān)鍵字。 export 用於命名導(dǎo)出,export default 用於默認(rèn)導(dǎo)出。命名導(dǎo)出允許您導(dǎo)出不同的內(nèi)容,並且僅使用其中一個(gè)在不同的模塊中使用上面的import 語(yǔ)法。如果您只導(dǎo)出一個(gè)內(nèi)容,則默認(rèn)導(dǎo)出會(huì)更容易。

 // 命名導(dǎo)出export function exportOne() {
    ...
}
export function exportTwo() {
    ...
}
// 默認(rèn)導(dǎo)出export default function defaultFunction() {
    ...
}

在本教程的其餘部分,我們將使用ESM。

全局作用域

Node 是在Google 的V8 JavaScript 引擎中運(yùn)行的JavaScript 環(huán)境。因此,我們應(yīng)該遵循我們?cè)诳蛻?hù)端開(kāi)發(fā)中使用的最佳實(shí)踐。例如,我們應(yīng)該避免將任何內(nèi)容放入全局作用域。但是,這並非總是可能的。 Node 中的全局作用域是(在瀏覽器中為window),您可以通過(guò)在聲明變量時(shí)省略var 來(lái)輕鬆創(chuàng)建函數(shù)的全局變量。

安裝

自然地,我們需要在編寫(xiě)和執(zhí)行應(yīng)用程序之前安裝Node。如果您使用的是Windows 或macOS,安裝非常簡(jiǎn)單;nodejs.org 網(wǎng)站提供了這些操作系統(tǒng)的安裝程序。對(duì)於Linux,請(qǐng)使用任何包管理器。例如,如果您使用的是支持apt 的發(fā)行版,請(qǐng)打開(kāi)終端並鍵入:

 sudo apt-get update
sudo apt-get install node

或:

 sudo aptitude update
sudo aptitude install node

Node.js 位於sid 存儲(chǔ)庫(kù)中;您可能需要將它們添加到您的源列表中:

 sudo echo deb https://ftp.us.debian.org/debian/ sid main > /etc/apt/sources.list.d/sid.list

但請(qǐng)注意,在較舊的系統(tǒng)上安裝sid 包可能會(huì)破壞您的系統(tǒng)。請(qǐng)小心,並刪除module_name。

Hello World 應(yīng)用

當(dāng)然,我們的第一個(gè)Node.js 腳本將打印在控制臺(tái)中顯示的文本“Hello World!”。

HTTP 服務(wù)器

讓我們繼續(xù)一個(gè)更高級(jí)的應(yīng)用程序;它並不像您想像的那麼複雜。讓我們從以下代碼開(kāi)始。閱讀註釋?zhuān)会衢喿x下面的解釋?zhuān)?/p>

 // 包含http 模塊。
import { createServer } from "http"

// 創(chuàng)建服務(wù)器。作為參數(shù)傳遞的函數(shù)在每次發(fā)出請(qǐng)求時(shí)都會(huì)被調(diào)用。
// request 變量保存所有請(qǐng)求參數(shù)// response 變量允許您對(duì)發(fā)送到客戶(hù)端的響應(yīng)執(zhí)行任何操作。
createServer(function (request, response) {
    // 在end 事件上附加偵聽(tīng)器。
    // 當(dāng)客戶(hù)端發(fā)送所有數(shù)據(jù)並等待響應(yīng)時(shí),將調(diào)用此事件。
    request.on("end", function () {
        // 將標(biāo)頭寫(xiě)入響應(yīng)。
        // 200 是HTTP 狀態(tài)代碼(此代碼表示成功)
        // 第二個(gè)參數(shù)在對(duì)像中保存標(biāo)頭字段// 我們正在發(fā)送純文本,因此Content-Type 應(yīng)為text/plain
        response.writeHead(200, {
            'Content-Type': 'text/plain'
        });
        // 發(fā)送數(shù)據(jù)並結(jié)束響應(yīng)。
        response.end('Hello HTTP!');
    });
// 偵聽(tīng)8080 端口。
}).listen(8080);

這段代碼非常簡(jiǎn)單。您可以通過(guò)使用response.end() 向客戶(hù)端發(fā)送更多數(shù)據(jù)。將此代碼保存為http.js ,然後在控制臺(tái)中鍵入以下命令:

 node http.js

打開(kāi)瀏覽器並導(dǎo)航到http://m.miracleart.cn/link/7232a90ea7d391905f9ee07bcc7c5967 。您應(yīng)該在頁(yè)面上看到文本Hello HTTP!

處理URL 參數(shù)

如前所述,我們必須自己完成Node 中的所有工作,包括解析請(qǐng)求參數(shù)。但是,這相當(dāng)簡(jiǎn)單??纯聪旅娴拇a:

 // 包含createServer
import { createServer} from "http"
// 和url 模塊,它在解析請(qǐng)求參數(shù)方面非常有用。
url = require("url");

// 創(chuàng)建服務(wù)器。
createServer(function (request, response) {
    // 在end 事件上附加偵聽(tīng)器。
    request.on('end', function () {
        // 解析請(qǐng)求參數(shù)並將它們存儲(chǔ)在_get 變量中。
        // 此函數(shù)解析來(lái)自請(qǐng)求的url 並返回對(duì)象表示。
        var _get = url.parse(request.url, true).query;
        // 將標(biāo)頭寫(xiě)入響應(yīng)。
        response.writeHead(200, {
            'Content-Type': 'text/plain'
        });
        // 發(fā)送數(shù)據(jù)並結(jié)束響應(yīng)。
        response.end('Here is your data: ' _get['data']);
    });
// 偵聽(tīng)8080 端口。
}).listen(8080);

此代碼使用query 屬性,該屬性檢索URL 的參數(shù)。將此文件保存為get.js並使用以下命令執(zhí)行它:

 node get.js

然後,導(dǎo)航到data 參數(shù)不會(huì)中斷腳本。

讀取和寫(xiě)入文件

要管理Node 中的文件,我們使用fs模塊(核心模塊)。我們分別使用fs.writeFile() 方法讀取和寫(xiě)入文件。我將在以下代碼之後解釋參數(shù):

 // 包含createServer,
import { createServer } from "http"
// 和fs 函數(shù)import { readFile, writeFile } from "fs"

// 創(chuàng)建http 服務(wù)器。
createServer(function (request, response) {
    // 在end 事件上附加偵聽(tīng)器。
    request.on("end", function () {
        // 讀取文件。
        readFile("test.txt", 'utf-8', function (error, data) {
            // 寫(xiě)入標(biāo)頭。
            response.writeHead(200, {
                'Content-Type': 'text/plain'
            });
            // 將從文件中獲得的數(shù)字遞增。
            data = parseInt(data) 1;
            // 將遞增的數(shù)字寫(xiě)入文件。
            writeFile('test.txt', data);
            // 使用一些不錯(cuò)的消息結(jié)束響應(yīng)。
            response.end('This page was refreshed ' data ' times!');
        });
    });
// 偵聽(tīng)8080 端口。
}).listen(8080);

將此保存為files.js 。在運(yùn)行此腳本之前,在與files.js相同的目錄中創(chuàng)建一個(gè)名為test.txt的文件。

此代碼演示了fs.writeFile() 方法。每次服務(wù)器收到請(qǐng)求時(shí),腳本都會(huì)從文件中讀取一個(gè)數(shù)字,遞增該數(shù)字,並將新數(shù)字寫(xiě)入文件。 fs.writeFile() 方法接受文件名和數(shù)據(jù)作為參數(shù)。它還接受第三個(gè)和第四個(gè)參數(shù)(兩者都是可選的),分別指定編碼和回調(diào)函數(shù)。

現(xiàn)在,讓我們使用以下命令運(yùn)行此腳本:

 node files.js

在瀏覽器中以http://m.miracleart.cn/link/7232a90ea7d391905f9ee07bcc7c5967打開(kāi)它並刷新幾次。現(xiàn)在,您可能會(huì)認(rèn)為代碼中存在錯(cuò)誤,因?yàn)樗坪踹f增了兩次。這不是錯(cuò)誤。每次請(qǐng)求此URL 時(shí),都會(huì)向服務(wù)器發(fā)送兩個(gè)請(qǐng)求。第一個(gè)請(qǐng)求是由瀏覽器自動(dòng)發(fā)出的,它請(qǐng)求favicon.ico ,當(dāng)然,第二個(gè)請(qǐng)求是針對(duì)URL( http://m.miracleart.cn/link/7232a90ea7d391905f9ee07bcc7c5967 )。

即使此行為在技術(shù)上不是錯(cuò)誤,但它也不是我們想要的行為。我們可以通過(guò)檢查請(qǐng)求URL 來(lái)輕鬆修復(fù)此問(wèn)題。以下是修改後的代碼:

 // 包含createServer,
import { createServer } from "http"
// 和fs 函數(shù)import { readFile, writeFile } from "fs"

// 創(chuàng)建http 服務(wù)器。
createServer(function (request, response) {
    // 在end 事件上附加偵聽(tīng)器。
    request.on('end', function () {
        // 檢查用戶(hù)是否請(qǐng)求/
        if (request.url == '/') {
            // 讀取文件。
            readFile('test.txt', 'utf-8', function (error, data) {
                // 寫(xiě)入標(biāo)頭。
                response.writeHead(200, {
                    'Content-Type': 'text/plain'
                });
                // 將從文件中獲得的數(shù)字遞增。
                data = parseInt(data) 1;
                // 將遞增的數(shù)字寫(xiě)入文件。
                writeFile('test.txt', data);
                // 使用一些不錯(cuò)的消息結(jié)束響應(yīng)。
                response.end('This page was refreshed ' data ' times!');
            });
        } else {
            // 指示未找到請(qǐng)求的文件。
            response.writeHead(404);
            // 並在不發(fā)送任何數(shù)據(jù)的情況下結(jié)束請(qǐng)求。
            response.end();
        }
    });
// 偵聽(tīng)8080 端口。
}).listen(8080);

現(xiàn)在測(cè)試它;它應(yīng)該按預(yù)期工作。

訪(fǎng)問(wèn)MySQL 數(shù)據(jù)庫(kù)

大多數(shù)傳統(tǒng)的服務(wù)器端技術(shù)都具有連接到數(shù)據(jù)庫(kù)並查詢(xún)數(shù)據(jù)庫(kù)的內(nèi)置方法。使用Node.js,您必須安裝一個(gè)庫(kù)。在本教程中,我選擇了穩(wěn)定且易於使用的node-mysql 。此模塊的全名是mysql@2.0.0-alpha2 (@ 之後的所有內(nèi)容都是版本號(hào))。打開(kāi)控制臺(tái),導(dǎo)航到您已存儲(chǔ)腳本的目錄,然後執(zhí)行以下命令:

 npm install mysql

這將下載並安裝模塊,它還會(huì)在當(dāng)前目錄中創(chuàng)建node_modules文件夾?,F(xiàn)在讓我們看看如何在代碼中使用它;請(qǐng)參見(jiàn)以下示例:

 // 包含http 模塊,
import { createServer } from "http"
// 和您剛剛安裝的mysql 模塊。
import * as mysql from "mysql"

// 創(chuàng)建連接。
// 數(shù)據(jù)默認(rèn)為新的mysql 安裝,應(yīng)根據(jù)您的配置進(jìn)行更改。
const connection = mysql.createConnection({
    user: "root",
    password: "",
    database: "db_name"
});

// 創(chuàng)建http 服務(wù)器。
createServer(function (request, response) {
    // 在end 事件上附加偵聽(tīng)器。
    request.on('end', function () {
        // 查詢(xún)數(shù)據(jù)庫(kù)。
        connection.query('SELECT * FROM your_table;', function (error, rows, fields) {
            response.writeHead(200, {
                'Content-Type': 'x-application/json'
            });
            // 將數(shù)據(jù)作為JSON 字符串發(fā)送。
            // Rows 變量保存查詢(xún)的結(jié)果。
            response.end(JSON.stringify(rows));
        });
    });
// 偵聽(tīng)8080 端口。
}).listen(8080);

使用此庫(kù)查詢(xún)數(shù)據(jù)庫(kù)很容易;只需輸入查詢(xún)字符串和回調(diào)函數(shù)即可。在實(shí)際應(yīng)用程序中,您應(yīng)該檢查是否存在錯(cuò)誤(如果發(fā)生錯(cuò)誤則為undefined)並根據(jù)查詢(xún)的成功或失敗發(fā)送響應(yīng)代碼。另請(qǐng)注意,我們已設(shè)置x-application/json,這是JSON 的有效MIME 類(lèi)型。使用JSON.stringify()方法將rows 轉(zhuǎn)換為JSON 結(jié)構(gòu)。

將此文件保存為mysql.js ,然後執(zhí)行它(如果您已安裝MySQL):

 node mysql.js

在瀏覽器中導(dǎo)航到http://m.miracleart.cn/link/7232a90ea7d391905f9ee07bcc7c5967 ,您應(yīng)該會(huì)收到下載JSON 格式文件的提示。

結(jié)論

Node.js 需要額外的工作,但快速而強(qiáng)大的應(yīng)用程序的回報(bào)是值得的。如果您不想在最低級(jí)別上完成所有工作,您可以隨時(shí)選擇一個(gè)框架(例如Express)來(lái)簡(jiǎn)化應(yīng)用程序的開(kāi)發(fā)。

Node.js 是一項(xiàng)很有前景的技術(shù),也是高負(fù)載應(yīng)用程序的絕佳選擇。微軟、eBay 和雅虎等公司已經(jīng)證明了這一點(diǎn)。如果您不確定託管您的網(wǎng)站或應(yīng)用程序,您可以隨時(shí)使用廉價(jià)的VPS 解決方案或各種基於雲(yún)的服務(wù),例如Microsoft Azure 和Amazon EC2。這兩種服務(wù)都以合理的價(jià)格提供可擴(kuò)展的環(huán)境。

以上是node.js初學(xué)者的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線(xiàn)上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門(mén)話(huà)題

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語(yǔ)言,各自適用於不同的應(yīng)用場(chǎng)景。 Java用於大型企業(yè)和移動(dòng)應(yīng)用開(kāi)發(fā),而JavaScript主要用於網(wǎng)頁(yè)開(kāi)發(fā)。

如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對(duì)像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開(kāi)始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫(kù);4.處理時(shí)區(qū)問(wèn)題建議使用支持時(shí)區(qū)的庫(kù),如Luxon。掌握這些要點(diǎn)能有效避免常見(jiàn)錯(cuò)誤。

為什麼要將標(biāo)籤放在的底部? 為什麼要將標(biāo)籤放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開(kāi)發(fā)人員的全面比較 JavaScript與Java:開(kāi)發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

什麼是在DOM中冒泡和捕獲的事件? 什麼是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。 1.事件捕獲通過(guò)addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委託,提高動(dòng)態(tài)內(nèi)容處理效率;5.捕獲可用於提前攔截事件,如日誌記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助於精確控制JavaScript響應(yīng)用戶(hù)操作的時(shí)機(jī)和方式。

JavaScript:探索用於高效編碼的數(shù)據(jù)類(lèi)型 JavaScript:探索用於高效編碼的數(shù)據(jù)類(lèi)型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

如何減少JavaScript應(yīng)用程序的有效載荷大??? 如何減少JavaScript應(yīng)用程序的有效載荷大小? Jun 26, 2025 am 12:54 AM

如果JavaScript應(yīng)用加載慢、性能差,問(wèn)題往往出在payload太大,解決方法包括:1.使用代碼拆分(CodeSplitting),通過(guò)React.lazy()或構(gòu)建工具將大bundle拆分為多個(gè)小文件,按需加載以減少首次下載量;2.移除未使用的代碼(TreeShaking),利用ES6模塊機(jī)制清除“死代碼”,確保引入的庫(kù)支持該特性;3.壓縮和合併資源文件,啟用Gzip/Brotli和Terser壓縮JS,合理合併文件並優(yōu)化靜態(tài)資源;4.替換重型依賴(lài),選用輕量級(jí)庫(kù)如day.js、fetch

JavaScript模塊上的確定JS綜述:ES模塊與COMPORJS JavaScript模塊上的確定JS綜述:ES模塊與COMPORJS Jul 02, 2025 am 01:28 AM

ES模塊和CommonJS的主要區(qū)別在於加載方式和使用場(chǎng)景。 1.CommonJS是同步加載,適用於Node.js服務(wù)器端環(huán)境;2.ES模塊是異步加載,適用於瀏覽器等網(wǎng)絡(luò)環(huán)境;3.語(yǔ)法上,ES模塊使用import/export,且必須位於頂層作用域,而CommonJS使用require/module.exports,可在運(yùn)行時(shí)動(dòng)態(tài)調(diào)用;4.CommonJS廣泛用於舊版Node.js及依賴(lài)它的庫(kù)如Express,ES模塊則適用於現(xiàn)代前端框架和Node.jsv14 ;5.雖然可混合使用,但容易引發(fā)問(wèn)題

See all articles