node 初步 (一)

node 介 紹

node.js 的一些 '是' 與 '不是'

  • 不是一個框架, 庫
  • 不是一門新的語言
  • 是一個平臺
  • 是一個 JS 的運行環境(瀏覽器也是 JS 的運行環境)
  • 運行在 Chrome 的 V8 引擎中, 性能很高css

    • 並不在瀏覽器沙箱中運行
    • 功能上相似C/C++
    • 能訪問電腦上的資源(文件,網絡等)

node.js 現階段應用場景

  • 高性能 web 服務器前端

    • 單線程異步實現
    • 其餘語言 Java / Python / NGINX
  • 前端構建/前端工程化(搭環境)node

    • 轉義( es6 -> es5, less/sass -> css)
    • 壓縮, 混淆(把易讀的源代碼轉化成幾乎不可讀的, 最主要的手段就是經過改變形參的名字)
    • 打包(把從入口文件開始的全部使用到的文件打包成一個文件)
  • 爬蟲, 命令行工具等
  • Electron (VScode, Atom)es6

    • 因爲沒有 UI 框架, node 和瀏覽器結合, 利用瀏覽器窗口實現用戶界面(VScode)

背 景

  • 常見的 輸入-輸出 模型web

    1. 同步I/O
      當文件讀取徹底結束時返回內容npm

      • 傳統方式
        一個文件徹底讀取執行完成後, 再讀取下一個json

        for(var i = 0; i < 10; i++) {
               var content = readFile(i + '.txt')
           }
      • 優化方式(C/C++)
        全部文件同時讀取, 哪一個先讀取完, 哪一個先執行
        select 函數是系統自帶的一個函數, 會在所傳入參數數組中的任何一個元素準備好時進行返回前端工程化

        var conn1 = connect()
           var conn2 = connect()
           var conn3 = connect()
          
           while(true){
                   var readyConns = select([conn1, conn2, conn3])
                   for(var readyConn of readyConns) {
                        var data = read(readyConn)
                        var result = process(data)
                        Write(readyConn, result)
                   }
           }
      • 多線程
        多個文件在多個線程中進行
    2. 異步I/O(node.js)
      腳本在讀寫設備的同時繼續執行, 並在任務完成時調用回調函數
      其實是經過多個線程實現的, 只不過多線程相對隱藏, 只可以應用相應接口進行調用數組

      fs.readFile('a.txt', (err, data) => {
      
      })
      console.log(1)
  • 同步/異步
    同步模式中含有隱藏的等待I/O, 適用於直線控制流程序
    異步模式中的等待I/O在管控之中, 適用於非直線控制模型

node 版本號相關

  • 每一年4月和每一年10月發佈一個大的版本號(11.x.x->12.x.x)
  • 奇數版本維護的時間相對較短(在下一個偶數號版本發佈後徹底中止維護)
  • 在新的偶數號版本發佈後, 前一個偶數號版本會成爲LTS(Long Term Service)版本,並繼續維護1.5年
  • LTS版本很是穩定(API幾乎不會發生變化), 並會修復漏洞

node 命令

  • 執行JS文件瀏覽器

    $ node hello.js(文件名)
  • 交互式控制檯(REPL)

    $ node
    > 1 + 1
    2
    
    > .help // 一些常見幫助信息(break/clear/editor/exit/load/save)
    $
  • 命令行參數
    process.argv能夠獲取傳遞給腳本的命令行參數
    showargv.js中只包含一條console.log(process.argv)語句

    $ node showargv.js one --and two
    ["node", "/home/margin/showargv.js", "one", "--and", "two"]
  • 調試

    • 在瀏覽器中調試

      $ node --inspect-brk hello.js

      運行完命令,打開Chrome的控制檯點擊node圖標便可
      brk使命令暫停在第一行,可不加

    • 在VScode中直接調試
    • ndb

模 塊

node並無在全局做用域中添加不少功能, 多數功能都是經過調用 require 函數從模塊中獲取的

從路徑爲 y 的模塊中 require(x)
  1. 若是 x 是一個內置模塊
    -> 直接返回內置模塊
    -> 結束
  2. 若是 x 以'/'開頭
    -> 將 y 設置爲根目錄
  3. 若是 x 以 './' 或 '../' 或 '/' 開頭
    -> 加載 y + x 組合的路徑
  4. 若是 x 看起來不像一個路徑

    • 在當前文件夾的 node-modules 文件夾裏查找名爲 x 的文件夾

      • 若是此文件夾裏有 package.json , 則加載 main 字段所指向的文件
      • 若是沒有 package.json , 則直接加載文件夾裏的 index 文件
    • 若是在當前文件夾的 node-modules 裏找不到名爲 x 的文件夾

      • 則在當前文件夾的父級文件夾裏查找 node-modules
    • 若是 x 爲 xx/yy 則加載 xx 文件夾中的 yy 文件
    chunk1 = require('lodash').chunk  // 加載了整個 lodash , 只把 chunk 讀取了出來
     chunk2 = require('lodash/chunk')  // 只加載了 lodash 中的 chunk.js 文件

安裝 NPM 模塊

$ npm install figlet
$ npm i figlet//install和global能夠縮寫
$ npm i -g figlet
  • npm install : 把文件下載下來, 裝到當前工做目錄的node-modules文件夾裏面
  • npm install --global : 全局安裝, 注意全局安裝並非在全部地方均可以 require, 只能在當前文件夾中 require , 這裏的指的是一個命令行工具裝在全局中
相關文章
相關標籤/搜索