node.js

1.描述
Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環(huán)境。
使用了一個事件驅(qū)動、非阻塞式 I/O 的模型,使其輕量又高效。
Node.js 的包管理器 npm,是全球最大的開源庫生態(tài)系統(tǒng)。
是一門技術(shù),不是一門語言。
作用:
方便測試JavaScript代碼的運行環(huán)境
repl基本操作
變量、函數(shù)、對象
直接運行函數(shù)
使用下劃線字符,表示上一個命令的返回結(jié)果
repl基本命令
.help .exit

2.下載/安裝
第一種方式
https://nodejs.org/en/
下載下來直接安裝即可
第二種方式
nvm方式安裝
nvm install latest //安裝最新的版本

3.版本管理工具nvm
1.下載地址:https://github.com/coreybutler/nvm-windows/releases
2.解壓縮到某個文件夾中(elevate.cmd、elevate.vbs、install.cmd、LICENSE、nvm.exe)。例如 nvm
3.直接運行 install.cmd,忽略讓輸入的內(nèi)容。直接回車即可。
4.在C盤根目錄會生成 settings.txt
5.settings.txt文件內(nèi)容
root: D:\Program Files\nvm
path: D:\Program Files\nodejs
arch: 64
proxy: none
node_mirror: http://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/
6.配置環(huán)境變量
NVM_HOME D:\Program Files\nvm
NVM_SYMLINK D:\Program Files\nodejs
7.添加Path
%NVM_HOME%;%NVM_SYMLINK%;
8.cmd測試
nvm v 查看nvm版本
9.命令
查看本地安裝的所有版本 : nvm list/nvm ls
安裝指定版本node : nvm install 版本號
卸載指定版本node : nvm uninstall 版本號
切換使用指定版本的node :nvm use 版本號

4.helloworld程序
1.創(chuàng)建一個helloworld.js
d:/helloworld.js
2.編寫代碼
console.log("hello world");
3.運行程序
node helloworld.js

5.全局對象global
5.0 說明
global表示Node所在的全局環(huán)境,類似于瀏覽器的window對象
5.1 console
5.1.1定義變量 global.a=123和a=123的定義是一致的
var a = 123;
global.a = 1234;
console.log(a);
console.log(global.a);
5.1.2 斷言 console.assert
var a = 1234;
console.assert(a==123,"判斷失敗了a不等于123");
5.1.3 輸出代碼的執(zhí)行時間
console.time('time1');
for(var i = 0;i<1000;i++){}
console.timeEnd('time1');
注意:必須成對出現(xiàn)time1。
5.1.4 當(dāng)前文件所在的文件路徑 __dirname
console.log(__dirname);
5.1.5 當(dāng)前文件的全路徑
console.log(__filename);
5.2 process
5.6.1 說明
process對象是Node的一個全局對象,提供當(dāng)前Node進程的信息。可以在腳本的任意位置使用。
5.6.2 使用
process.pid:當(dāng)前進程的進程號。
console.log(process.pid);
process.version:Node的版本,比如v0.10.18。
console.log(process.version);
process.platform:當(dāng)前系統(tǒng)平臺,比如Linux。
console.log(process.platform);
process.env:指向當(dāng)前shell的環(huán)境變量,比如process.env.HOME。
console.log(process.env);
process.stdout:指向標準輸出。
process.stdout.write('shuaige');
process.stdin:指向標準輸入。
process.stderr:指向標準錯誤。
5.3 module
Node內(nèi)部提供一個Module構(gòu)造函數(shù),所有模塊都是Module的實例
每個模塊內(nèi)部,都有一個module對象,代表當(dāng)前模塊.
module.id 帶有絕對路徑的模塊文件名
module.filename 模塊的文件名,帶有絕對路徑
module.loaded 表示模塊是否已經(jīng)完成加載
module.parent 返回一個對象,表示調(diào)用該模塊的模塊。
module.children 返回一個數(shù)組,表示該模塊要用到的其他模塊。
module.exports 模塊對外輸出的值
module.paths
5.4 exports
本身就是全局的,可以直接使用。
5.5 require
require操作的時候其實是去硬盤中去讀js文件,把放入module對象當(dāng)中去,內(nèi)存中緩存中
在Node.js中,require命令用于加載模塊文件
讀取并執(zhí)行一個JavaScript文件
然后返回該模塊的exports對象
如果沒有發(fā)現(xiàn)指定模塊,會報錯
加載規(guī)則
參數(shù)字符串以"/"開頭
參數(shù)字符換以"./"開頭
參數(shù)字符串不以"/"或"./",表示加載核心模塊,或者一個位于各級node_modules目錄已安裝的模塊
參數(shù)字符串可以省略后綴名
.js、.json、.node
.js會當(dāng)做JavaScript腳本文件解析
.json會以JSON格式解析
.node會以編譯后的二進制文件解析
5.6 模塊 module.exports & require / exports & require
第一種寫法:
代碼:add.js
var add = function(a,b){
return a+b;
}
module.exports=add;
代碼:one.js
var add = require("./add.js");
console.log(add(1,2));
第二種寫法
var add = function(a,b){
return a+b;
}
exports.add=add;

        var add = require("./add.js").add;
        console.log(add(1,2));
        var obj = require("./add.js");
        console.log(obj.add(1,2));

