NodeJS 簡(jiǎn)介與命令介紹

Node.js Learning

1. 命令行

1. 環(huán)境變量 => path

  • 當(dāng)我們?cè)诿钚写翱诖蜷_(kāi)一個(gè)文件缨该,或調(diào)用一個(gè)程序時(shí),系統(tǒng)回收現(xiàn)在當(dāng)前目錄下尋找文件程序川背,如果找到了則直接打開(kāi)贰拿,如果沒(méi)有找到,會(huì)依次在環(huán)境變量 Path 中尋找熄云,直到找到為止膨更,如果沒(méi)找到就報(bào)錯(cuò)。

  • 相似:作用域

var a = 100;

function fn() {
    var a = 200;
    
    function fn2() {
        var a = 300;
    
        console.log(a);
    }
    
}

fn()
// 此時(shí) a = 300


var a = 100;

function fn() {
    var a = 200;
    
    function fn2() {
        // var a = 300;
    
        console.log(a);
    }
    
}

fn()
// 此時(shí) a = 200

var a = 100;

function fn() {
    // var a = 200;
    
    function fn2() {
        // var a = 300;
    
        console.log(a);
    }
    
}

fn()
// 此時(shí) a = 100
  • 可以將經(jīng)常需要訪問(wèn)的程序和文件的路徑添加到 path

2. 進(jìn)程和線程

1. 進(jìn)程

  • 進(jìn)程負(fù)責(zé)位程序的運(yùn)行提供必備的環(huán)境

  • 進(jìn)程相當(dāng)于工廠中的車間

2. 線程

  • 線程是計(jì)算機(jī)中最小的計(jì)算單位缴允,線程負(fù)責(zé)執(zhí)行進(jìn)程中的程序

  • 線程相當(dāng)于工廠中的工人

- 單線程
  • js是單線程

  • chrome是單線程

- 多線程
  • 性能相較于單線程好

2. Node.js 簡(jiǎn)介

服務(wù)器請(qǐng)求.png

1. 概念

  • 一個(gè)能夠在服務(wù)器端運(yùn)行js的開(kāi)放源代碼荚守,跨平臺(tái)js運(yùn)行環(huán)境

[圖片上傳失敗...(image-830446-1599101590389)]

P.s: - 服務(wù)器響應(yīng)速度:帶寬

2. 模塊化

  • 如果程序設(shè)計(jì)的規(guī)模達(dá)到一定程度,則需要對(duì)其進(jìn)行模塊化管理

  • 模塊化可以有多種形式,但直到應(yīng)該提供能夠?qū)⒋a分割為多個(gè)源文件的機(jī)制

  • CommonJS的模塊功能可以幫我們解決該問(wèn)題

3. Common JS

  • 主要是為了彌補(bǔ) js 沒(méi)有標(biāo)準(zhǔn)的缺陷

  • 能夠在任何地方運(yùn)行

  • 定義:

    • 引用

    • 定義

    • 表示

3. 什么是模塊

  • Node 中矗漾,一個(gè) js 文件就是一個(gè)模塊

4. 引入其他模塊

  • 通過(guò) require("") 函數(shù)引入外部的模塊

  • require("") 可以傳遞一個(gè)文件的路勁作為參數(shù)锈候,node會(huì)自動(dòng)引入外部模塊

  • 這里路徑,如果使用相對(duì)路徑缩功,必須使用 ./.. 開(kāi)頭

  • 使用 require("")引入模塊后晴及,該函數(shù)會(huì)返回一個(gè)對(duì)象,這個(gè)對(duì)象代表的是引入的模塊

  • node中嫡锌,每一個(gè)js代碼都是獨(dú)立運(yùn)行在一個(gè)函數(shù)中虑稼,而不是全局中。所以每一個(gè)模塊中的變量和函數(shù)在其他模塊中無(wú)法訪問(wèn)

5. 向外部暴露屬性或方法

  • 可以通過(guò) exports向外部暴露變量和方法

  • 只需要將暴露給外部的變量或方法設(shè)置為export的屬性即可

