P02:node基本使用

相關文章

module (模塊) 經常使用以及注意事項

  • 模塊封裝器
    • 在執行模塊代碼以前,Node.js 會使用一個以下的函數封裝器將其封裝
      (function(exports, require, module, __filename, __dirname) {
          connsole.log('模塊的代碼實際上在這裏')
      });
      複製代碼
  • 如何建立一個模塊
    • 建立一個文件 => 實現了私有做用域
      // 文件名爲02_myModule.js
      複製代碼
    • 編寫一些操做,邏輯,數值等
      // 定義一個變量
          let testVar = 'test'
          // 定義一個函數
          function test() {
              console.log(testVar)
          }
          
      複製代碼
    • 對外拋出
      // 使用module.exports向外暴露
          module.exports.testVar = testVar
          module.exports.testFn = test
      複製代碼
    • 完整代碼
      // 定義一個變量
          let testVar = 'test'
          // 定義一個函數
          function test() {
              console.log(testVar)
          }
          
          // 向外暴露
          module.exports.testVar = testVar
          module.exports.testFn = test
      複製代碼
  • 如何引用一個模塊
    • / 絕對路徑, ./ ../ 相對路徑
      • 支持js,json,node擴展名,不寫擴展名以此嘗試, 均不存就報錯
      const myMo = require('./02_myModule')
      複製代碼
      • 不寫路徑則認爲是build-in模塊或者各級的node_modules內的第三方模塊
      const VUE = require('vue')
      複製代碼
    • 引用內置模塊的方式
      // 內置模塊fs 模塊是用來讀取二進制流 
      
      const fs = require('fs')
      
      const result = fs.readFile('./07_fs.js', (err, data) => {
          if(err) {
              console.log(err)
          } else {
              console.log(data)
              // 講16進制轉義爲string
              console.log(data.toString())
          }
      })
      
      // 讀取文件爲異步操做,直接打印 undefined
      console.log(result)
      複製代碼
    • 引用外部模塊
      const myMo = require('./02_myModule')
      複製代碼
    • 引用文件名爲02_myModule.js 並使用
      // 支持js,json,node擴展名,不寫擴展名以此嘗試, 均不存就報錯
          const myMo = require('./02_myModule')
          console.log(myMo.testVar)
          myMo.testFn()
      複製代碼

require 特別注意

  • module 被加載的時候執行,加載後緩存
  • 一但出現模塊被循環加載的,就只輸出已經執行的部分,還未執行的部分不會輸出、
  • 04_moduleA.js
    module.exports.test = 'A'
        
        const modB = require('./05_moduleB')
        
        console.log('modA:'+ modB.test)
        
        // 再次定義
        module.exports.test = 'AA'
    複製代碼
  • 05_moduleB.js
    module.exports.test = 'B'
        
        const modA = require('./04_moduleA')
        
        console.log('modB:'+ modA.test)
        
        // 再次定義
        module.exports.test = 'BB'
    複製代碼
  • 06_main.js
    const modA = require('./04_moduleA')
        //1 引用 04_moduleA 
        //2 其內部引用並執行05_moduleB
        //3 05_moduleB 內部引用了04_moduleA, 這時04_moduleA 中的module.exports.test = A。因此第一次打印modB:A
        //  將module.exports.test = 'BB' => 至此 引入05_moduleB 執行完畢,寫入緩存
        //4 接續2步04_moduleA 繼續執行 因此第二次打印modA:BB ,而且重置 module.exports.test = 'AA'
        const modB = require('./05_moduleB')
        //5 直接讀取緩存 
        console.log(modA.test)
        //6 第三次打印 AA
        console.log(modB.test)
        //7 第四次打印 BB
    複製代碼
    // 後臺打印
        modB:A
        modA:BB
        AA
        BB
    複製代碼

module 特別注意

  • exports 和module.exports的區別
    • exports 是module.exports 的簡寫
      //至關於
          const exports = module.exports
          // 其指向不能被改變
          exports = {
              a:1 // undefined 報錯,由於改變了指向
          }
          // 就要自定義輸出內容, 使用全寫
          module.exports = {
              a: 1
          }
      複製代碼

global

  • global 頂級對象
    • 類比於js 中的window
    • CommonJS
    • Buffer process console等經常使用方法 => 其下掛載方法
    • timer => 一系列定時操做
    • 具體
      • 聲明對象分爲局部以及全局,使用global.XXX 聲明的對象爲全局對象,其直接掛載在全局global下
      //09_global 文件
      // 聲明局部變量
      const testVar = 100
      
      // 聲明全局變量
      global.testVar2 = 1000
      module.exports.testVar = testVar
      複製代碼
      // 使用區別
      const mod = require('./09_global')
      console.log(mod.testVar)
      console.log(testVar2) // 既不用導出也不用引用便可使用
      複製代碼

process

  • process global 掛載的進程
    • process 經常使用參數
      argv => 進程啓動時的參數集 是一個數組
          1. 首參 啓動node程序的路徑
          2. 第二個參數 啓動腳本文件的路徑
          3. 若是進行文件名後傳參 即對啓動的文件作配置 node xxx.js a=1 b=2
              則會有相應的參數存儲進入argv數組 不然爲空數組
      argv0 => argv 的第一個參數 
      execArgv =>  node --inspect xxx.js
         寫在文件名前面的參數,即對node作啓動配置參數
      execPath => node 調用腳本的路徑,即node的啓動路徑
      複製代碼
    • process 環境
      const {env} = process
          console.log(env) // 保存了啓動環境的配置
          { ALLUSERSPROFILE: 'C:\\ProgramData',
            ...
            ..
            .
            USERNAME: 'Administrator',
            USERPROFILE: 'C:\\Users\\Administrator',
            windir: 'C:\\Windows',
            windows_tracing_flags: '3',
            windows_tracing_logfile: 'C:\\BVTBin\\Tests\\installpackage\\csilogfile.log',
            TERM_PROGRAM: 'vscode',
            TERM_PROGRAM_VERSION: '1.36.1',
            LANG: 'zh_CN.UTF-8' }
      複製代碼
    • process cwd => 注意這個是process的直屬方法
      console.log(process.cwd()) // 當前進程的路徑
      F:\xxx\node_xxx\demo
      複製代碼
    • process timer
      // 最後執行 全局global 直屬的   => 下個隊列隊首
          setImmediate(() => {
              console.log('setImmediate')
          })
          // 在這兩個之間執行 也是global直屬的
          setTimeout(() => {
              console.log('setTimeout')
          }, 0)
          // 最早執行 在當前隊列最後,因此先執行
          process.nextTick(() => {
              console.log('nextTick')
          })
      複製代碼

closevue

相關文章
相關標籤/搜索