前端工程化-Node.js 內(nèi)置模塊(核心模塊)

以下皆為拉勾教育課件內(nèi)筆記

模塊

Node.js 中的模塊是具有特定功能的對象。按照模塊的作者進行劃分,可以分成三類:

  • 內(nèi)置模塊:也叫核心模塊,
    • 對應 Web 端 JS 的宿主對象,例如:window,localtion,history 等;
    • 無需單獨安裝 - 會隨著Node.js一起安裝;
    • 可以在官方API文檔中查看:http://nodejs.cn/api/
  • 自定義模塊:程序員自己寫的,具有一定功能的代碼塊。
    • 文件模塊:單獨的一個 JS 文件組成的模塊
    • 目錄模塊:多個 JS 文件組合在一起,放在一個目錄中形成的模塊
  • 第三方模塊:既不是內(nèi)置模塊,也不是自定義模塊。
    • 對應 Web 端 JS 的第三方庫,例如:jQuery,Bootstrap 等。
    • 想要使用,必須先安裝( 如同使用 jQuery 之前,必須先通過 script 標簽引入一樣 )
    • 在Node.js中,大量的第三方模塊通過 npm 來管理。

內(nèi)置模塊

內(nèi)置模塊(也叫核心模塊)是官方提供的,無需下載,可以直接使用的模塊。

官網(wǎng):http://nodejs.cn/api/

  1. console

    console 模塊提供了一個簡單的調(diào)試控制臺,類似于 Web 瀏覽器提供的 JavaScript 控制臺。

    // 不同類型的數(shù)據(jù),輸出后顏色不同
    console.log('1');
    console.log(1);
    
    var obj = { name: 'Tom', age: 19 }
    console.log(obj)
    console.table(obj) // 以表格方式展示數(shù)據(jù)
    
    console.time('for');//開始計時
    for (var i = 1; i <= 100000; i++) {
    }
    console.timeEnd('for');//結束計時
    
    console.time('while');
    var i = 1;
    while (i <= 100000) {
      i++;
    }
    console.timeEnd('while');
    
  1. process

    process 對象是一個全局變量,提供了有關當前 Node.js 進程的信息并對其進行控制。 作為全局變量,它始終可供 Node.js 應用程序使用,無需使用 require()。 它也可以使用 require() 顯式地訪問:

    // process 是全局變量,可以不寫 require 引入
    const process = require('process');
    
    // 獲取操作系統(tǒng)架構  x64
    console.log(process.arch)
    
    // 當前系統(tǒng)平臺信息  win32
    console.log(process.platform)
    
    // 獲取當前文件所在的目錄 D:\cliu\Desktop\node
    console.log(process.cwd())  //  current working directory
    
    // 環(huán)境變量
    console.log(process.env)
    // 自定義環(huán)境變量
    process.env.NODE_ENV = 'develop'
    console.log(process.env)
    
    // 獲取進程的編號
    console.log(process.pid)
    
    // 殺死進程  process.kill(進程編號)
    
  1. path

    path 模塊負責文件路徑的

    • ./ 表示當前目錄
    • ../ 表示上一級目錄
    • __dirname 返回當前文件所在的目錄
    • __filename 返回當前文件的完整路徑(目錄+文件)
    const path = require('path')
    
    // __dirname 獲取當前文件所在的目錄
    path.join(__dirname, 'dist') // directory name
    
    console.log('join用于拼接多個路徑部分,并轉(zhuǎn)化為正常格式');
    const temp = path.join(__dirname, '..', 'lyrics', './友誼之光.lrc');
    console.log(temp);
    
    console.log('獲取路徑中的文件名');
    console.log(path.basename(temp));
    
    console.log('獲取一個路徑中的目錄部分');
    console.log(path.dirname(temp));
    
    console.log('獲取一個路徑中最后的擴展名');
    console.log(path.extname(temp));
    
  1. fs

    fs (file system)模塊主要負責文件基本操作,官方文檔:fs 文件系統(tǒng) (nodejs.cn)

  • 文件操作

      // 使用 fs 之前先引入
      const fs = require('fs')
      
      // 寫文件 (清空寫入:寫入之前會先將文件清空)
      # fs.writeFile('文件路徑','寫入內(nèi)容',回調(diào)函數(shù))
      fs.writeFile('./1.txt', '曾經(jīng)有一首歌,她感動了我', (err) => {
          if (err) throw err
          console.log('寫入成功')
      })
      
      // 讀文件
      # fs.readFile('文件路徑', 回調(diào)函數(shù))
      fs.readFile('./1.txt', (err, data) => {
          if (err) throw err
          // data 是二進制數(shù)據(jù),默認輸出時,以十六進制的方式展示
          // 想要看到正常的效果,需要通過 toString() 轉(zhuǎn)換
          console.log(data.toString())
      })
      
      // 刪除文件
      # fs.unlink('文件路徑', 回調(diào)函數(shù))
      fs.unlink(__dirname+'/1.txt', (err) => {
          if (err) throw err
          console.log('刪除成功')
      })
      
      // 追加寫入(多次執(zhí)行,文件中會有多條數(shù)據(jù))
      # fs.appendFile('文件路徑','寫入內(nèi)容',回調(diào)函數(shù))
      fs.appendFile(__dirname+'/2.txt', '曾經(jīng)有一首歌,她是這樣唱的\n', (err) => {
          if (err) throw err
          console.log('追加寫入成功') 
      })
    
    
  • 目錄操作

      // 創(chuàng)建目錄
      fs.mkdir('./d1', (err) => {
        if (err) throw err
        console.log('創(chuàng)建成功')
      })
      
      // 刪除目錄(只能刪除空目錄)
      fs.rmdir('./d1', (err) => {
        if (err) throw err
        console.log('刪除成功')
      })
      
      // 重命名目錄(需要傳入完整路徑)
      // 語法:fs.rename(舊名稱,新名稱,回調(diào)函數(shù))
      fs.rename(__dirname+'/d1', __dirname+'/d2', (err) => {
        if (err) throw err
        console.log('重命名成功')
      })
      
      // 讀取目錄
      fs.readdir(__dirname, (err, data) => {
        if (err) throw err
        // console.log(data) // data 是數(shù)組
        data.map((d) => { // map 方法遍歷數(shù)組
          console.log(d)
        })
      })
      
      // 先判斷目錄是否存在,若不存在則同步創(chuàng)建目錄
      if (!fs.existsSync('./d2')) {
        fs.mkdirSync('./d2')
      }
      
    
  • fs.stat 查看狀態(tài)

     // 查看文件信息
     fs.stat(__dirname+"/a.txt", (err, stat) => {
       if (err) throw err
       if (stat.isDirectory()) {
         // 判斷當前文件是否是目錄
         console.log('目錄:', d)
       } else if (stat.isFile()) {
         // 判斷當前文件是否是普通文件
         console.log('文件:', d)
       }
     })
    