6. 模塊標(biāo)識(shí)

  • 就是模塊的名字,也就是傳遞給require("")方法的參數(shù),它必須是符合駝峰命名法的字符串,或者是仙骨笛路徑或絕對(duì)路徑

  • 模塊互不干擾

  • 通過(guò)模塊表示找到我們的模塊

  • 分類:

    • 核心模塊

      • node 引擎提供的模塊

      • 核心模塊就是引入模塊的名字

    • 文件模塊

      • 由用戶自己創(chuàng)建的模塊

      • 模塊標(biāo)識(shí)就是文件的路徑 (絕對(duì)路徑,相對(duì)路徑)

node中有一個(gè)全局對(duì)象 global ,他的作用和網(wǎng)頁(yè)中 window 類似.

在全局中創(chuàng)建的變量都會(huì)作為 global 的屬性保存

在全局中創(chuàng)建的函數(shù)都會(huì)作為 global 的方法保存

當(dāng)node在執(zhí)行模塊中的代碼時(shí),他會(huì)首先在代碼的最頂部添加函數(shù)代碼

function (exports, require, module, __filename, __dirname){}

實(shí)際上模塊中的代碼都是包裝在一個(gè)函數(shù)中指向的,并且在函數(shù)在執(zhí)行時(shí),同時(shí)傳遞了 5 個(gè)實(shí)參:

exports: 將函數(shù)和對(duì)象暴露到外部

require: 函數(shù): 用來(lái)引入外部的模塊

module: 模塊: 代表的是當(dāng)前模塊本身 (exports 就是 module 的屬性 exports == module.exports)

P.s. : 通過(guò) exports 只能使用 . 的方式來(lái)向外暴露

exports.age = 10;
exports.sayName = function() {
console.log("I'm Sun wukong.");
}</pre>

通過(guò) module.exports 既可以 . , 也可以直接賦值

module.exports = {
name: "Zhu bajie",
age: 34,
sayName: function() {
console.log("I'm Zhu bajie");
}
}</pre>

__filename __: 當(dāng)前模塊完整文件路徑

dirname: 當(dāng)前模塊文件夾路徑

console.log(arguments)

js 中封裝實(shí)際參數(shù)的變量,可以通過(guò)打印此變量得到所有的局部變量

console.log(arguments.callee)

保存的是當(dāng)前執(zhí)行的函數(shù)對(duì)象

/* E:\NodeJS_Learning\code\module\04.module.js **/
var a = 10;

// 全局變量
b = 20;

console.log(global);

// 封裝實(shí)際參數(shù)的 arguments
console.log(arguments);
// 保存的是當(dāng)前執(zhí)行的函數(shù)對(duì)象
console.log(arguments.callee + "");
 /* 執(zhí)行結(jié)果 **/
 /*  
  說(shuō)明每個(gè)模塊中的變量都相當(dāng)于在一個(gè)函數(shù)中執(zhí)行
 **/
 function (exports, require, module, __filename, __dirname) {
  var a = 10;
 ?
  // 全局變量
  b = 20;
 ?
  console.log(global);
 ?
  // 封裝實(shí)際參數(shù)的 arguments
  console.log(arguments);
  // 保存的是當(dāng)前執(zhí)行的函數(shù)對(duì)象
  console.log(arguments.callee + "");
 ?
 }
堆棧內(nèi)存.png

7. Package

  • CommonJS的包規(guī)范允許我們將一組相關(guān)的模塊組合到一起,形成一組完整的工具

  • CommonJS的包規(guī)范由包結(jié)構(gòu)包描述文件兩個(gè)部分組成

  • 包結(jié)構(gòu)

    • 用于組織包中的各種文件

    • 包實(shí)際上就是一個(gè)壓縮文件,解壓后還原為目錄.符合規(guī)范的目錄,應(yīng)該包含如下文件:

      • package.json: 描述文件

      • bin: 可執(zhí)行二進(jìn)制文件

      • lib: js代碼

      • doc: 文檔

      • test: 單元測(cè)試

  • 包描述文件

    • 描述報(bào)的相關(guān)信息,以提供外部讀取分析

    • 用來(lái)表達(dá)非代碼相關(guān)的信息势木,是一個(gè)JSON格式的文件

    • 位于包的根目錄下

    • 字段:

      • name, description, version, keywords, maintainers, contributors, bugs, licenses, repositories, dependencies, homepage, os, cpu, engine, builtin, directories, implements, scripts, author, bin, main, devDependencies

相關(guān)代碼: E:\NodeJS_Learning\code\module

