NodeJs基礎(node+nmp)

NodeJs

用于服務器端開發(fā),是執(zhí)行js的ECMAScript標準,不包含DOM和BOM,但是部分API可以使用

webstorm與svn關聯:

  1. 配置svn
  2. file-->settings-->version Control--> Subversion-->Use command line client 取消勾選

VCS-->checkout from version Control--> Subversion-->添加倉庫地址(默認是http)--> 選擇存儲目錄

注意:文件名不要和與框架名稱(node nodeJs )一模一樣。容易引起沖突

安裝命令行工具(非必需)

  1. 安裝命令行工具 slik Subversion

  2. 關聯webstorm:file-->settings-->version Contol--> Subversion-->Use command line client 勾選并且選擇路徑--svn.exe
    注意:安裝路徑:不要有空格,特殊字符,純英文

命令行窗口

別名:終端、shell、小黑屏;
開啟:win+R -->cmd-->回車;
在Windows的命令行窗口中直接輸入DOS命令對計算機進行操作

常用命令

  • dir 列出當前目錄下的所有文件/文件夾
    • .\:表示當前目錄
    • ..\:表示上一級目錄
  • cd 進入到指定目錄中
    • cd ..\:返回上一級目錄
  • tab鍵 自動補全
  • md+文件夾名:新建文件名
  • rd+文件夾名:刪除文件夾
  • x: (d:):切換到指定的磁盤

環(huán)境變量

指的是系統(tǒng)中需要使用的變量
path:用戶path和系統(tǒng)Path

  • 此環(huán)境變量中保存很多路徑,多個路徑之間用 ; 隔開
  • 例如:%USERPROFILE%\AppData\Local\Microsoft\WindowsApps
  • 當在命令行中訪問一個文件時,系統(tǒng)首先會在當前目錄下查詢文件,如果找到了,則直接使用;如果找不到,則依次去path環(huán)境變量中查詢,如果找到了則直接使用,如果沒有找到,則繼續(xù)查詢下一個位置,直到找到為止,如果所有路徑都沒有找到該文件,則報錯(作用域相似)
  • 如果某個文件需要在任意位置都能訪問,可以添加到環(huán)境變量中
    注意:添加環(huán)境變量之后需要重啟窗口;只需要指定到最終文件的文件夾

進程&線路

打開 Windows任務管理器可看到進程

進程

  • 進程中保存了程序要執(zhí)行所需要的一些必備的條件
  • 進程相當于工廠中的車間(工作計劃)

線程

  • 線程是CPU中的最小計算單位,程序需要通過線程來執(zhí)行
  • 線程就相當于工廠中的工人
    • 單線程:程序由一個線程執(zhí)行,如JS、nodeJs是單線程
    • 多線程:程序由多個線程同時執(zhí)行 (并發(fā)問題)
      注意:多線程不一定就比單線程快

Node.js

node.js發(fā)展史

  • 瑞安·達爾 2009年 node的最初版本
  • 2010年1月Node的包管理器npm誕生
  • 2014年12月 ‘io.js’
  • 2015年9月 Node.js和io.js合并,Node4.0發(fā)布
    注意:Node.js 偶數版本是穩(wěn)定版本,奇數版本是開發(fā)版本;是對ECMAScript的實現,BOM和DOM中大部分未實現

Nodejs簡介

單線程:主線程是單線程+I/O線程池;底層C++,大部分基本模塊是JavaScript;開發(fā)簡單/硬件要求低 優(yōu)化性能

  • 事件驅動:綁定事件
    • 服務器:接收用戶請求,處理,并返回響應
      • 性能問題(速度)
      • 客戶端 <--請求/響應--> Node服務器<--請求/響應--> 服務器 <--I/O操作--> 數據庫(磁盤存儲)
  • I/O操作 非阻塞
    • 阻塞 var a=10;alert(123);var b=20;
  • 異步I/O模型

用途:web服務API;實時多人游戲;后端的Web服務,例如跨域、服務器端的請求;基于Web的應用;多客戶端的通信

安裝Node.js

  • 官網下載:https://nodejs.org/en/
  • 運行Node.js
    • 命令行窗口 node
    • 退出:ctrl+c
  • 編寫js文件--->命令行窗口--->node 文件名.js
    WellcomeNodejs
  • 關聯webstorm:file--->settings--->Languages&Frameworks--->Node.js and NPM --->Node interpreter--->選擇node.js路徑
  • webstorm執(zhí)行js:Terminal/右鍵--->Run

node.js上的代碼

  • 代碼在服務器上運行,用戶看不到
  • 編碼不用考慮兼容問題
  • webstorm開啟node核心代碼(驗證node代碼):file--->settings--->Languages&Frameworks--->Node.js and NPM --->Coding Assistance--->enable

CommonJs規(guī)范

解決JavaScript的缺陷

ECMAScript5 標準的缺陷

  • 沒有模塊系統(tǒng) (計算機的組成就是模塊系統(tǒng))
    • jQuery 是模塊,并不是模塊系統(tǒng)
  • 標準庫較少 (官方定義沒有)
  • 沒有標準接口
  • 缺乏管理系統(tǒng) (對插件的管理)

模塊化

如果程序設計達到一定規(guī)模程度則必須進行模塊化;模塊化有多種形式,但至少提供將代碼分割為多個源文件的機制

CommonJs規(guī)范

主要是為了彌補當前JavaScript沒有模塊化標準的缺陷