Node.js 函數(shù)有同步與異步之分

  1. http

    以前,我們使用 Apache 或 Nginx 來搭建服務器。Node.js 中,也有搭建服務器的模塊。就是 http 模塊。

    const http = require('http')
    
    // 1. 創(chuàng)建服務器
    /**
     * req = request  請求
     * res = response 響應
     */
    const server = http.createServer((req, res) => {
        res.statusCode = 200
        res.setHeader('Content-Type', 'text/plain; charset=utf-8')
        res.end('你好:Node.js')
    })
    
    // 2. 發(fā)布 web 服務
    const port = 3000
    const host = 'localhost'
    // 在瀏覽器中訪問 http://localhost:3000 然后能看到效果
    server.listen(port, host, () => {
        console.log(`服務器運行在 http://${host}:${port}`)
    })
    

文件流

文件流方式讀寫文件的內(nèi)存效率提高,無需加載大量數(shù)據(jù)。流把大數(shù)據(jù)切成小塊,占用內(nèi)存更少。時間效率有一定提高,接獲數(shù)據(jù)后立即開始處理,無需等到內(nèi)存緩沖填滿。



const fs = require('fs')

// 1. 創(chuàng)建讀取流
var readStream = fs.createReadStream('./file2.txt')

// 2. 創(chuàng)建寫入流
var writeStream = fs.createWriteStream('./file_stream.txt')

// 3. 把讀取流通過管道傳給寫入流
readStream.pipe(writeStream)
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

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

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