3. NPM (Node Package Manager)

  • npm 幫助node 完成了第三方模塊的發(fā)布蛛倦、安裝和以來(lái)等

1. Commander

  • npm -v 查看版本

  • npm version

  • npm search + packageName

  • npm init 創(chuàng)建 package.json文件

  • npm install/i + packageName

  • npm install/i + packageName -g 全局安裝

全局安裝的包一般都是一個(gè)工具, 不是在項(xiàng)目中使用的

  • npm remove/r + packageName

  • npm install + packageName --save 安裝包并添加到依賴中

添加到依賴后, 下載項(xiàng)目之后, 直接 npm install 就可以直接安裝所有的 package

2. 實(shí)戰(zhàn)

 Use `npm install <pkg>` afterwards to install a package and
 save it as a dependency in the package.json file.
 ?```
```json
 Press ^C at any time to quit.
 package name: (npm_test)
 version: (1.0.0)
 description: npm test
 entry point: (index.js)
 test command:
 git repository:
 keywords:
 author: Simon
 license: (ISC)
 About to write to E:\NodeJS_Learning\code\npm_test\package.json:
 ?
 {
  "name": "npm_test",
  "version": "1.0.0",
  "description": "npm test",
  "main": "index.js",
  "scripts": {
  "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Simon",
  "license": "ISC"
 }
 ?
 ?
 Is this OK? (yes) 
 ?
 // 注意:npm 中 package name 嚴(yán)禁使用大寫(xiě)作為名字</pre>

npm init創(chuàng)建出 package.json

 {
  "name": "npm_test",
  "version": "1.0.0",
  "description": "npm test",
  "main": "index.js",
  "scripts": {
  "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Simon",
  "license": "ISC"
 }

下載一個(gè) module => math
?

npm install math
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN npm_test@1.0.0 No repository field.

+ math@0.0.3
added 1 package from 1 contributor in 1.059s
  • 在目錄: E:\NodeJS_Learning\code\npm_test 下,出現(xiàn)了一個(gè) node_modules 文件夾

  • npm install 的所有 package 都會(huì)安裝到這個(gè)文件夾下

創(chuàng)建 index.js 文件作為 package 的入口

 /* index.js **/
 var math = require("math");
 ?
 console.log(math);
 console.log(math.add(1, 3));

執(zhí)行 index.js

 E:\NodeJS_Learning\code\npm_test>node index.js
 Object [Math] {
  samesign: [Function],
  copysign: [Function],
  add: [Function],
  sum: [Function],
  mul: [Function],
  prod: [Function],
  factorial: [Function],
  gcd: [Function],
  lcm: [Function]
 }
 4

3. NPM 鏡像服務(wù)器

npm install -g cnpm --registry=https://registry.npm.taobao.org
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
 npm WARN deprecated har-validator@5.1.5: this
 C:\Users\lenovo\AppData\Roaming\npm\cnpm -> C:\Users\lenovo\AppData\Roaming\npm\node_modules\cnpm\bin\cnpm
 + cnpm@6.1.1
 added 685 packages from 970 contributors in 18.679s

具體實(shí)施在目錄:E:\NodeJS_Learning\code\npm_test

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末啦桌,一起剝皮案震驚了整個(gè)濱河市溯壶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甫男,老刑警劉巖且改,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異板驳,居然都是意外死亡又跛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門若治,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)慨蓝,“玉大人,你說(shuō)我怎么就攤上這事端幼±窳遥” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵婆跑,是天一觀的道長(zhǎng)此熬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)滑进,這世上最難降的妖魔是什么摹迷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮郊供,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘近哟。我一直安慰自己驮审,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著疯淫,像睡著了一般地来。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上熙掺,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天判族,我揣著相機(jī)與錄音雀瓢,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛各薇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播踊兜,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼犹赖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了董瞻?” 一聲冷哼從身側(cè)響起寞蚌,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钠糊,沒(méi)想到半個(gè)月后挟秤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抄伍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年艘刚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逝慧。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昔脯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笛臣,到底是詐尸還是另有隱情云稚,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布沈堡,位于F島的核電站静陈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诞丽。R本人自食惡果不足惜鲸拥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望僧免。 院中可真熱鬧刑赶,春花似錦、人聲如沸懂衩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至牵敷,卻和暖如春胡岔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枷餐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工靶瘸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毛肋。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓怨咪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親村生。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惊暴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345