CommonJS對模塊的定義十分簡單:

  • 模塊引用:在node中,通過var strName = require('string')函數來引入外部模塊;

    • require()需要一個模塊的標識,來表示要引入的模塊;在require()函數在引入模塊后,會返回一個對象作為返回值,這個對象就代表引入的模塊本身
    • 對于文件模塊(在項目中自己定義的模塊):需要使用模塊的絕對路徑,或者以.或..開頭(區(qū)別路徑和名字)的相對路徑來引入模塊
      注意:node中的模塊的代碼,都是運行在獨立的函數中,不是直接運行在全局作用域中;模塊中的變量和函數對于外部都是不可見的
      在node中有一個對象 global,是node中的全局對象
    • 在全局中創(chuàng)建的變量都會作為global的屬性保存
    • 在全局中創(chuàng)建的函數都會作為global的方法保存
  • 模塊定義:一個js文件就是一個模塊,

    • 可以將希望保留給外部的變量和函數,添加給 exports或module.exports對象 的屬性和方法
  • 模塊標識:模塊的名字,通過標識區(qū)分不同的模塊

    • 自定義的文件模塊都是使用文件的路徑作為標識
    • 其他模塊都是使用模塊的名字作為標識:fs express mongoose shal 等等

證明js模塊化代碼在函數中運行

全局中沒有,只有函數中有的參數
通過在模塊中打印 arguments 證明模塊運行在一個函數中
arguments.callee 屬性代表的是當前調用函數對象

當模塊中的代碼執(zhí)行時,node會自動在模塊的前邊添加如下代碼:function (exports, require, module, __filename, __dirname) { } 這樣模塊中的所有代碼就都被包含到一個函數中執(zhí)行,所以函數中的變量和函數默認外部都是不可訪問的

在函數中,node定義并傳遞如下幾個參數

  • exports
    • 導出的對象,通過它向外部暴露變量和函數
  • require
    • 函數,通過其引入外部的模塊
  • module
    • 對象,代表當前的整個模塊
    • exports === module.exports //true
  • __filename
    • 字符串 E:\Code\myNode\text.js
    • 當前模塊所在的完整路徑
  • __dirname
    • 字符串 E:\Code\myNode
    • 當前模塊所在目錄的完整路徑

exports&module.exports 的區(qū)別

  • exports變量是對module.exports屬性的引用,我們在向exports中添加屬性時,本質上是向module.exports中添加屬性
  • module.exports 可以直接通過賦值的形式來暴露內容;
  • exports 不能直接賦值,只能通過 . 的形式賦值

包 package

將一組相關的模塊組合在一起,形成一組完整的工具;本質是 一個文件夾
commonJS包規(guī)范由包結構和包描述文件
包結構:壓縮文件

  • package.json 包描述文件 JSON文件 必需
  • bin 可執(zhí)行二進制文件
  • lib js代碼
  • doc 文檔
  • test 單元測試

NPM(Node Package Manager)

包規(guī)范的其中一種實踐
借助NPM,Node與第三方模塊之間形成很好一個生態(tài)系統(tǒng)

NPM鏡像 npm install -g cnpm --registry=https://registry.npm.taobao.org
用cnpm 代替 npm;

NPM命令

  • npm -v :查看版本
  • npm :幫助說明
  • npm search packagefile

NPM

  • 安裝Node.js之后NPM就可以使用,和Node.js綁定安裝
  • node包操作的第三方模塊的發(fā)布、安裝和依賴
  • 對node包搜索、下載、安裝、刪除、上傳

指令

  • npm -v 查看npm版本
  • npm search packagefile
    • 簡寫 npm s packagefile


      NPM
  • npm install packagefile
    • 下載時會在當前目錄下查詢 package.json
    • 簡寫 npm i packagefile
  • npm install packagefile --save
    • 安裝指定包并添加到package.json的dependencies中
  • npm install packagefile -g
    • 全局安裝(安裝工具類)
  • npm init:初始化 配置package.json文件
    • name 文件名 不能有大寫字母
    • version
    • description
    • entry point:初始入口
    • test command
    • git repository
    • keywords
    • author
    • license
  • npm install:安裝項目中的所有依賴
    • 簡寫 npm i
  • npm remove packagefile:刪除包
    • 簡寫 npm r packagefile
  • cnpm 是 npm 在國內對其的鏡像文件庫

webstorm中使用npm

  1. Terminal:打開小窗口
  2. cd targetPath:進入指定路徑
  3. npm i packagefile:安裝需要的包
  4. 引入包文件,var pName = require('packageName')
  5. 調用方法
    node查詢模塊:當在node中引入一個外部模塊時,需要通過模塊的標識來引入模塊,node會自動根據模塊標識去搜索模塊;首先node會去當前文件所在目錄的node_modules文件夾去查詢標識模塊,如果有,則直接對其使用;如果沒有,則去當前目錄的上一級目錄的node_modules查詢,如果有則使用,如果沒有則繼續(xù)去上一級查詢直到找到為止;如果根目錄都沒有找到,則報錯。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Node.js是目前非?;馃岬募夹g,但是它的誕生經歷卻很奇特。 眾所周知,在Netscape設計出JavaScri...
    w_zhuan閱讀 3,721評論 2 41
  • Node.js是目前非?;馃岬募夹g,但是它的誕生經歷卻很奇特。 眾所周知,在Netscape設計出JavaScri...
    Myselfyan閱讀 4,191評論 2 58
  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宮若石閱讀 1,228評論 0 1
  • 個人入門學習用筆記、不過多作為參考依據。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點、復制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,637評論 1 37
  • 強調stress emphasize highlight underline 根本原因underlying mod...
    蘇醒7閱讀 473評論 0 0

友情鏈接更多精彩內容