中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

四川旅游網(wǎng)站設(shè)計論文全網(wǎng)營銷外包

四川旅游網(wǎng)站設(shè)計論文,全網(wǎng)營銷外包,網(wǎng)絡(luò)推廣公司專業(yè)網(wǎng)絡(luò),寧波住房建設(shè)局網(wǎng)站一、Node.js是什么 1.node.js是什么 官方對Node.js的定義: Node.js是一個基于V8 JavaScript引擎的JavaScript運行時環(huán)境。 也就是說Node.js基于V8引擎來執(zhí)行JavaScript的代碼,但是不僅僅只有V8引擎: 前面我們知道V8可以嵌入到任何C 應(yīng)用…

一、Node.js是什么

1.node.js是什么

官方對Node.js的定義:

Node.js是一個基于V8 JavaScript引擎的JavaScript運行時環(huán)境。

也就是說Node.js基于V8引擎來執(zhí)行JavaScript的代碼,但是不僅僅只有V8引擎

前面我們知道V8可以嵌入到任何C ++應(yīng)用程序中,無論是Chrome還是Node.js,事實上都是嵌入了V8引擎來執(zhí)行JavaScript代碼;

但是在Chrome瀏覽器中,還需要解析、渲染HTML、CSS等相關(guān)渲染引擎,另外還需要提供支持瀏覽器操作的API、瀏覽器自己的事件循環(huán)等;

另外,在Node.js中我們也需要進行一些額外的操作,比如文件系統(tǒng)讀/寫、網(wǎng)絡(luò)IO、加密、壓縮解壓文件等操作;

2.瀏覽器和Node.js架構(gòu)的區(qū)別

我們可以簡單理解規(guī)劃出Node.js和瀏覽器的差異:

在這里插入圖片描述

3.Node.js架構(gòu)

我們來看一個單獨的Node.js的架構(gòu)圖:

我們編寫的JavaScript代碼會經(jīng)過V8引擎,再通過Node.js的Bindings,將任務(wù)放到Libuv的事件循環(huán)中;

  • libuv(Unicorn Velociraptor—獨角伶盜龍)是使用C語言編寫的庫;
  • libuv提供了事件循環(huán)文件系統(tǒng)讀寫、網(wǎng)絡(luò)IO、線程池等等內(nèi)容;

在這里插入圖片描述

4.Node.js的應(yīng)用場景

Node.js的快速發(fā)展也讓企業(yè)對Node.js技術(shù)越來越重視,在前端招聘中通常會對Node.js有一定的要求,特別對于高級前端開發(fā)工程師,Node.js更是必不可少的技能:

應(yīng)用一:目前前端開發(fā)的庫都是以node包的形式進行管理

應(yīng)用二:npm、yarn、pnpm工具成為前端開發(fā)使用最多的工具;

應(yīng)用三:越來越多的公司使用Node.js作為web服務(wù)器開發(fā)、中間件、代理服務(wù)器;

應(yīng)用四:大量項目需要借助Node.js完成前后端渲染的同構(gòu)應(yīng)用

應(yīng)用五:資深前端工程師需要為項目編寫腳本工具(前端工程師編寫腳本通常會使用JavaScript,而不是Python或者shell);

應(yīng)用六:很多企業(yè)在使用Electron來開發(fā)桌面應(yīng)用程序;

二、Node的安裝

1.Node的安裝

Node.js是在2009年誕生的,目前最新的版本是分別是LTS 16.15.1以及Current 18.4.0:

  • LTS版本:(Long-term support, 長期支持)相對穩(wěn)定一些,推薦線上環(huán)境使用該版本;
  • Current版本:最新的Node版本,包含很多新特性;

這些我們選擇什么版本呢?

  • 如果你是學(xué)習(xí)使用,可以選擇current版本;
  • 如果你是公司開發(fā),建議選擇LTS版本(面向工作,選擇LTS版本);

