node相關(guān)

node是什么

  • node 是基于chrome v8引擎的javascript運(yùn)行時(shí)環(huán)境。 node使用了事件驅(qū)動(dòng)和非阻塞I/O模型,使其輕量高效。node的包管理器是npm
  • 查看更多node相關(guān)

node的安裝(mac)

//1. 安裝nvm
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
//2. 安裝node指定版本
nvm install 8.11.3
//3. 使用指定版本
nvm use 8.11.3
//4. 查看node版本
node -v
//5. 用cnpm替換npm提高下載模塊速度
npm i cnpm -g

相關(guān)概念

  1. node的主線程是單線程的
  2. web異步方式有:setTimeout, callback, onClick, ajax
  3. 同步/阻塞,異步/非阻塞;同步是針對(duì)應(yīng)用程序執(zhí)行流程來(lái)說(shuō)的,阻塞是針對(duì)內(nèi)核輸入輸出來(lái)說(shuō)的;異步和非阻塞也是同樣的道理
    4.i/o操作, 就是讀寫(xiě)操作,能用異步就不要用同步
  4. 區(qū)分環(huán)境變量,代碼里通過(guò)process.env.NODE_ENV;
export NODE_NEV=XXX;//linux
set NODE_ENV=XXX;//window
  1. process.nextTick(function(){})//異步的,當(dāng)前隊(duì)列的底步,同步之后的執(zhí)行
    setImmediate(function(){})//放入到第二個(gè)隊(duì)列中
    setTimeout(function(){})//也是放在第二個(gè)隊(duì)列,如果不加參數(shù)是跟setImmediate一樣,哪個(gè)先執(zhí)行,不一定;如果需要設(shè)置時(shí)間需要用setTimeout

7.剩余運(yùn)算符(...如果放在形參里面就是剩余運(yùn)算符)(es6語(yǔ)法)