6.node的模塊
6.1 說明
一個文件就是一個模塊
將方法掛載到exports對象上作為屬性即可定義導(dǎo)出的方式
Node程序由許多模塊組成,每個模塊就是一個文件。Node模塊采用了CommonJS規(guī)范。
Node.js本身就是一個高度模塊化的一個平臺
根據(jù)CommonJS規(guī)范,每一個模塊都是一個單獨的作用域
CommonJS規(guī)定,每個文件對外的接口是module.exports對象,該對象所有屬性和方法,都可以被其它文件導(dǎo)入。
6.2 引用模塊
模塊引用require
6.3 模塊標識
必須是符合小駝峰命名的字符串
以.、..開頭的相對路徑
絕對路徑
可以沒有文件名后綴.js
6.4 模塊分類
6.4.1 核心模塊 - 通過名字直接引入require('核心模塊名')
fs(file system) 文件模塊
http 網(wǎng)絡(luò)請求模塊
os 系統(tǒng)模塊
path 路徑模塊
querystring 字符串查詢模塊,解析url查詢字符串
url 地址模塊,解析url
util 提供一系列實用小工具
.. 等等

        核心模塊的源碼都在Node的lib子目錄中。為了提高運行速度,它們安裝的時候都會被編譯成二進制文件
    6.4.2 其它定義模塊 - require('路徑+模塊名')

    6.4.3 模塊加載機制
        如果require絕對路徑的文件,查找時不會去遍歷每一個node_modules目錄,其速度最快。其余流程如下:
        1. 從module path數(shù)組中取出第一個目錄作為查找基準。
        2. 直接從目錄中查找該文件,如果存在,則結(jié)束查找。如果不存在,則進行下一條查找。
        3. 嘗試添加.js、.json、.node后綴后查找,如果存在文件,則結(jié)束查找。如果不存在,則進行下一條。
        4. 嘗試將require的參數(shù)作為一個包來進行查找,讀取目錄下的package.json文件,取得main參數(shù)指定的文件。
        5. 嘗試查找該文件,如果存在,則結(jié)束查找。如果不存在,則進行第3條查找。
        6. 如果繼續(xù)失敗,則取出module path數(shù)組中的下一個目錄作為基準查找,循環(huán)第1至5個步驟。
        7. 如果繼續(xù)失敗,循環(huán)第1至6個步驟,直到module path中的最后一個值。
        8. 如果仍然失敗,則拋出異常。
6.5 總結(jié)
    所有代碼都運行在模塊作用域,不會污染全局作用域
    模塊可以多次加載,但是只會在第一次加載的時候運行一次,然后運行結(jié)果就被緩存了,以后再加載,就直接讀取緩存結(jié)果
    模塊的加載順序,按照代碼的出現(xiàn)的順序是同步加載的
    require是同步加載模塊的

7.npm包管理系統(tǒng)
7.1說明
一種含義是Node.js的開放式模塊登記和管理系統(tǒng)
全球之最:最大的模塊生態(tài)系統(tǒng),里面所有的模塊后者說是包,都是開源免費的,拿來即用
https://www.npmjs.com/
另一種含義是Node.js默認的模塊管理器,是一個命令行下的軟件,用來安裝和管理node模塊
7.2基礎(chǔ)命令
npm init 【-y】 初始化一個package.json文件
npm install 包名 安裝一個包
npm install jquery
npm install angular
npm install –save 包名 將安裝的包添加到package.json的依賴中(dependencies)
npm install –g 包名 安裝一個命令行工具
npm docs 包名 查看包的文檔【非常有用】
npm docs jquery
npm docs angular
npm root -g 查看全局包安裝路徑
npm config set prefix “路徑” 修改全局包安裝路徑
npm list 查看當(dāng)前目錄下安裝的所有包
npm list -g 查看全局包的安裝路徑下所有的包
npm uninstall 包名 卸載當(dāng)前目錄下某個包
npm uninstall –g 包名 卸載全局安裝路徑下的某個包
npm update 包名 更新當(dāng)前目錄下某個包
npm update –g 包名 更新某個全局工具包
npm update 更新當(dāng)前目錄下安裝的所有包
npm update –g 更新全局所有的工具包
7.3安裝某個模塊

7.4package.json
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JavaScript 模塊化編程 網(wǎng)站越來越復(fù)雜,js代碼、js文件也越來越多,會遇到什么問題? 命名沖突; 文件...
    magic_pill閱讀 1,580評論 0 1
  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宮若石閱讀 1,234評論 0 1
  • Node.js是目前非常火熱的技術(shù),但是它的誕生經(jīng)歷卻很奇特。 眾所周知,在Netscape設(shè)計出JavaScri...
    Myselfyan閱讀 4,197評論 2 58
  • 個人入門學(xué)習(xí)用筆記、不過多作為參考依據(jù)。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點、復(fù)制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,648評論 1 37
  • 她正在影院看電影,包里的手機震動起來。平素她最煩人看電影接電話,本不想理睬,但這手機震起來沒完,她只好拿出來看了一...
    猜不中的尾聲閱讀 536評論 4 1

友情鏈接更多精彩內(nèi)容