Node的安裝方式有很多:

  • 可以借助于一些操作系統(tǒng)上的軟件管理工具,比如Mac上的homebrew,Linux上的yum、dnf等;
  • 也可以直接下載對應(yīng)的安裝包下載安裝;

我們選擇下載安裝,下載自己操作系統(tǒng)的安裝包直接安裝就可以了:

  • window選擇.msi安裝包,Mac選擇.pkg安裝包,Linux會在后續(xù)部署中講解;
  • 安裝過程中會配置環(huán)境變量(讓我們可以在命令行使用);
  • 并且會安裝npm(Node Package Manager)工具;

2.Node版本管理工具

在實際開發(fā)學(xué)習(xí)中,我們只需要使用一個Node版本來開發(fā)或者學(xué)習(xí)即可。

但是,如果你希望通過可以快速更新或切換多個版本時,可以借助于一些工具:

  • nvm:Node Version Manager;
  • n:Interactively Manage Your Node.js Versions(交互式管理你的Node.js版本)

問題:這兩個工具都不支持window

Window的用戶怎么辦?

針對nvm,在GitHub上有提供對應(yīng)的window版本:https://github.com/coreybutler/nvm-windows

  • 通過 nvm install latest 安裝最新的node版本

  • 通過 nvm list 展示目前安裝的所有版本

  • 通過 nvm use 切換版本

3.版本管理工具:n

安裝n:直接使用npm安裝即可

# 安裝工具n
npm install -g n
# 查看n的版本
n --version

安裝最新的lts版本:

  • 前面添加的sudo是權(quán)限問題;
  • 可以兩個版本都安裝,之后我們可以通過n快速在兩個版本間切換;
# 安裝lts版本
n lts
# 安裝最新版本
n latest

三、JavaScript代碼運行

1.JavaScript代碼運行

如果我們編寫一個js文件,里面存放JavaScript代碼,如何來執(zhí)行它呢?

目前我們知道有兩種方式可以執(zhí)行:

  • 將代碼交給瀏覽器執(zhí)行;
  • 將代碼載入到node環(huán)境中執(zhí)行;

如果我們希望把代碼交給瀏覽器執(zhí)行:

需要通過讓瀏覽器加載、解析html代碼,所以我們需要創(chuàng)建一個html文件;

  • 在html中通過script標(biāo)簽,引入js文件;
  • 當(dāng)瀏覽器遇到script標(biāo)簽時,就會根據(jù)src加載、執(zhí)行JavaScript代碼;

如果我們希望把js文件交給node執(zhí)行:

  • 首先電腦上需要安裝Node.js環(huán)境,安裝過程中會自動配置環(huán)境變量
  • 可以通過終端命令node js文件的方式來載入和執(zhí)行對應(yīng)的js文件;

2.Node的REPL

什么是REPL呢?感覺挺高大上

  • REPL是Read-Eval-Print Loop的簡稱,翻譯為“讀取-求值-輸出”循環(huán);
  • REPL是一個簡單的、交互式的編程環(huán)境

事實上,我們?yōu)g覽器的console就可以看成一個REPL。

Node也給我們提供了一個REPL環(huán)境,我們可以在其中演練簡單的代碼。

在這里插入圖片描述

四、Node的輸入和輸出

1.Node程序傳遞參數(shù)

正常情況下執(zhí)行一個node程序,直接跟上我們對應(yīng)的文件即可:

node index.js

但是,在某些情況下執(zhí)行node程序的過程中,我們可能希望給node傳遞一些參數(shù):

node index.js env=dev abc

如果我們這樣來使用程序,就意味著我們需要在程序中獲取到傳遞的參數(shù)

  • 獲取參數(shù)其實是在process的內(nèi)置對象中的;
  • 如果我們直接打印這個內(nèi)置對象,它里面包含特別多的信息:
    • 其他的一些信息,比如版本、操作系統(tǒng)等大家可以自行查看,后面用到一些其他的我們還會提到;

現(xiàn)在,我們先找到其中的argv屬性:

  • 我們發(fā)現(xiàn)它是一個數(shù)組,里面包含了我們需要的參數(shù);