通過(guò)...剩余運(yùn)算符,將所有的參數(shù)放到args數(shù)組里面
setTimeout((...args) => {
    
    console.log(args.length)
},100, '吃飯’)
  1. 展開(kāi)運(yùn)算符(...如果放在實(shí)參里面就是展開(kāi)運(yùn)算符)(es6語(yǔ)法)
function add($1,$2) {
    console.log($1,$2)
}

add(...[1,3]);
  1. 合并對(duì)象(用...擴(kuò)展運(yùn)算符,es7語(yǔ)法,需要node版本8.5以上)
let obj1 = {name:'miaozhirui'};
let obj2 = {age:18}

let obj3 = {...obj1, ...obj2};
console.log(obj3)
  1. node 里面的js文件有個(gè)全局變量arguments,該參數(shù)表示的是外層的閉包的形參,值有以下幾個(gè),這幾個(gè)參數(shù)可以在文件中直接使用
exports requre module __filename __dirname
  1. 模塊化的作用: 低耦合,高內(nèi)聚,把實(shí)現(xiàn)相同功能的代碼放在一個(gè)文件(高內(nèi)聚),把實(shí)現(xiàn)不同功能的代碼分開(kāi)成不同的文件(低耦合);方便維護(hù);防止代碼沖突(命名沖突)
  2. 實(shí)現(xiàn)模塊化的方式有哪些:閉包和單例;單例最終被淘汰,在js里面單例就是定義了字面量對(duì)象,一個(gè)人用obj對(duì)象,另一個(gè)人也用了obj對(duì)象,并不能保證唯一沖突, 還是會(huì)導(dǎo)致沖突,所以最終被淘汰了,
  3. 瀏覽器端通過(guò)閉包實(shí)現(xiàn)的模塊化主要有兩種規(guī)范,一個(gè)是CMD, 一個(gè)是AMD(瀏覽器端的模塊規(guī)范,seajs是CMD的代表作(就近依賴(lài)),requirejs是AMD的代表作(依賴(lài)前置))
  4. nodejs實(shí)現(xiàn)模塊化的規(guī)范是基于commonjs,規(guī)范定義了以下規(guī)則
1. 定義如何創(chuàng)建一個(gè)模塊:一個(gè)js文件就是一個(gè)模塊
2. 定義如何使用一個(gè)模塊: 使用一個(gè)文件只需要require一個(gè)文件
3. 定義如何導(dǎo)出一個(gè)模塊: exports/module.exports
  1. nodejs里面如果一個(gè)函數(shù)是異步函數(shù)的話,一般都有回調(diào)函數(shù)
  2. exports和module.exports的區(qū)別: exports和module.exports都指向了同一個(gè)對(duì)象,但是模塊最終導(dǎo)出的是module.exports, 也就是說(shuō)如果導(dǎo)出的時(shí)候是exports=demo,這句話其實(shí)是不生效的,這句話只是給exports重新復(fù)制了,但是module.exports指向的對(duì)象并沒(méi)有變化
  3. utils.isArray 和utils.isFunction, utils.inherits(繼承共有方法)
  4. util.promisify把普通的帶有回調(diào)函數(shù)的方法轉(zhuǎn)成promise
  //要想一個(gè)函數(shù)執(zhí)行完之后具有then方法,只需要執(zhí)行完成之后,返回promise即可
  read().then(function(data){},function(error){})
  //所以read方法可以像下面這樣寫(xiě)
  function read(){
    //resolve和reject都是函數(shù),當(dāng)調(diào)用resolve會(huì)調(diào)用then的第一個(gè)方法;當(dāng)調(diào)用reject會(huì)調(diào)用then的第二個(gè)參數(shù)
    return new Promise((resolve, reject) => {

    })
}
############## 以上的方法太麻煩了 ################
let util = require('util');
let fs = require('fs');
let readFile = util.promisify(fs.readFile);//將函數(shù)promisify化

readFile('2.js', 'utf8').then(function (data) {
  console.log(data)
}, function (error) {
  console.log(error)
})

模塊的安裝

  • 全局安裝

    1. npm i xxx -g (只能在命令行中使用)
    2. npm root -g 可以查看全局安裝的包安裝到哪里了
    3. nvm是切換node的版本的,用來(lái)管理的node的版本,可以安裝在全局
    4. nrm是切換npm的源,具體使用如下
    //安裝
    cnpm i nrm -g
    nrm ls
    nrm use taobao //切換倉(cāng)庫(kù)源
    
    1. http-server模塊的使用,用來(lái)啟動(dòng)一個(gè)server,如果想以哪個(gè)目錄作為根目錄建server,就進(jìn)入到哪個(gè)目錄,執(zhí)行http-server集合
    npm http-server -g
    cd /demo
    http-server;
    
    1. 可以基于node第三方模塊idoc模塊新建一個(gè)博客模板
  • 本地安裝

    1. 本地安裝沒(méi)有-g參數(shù),安裝之前需要在目錄里面初始化,用來(lái)記錄安裝的依賴(lài)
    2. npm init -y 會(huì)在當(dāng)前目前新增加一個(gè)package.json文件
    3. 當(dāng)在某個(gè)目錄下安裝第三方模塊的時(shí)候,會(huì)先在當(dāng)前目錄找package.json文件; 如果找不到,會(huì)到父及目錄找,找不到才會(huì)在當(dāng)前目錄下安裝
    4. package.json中的scripts可以配置快捷命令腳本npm run dev
    5. 本地的依賴(lài)分為開(kāi)發(fā)依賴(lài)和項(xiàng)目依賴(lài);項(xiàng)目依賴(lài)是開(kāi)發(fā)時(shí)需要,上線也需要;開(kāi)發(fā)依賴(lài)是開(kāi)發(fā)時(shí)需要,上線時(shí)不需要;
      //安裝項(xiàng)目依賴(lài)
      npm install jquery --save 
      //刪除項(xiàng)目依賴(lài)
      npm uninstall jquery --save
      // 安裝開(kāi)發(fā)依賴(lài)
      npm install less -D || npm i less --save-dev 
      //刪除開(kāi)發(fā)依賴(lài)
     npm uninstall less --save-dev
      //安裝全部依賴(lài)
     npm install //會(huì)把package.json文件里面記錄的依賴(lài)全部安裝上
      //安裝指定版本
      npm install jquery@xxx
    
    

發(fā)布包

  1. 先回到國(guó)外nrm use npm
  2. 包名不能和已有的包名相同
  3. 需要一個(gè)入口文件來(lái)做整合
  4. npm whoami//查看當(dāng)前用戶(hù)是誰(shuí)
  5. 注冊(cè)賬號(hào)npm addUser
  6. 如果有賬號(hào)的話npm login輸入賬號(hào)即可
  7. 發(fā)包 npm publish [floder]//不帶floader表示發(fā)布當(dāng)前目錄

buffer

  • 概念

    1. 概念: buffer是緩沖區(qū),就是暫時(shí)用來(lái)存放輸入輸出數(shù)據(jù)的一段內(nèi)存
    2. 引入原因: js語(yǔ)言沒(méi)有二進(jìn)制數(shù)據(jù)類(lèi)型,而在處理TCP流和文件流的時(shí)候,必須要處理二進(jìn)制數(shù)據(jù)
    3. Nodejs提供了一個(gè)Buffer對(duì)象來(lái)提供對(duì)二進(jìn)制數(shù)據(jù)的操作
    4. buffer對(duì)象是一個(gè)表示固定內(nèi)存分配的全局對(duì)象,也就是說(shuō)要放到緩存區(qū)中的字節(jié)數(shù)需要提前確定
    5. buffer好比由多位自己元素組成的數(shù)組,可以有效的在javascript中表示二進(jìn)制數(shù)據(jù)
    6. buffer里面存放的是16進(jìn)制
  • 字節(jié)

    1. 計(jì)算機(jī)最小存儲(chǔ)計(jì)量單位是:BIT(位) 二進(jìn)制數(shù)據(jù)
    2. 計(jì)算機(jī)最基本存儲(chǔ)計(jì)量單位是:Bytes(字節(jié))
    1024bytes = 1k
    8bit(8個(gè)二進(jìn)制) = 1bytes
    1個(gè)漢字(3個(gè)bytes)
    1個(gè)字節(jié)轉(zhuǎn)成十進(jìn)制最大是255
    1個(gè)字節(jié)最大轉(zhuǎn)換成16進(jìn)制是ff
    
  • 定義buffer的三種方式

    1. 通過(guò)長(zhǎng)度定義buffer(最常用)
    let buffer = Buffer.alloc('6');
    let buffer = Buffer.allocUnsafe(6);
    
    1. 通過(guò)數(shù)組定義buffer
    let buffer = Buffer.from([1,2,3,4])
    
    1. 字符串創(chuàng)建buffer(把字符串轉(zhuǎn)成buffer)
    let buffer = Buffer.from('珠峰培訓(xùn)')
    
  • buffer轉(zhuǎn)成字符串

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

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

  • 前言 這里筑夢(mèng)師,是一名正在努力學(xué)習(xí)的iOS開(kāi)發(fā)工程師,目前致力于全棧方向的學(xué)習(xí),希望可以和大家一起交流技術(shù),共同...
    筑夢(mèng)師Winston閱讀 26,462評(píng)論 80 514
  • 官方文檔Node.js v6.2.0 Documentation 快速入門(mén)教程菜鳥(niǎo)教程 阮一峰e(cuò)s6入門(mén)教程ECM...
    前端歷險(xiǎn)記閱讀 1,315評(píng)論 0 5
  • 總結(jié)一: [node.js總結(jié)](http://www.cnblogs.com/Darren_code/archi...
    xiumeiii閱讀 2,022評(píng)論 0 14
  • 之前的文章大量的內(nèi)容在和大家探討分布式存儲(chǔ),接下來(lái)的章節(jié)進(jìn)入了分布式計(jì)算領(lǐng)域。坦白說(shuō),個(gè)人之前專(zhuān)業(yè)的重心側(cè)重于存儲(chǔ)...
    LeeHappen閱讀 1,111評(píng)論 0 3
  • 1、早上睡得迷迷糊糊聽(tīng)到大寶讓爸爸上班前幫她開(kāi)電腦找《功夫熊貓》,很快又進(jìn)入夢(mèng)鄉(xiāng),不知過(guò)了多久,突然被小手輕輕搖醒...
    銅豌豆candy閱讀 137評(píng)論 0 0

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