// 2.給程序輸入內(nèi)容
// node ./webpack.config.js env=development
const arg1 = process.argv[2]
const arg2 = process.argv[3]console.log(arg1, arg2)setTimeout(() => {// console.clear()console.trace()
}, 3000);

2.為什么叫argv呢?

你可能有個疑問,為什么叫argv呢?

在C/C++程序中的main函數(shù)中,實際上可以獲取到兩個參數(shù):

  • argc:argument counter的縮寫,傳遞參數(shù)的個數(shù);
  • argv:argument vector(向量、矢量)的縮寫,傳入的具體參數(shù)。

vector翻譯過來是矢量的意思,在程序中表示的是一種數(shù)據(jù)結(jié)構(gòu)。

在C++、Java中都有這種數(shù)據(jù)結(jié)構(gòu),是一種數(shù)組結(jié)構(gòu)

在JavaScript中也是一個數(shù)組,里面存儲一些參數(shù)信息;

我們可以在代碼中,將這些參數(shù)信息遍歷出來,使用:

const args = process.argv
for (const arg of args) {console.log(arg)
}

3.Node的輸出

console.log

  • 最常用的輸入內(nèi)容的方式:console.log

console.clear

  • 清空控制臺:console.clear

console.trace

  • 打印函數(shù)的調(diào)用棧:console.trace

還有一些其他的方法,其他的一些console方法,可以自己在下面學(xué)習(xí)研究一下。

  • https://nodejs.org/dist/latest-v16.x/docs/api/console.html

五、常見的全局對象

1.常見的全局對象

Node中給我們提供了一些全局對象,方便我們進行一些操作:

  • 這些全局對象,我們并不需要從一開始全部一個個學(xué)習(xí);
  • 某些全局對象并不常用
  • 某些全局對象我們會在后續(xù)學(xué)習(xí)中講到;
    • 比如module、exports、require()會在模塊化中講到;
    • 比如Buffer后續(xù)會專門講到;

在這里插入圖片描述

process對象:process提供了Node進程中相關(guān)的信息:

  • 比如Node的運行環(huán)境、參數(shù)信息等;
  • 后面在項目中,我也會講解,如何將一些環(huán)境變量讀取到 process 的 env 中;

console對象:提供了簡單的調(diào)試控制臺,在前面講解輸入內(nèi)容時已經(jīng)學(xué)習(xí)過了。

  • 更加詳細的查看官網(wǎng)文檔:https://nodejs.org/api/console.html

定時器函數(shù):在Node中使用定時器有幾種方式:

  • setTimeout(callback, delay[, …args]):callback在delay毫秒后執(zhí)行一次;
  • setInterval(callback, delay[, …args]):callback每delay毫秒重復(fù)執(zhí)行一次;
  • setImmediate(callback[, …args]):callback I / O事件后的回調(diào)的“立即”執(zhí)行;
    • 這里先不展開討論它和setTimeout(callback, 0)之間的區(qū)別;
    • 因為它涉及到事件循環(huán)的階段問題,我會在后續(xù)詳細講解事件循環(huán)相關(guān)的知識;

process.nextTick(callback[, …args]):添加到下一次tick隊列中;

  • 具體的講解,也放到事件循環(huán)中說明;

2.global對象

global是一個全局對象,事實上前端我們提到的process、console、setTimeout等都有被放到global中:

我們之前講過:在新的標(biāo)準(zhǔn)中還有一個globalThis,也是指向全局對象的;

類似于瀏覽器中的window

console.log(global === globalThis)// true

3.global和window的區(qū)別

在瀏覽器中,全局變量都是在window上的,比如有document、setInterval、setTimeout、alert、console等等

在Node中,我們也有一個global屬性,并且看起來它里面有很多其他對象。

但是在瀏覽器中執(zhí)行的JavaScript代碼,如果我們在頂級范圍內(nèi)通過var定義的一個屬性,默認會被添加到window對象上

var foo = 111
console.log(window.foo)// 111

但是在node中,我們通過var定義一個變量,它只是在當(dāng)前模塊中有一個變量,不會放到全局中

var foo = 111
console.log(window.foo)// undefined

3.特殊的全局對象

為什么我稱之為特殊的全局對象呢?

  • 這些全局對象實際上是模塊中的變量,只是每個模塊都有,看來像是全局變量;
  • 在命令行交互中是不可以使用的;
  • 包括:__dirname、__filename、exports、module、require()

__dirname:獲取當(dāng)前文件所在的路徑:

  • 注意:不包括后面的文件名

__filename:獲取當(dāng)前文件所在的路徑和文件名稱:

  • 注意:包括后面的文件名稱
console.log("全局對象__dirname:" + __dirname)
// 全局對象__dirname:D:\disk\frontend\code\06JS_MODULE\01Nodejs
console.log("全局對象__filename:" + __filename)
// 全局對象__filename:D:\disk\frontend\code\06JS_MODULE\01Nodejs\03_全局對象.js
http://www.risenshineclean.com/news/4325.html

相關(guān)文章:

  • 購物網(wǎng)站開發(fā)設(shè)計思路廣州市口碑seo推廣
  • 菏澤網(wǎng)站建設(shè)公司有哪些百度公司地址在哪里
  • 雷州網(wǎng)站建設(shè)公司百度app下載官方免費最新版
  • 設(shè)計漂亮的網(wǎng)站廣州權(quán)威發(fā)布
  • 做模板網(wǎng)站怎么放視頻教程多少關(guān)鍵詞排名優(yōu)化軟件
  • wordpress2.9.2漏洞win7優(yōu)化極致性能
  • 手機怎么樣自己做網(wǎng)站網(wǎng)站優(yōu)化公司開始上班了
  • 廣州設(shè)計公司網(wǎng)站黃頁網(wǎng)絡(luò)的推廣網(wǎng)站有哪些軟件
  • 中山技術(shù)支持中山網(wǎng)站建設(shè)做電商必備的幾個軟件
  • 手機網(wǎng)絡(luò)營銷方案優(yōu)秀網(wǎng)站seo報價
  • 長沙百度網(wǎng)站制作哪里有網(wǎng)頁設(shè)計公司
  • 麗水專業(yè)網(wǎng)站建設(shè)公司百度網(wǎng)站站長工具
  • 長春啟做網(wǎng)站多少廣州網(wǎng)站營銷seo
  • 重慶企業(yè)網(wǎng)站建設(shè)聯(lián)系電話公司網(wǎng)絡(luò)推廣的作用
  • 網(wǎng)站關(guān)鍵詞優(yōu)化方法西安優(yōu)化外
  • 青島網(wǎng)站開發(fā)公司一份完整的電商運營方案
  • lazada網(wǎng)站seo運營
  • 海外公司網(wǎng)站 國內(nèi)做備案美國婚戀網(wǎng)站排名
  • 注冊個人網(wǎng)站要多少錢寧波關(guān)鍵詞優(yōu)化時間
  • 電子商務(wù)網(wǎng)站建設(shè)漢獅網(wǎng)站權(quán)重查詢工具
  • 淮安做網(wǎng)站的有多少站長之家音效
  • 小程序加盟平臺快速排名優(yōu)化
  • 免費php網(wǎng)站模板下載北京百度推廣電話號碼
  • 有個在家做的客服網(wǎng)站營銷型網(wǎng)站建站推廣
  • 網(wǎng)站標(biāo)題分隔符搜索引擎競價排名
  • 地產(chǎn)公司做網(wǎng)站維護寫代碼么莆田百度seo公司
  • wordpress密碼忘記了百度問答優(yōu)化
  • 宿州網(wǎng)站建設(shè)哪家公司好新聞軟文范例大全
  • 可信賴的武漢網(wǎng)站建設(shè)信息如何優(yōu)化上百度首頁公司
  • 網(wǎng)站建設(shè)如何交稅南京seo報價