1. 程式人生 > 其它 >Node.js模組化開發

Node.js模組化開發

技術標籤:node.jsnode.js

1:JavaScript開發弊端

JavaScript在使用時存在兩大問題,檔案依賴和命名衝突

2: Node.js中模組化開發規範

  • Node.js規定一個JavaScript檔案就是一個模組,模組內部定義的變數和函式預設情兄下在外部無法得到

  • 模組內部可以使用exports物件進行成員匯出,使用require方法匯入其他模組。

例:dom1.js 匯出檔案

let ve=1; //定義了一個變數
const sy = name => `你好, ${name}`;//定義一個方法
//向模組化外部匯出資料
exports.ve=ve;
exports.
sy=sy;

gom.js 匯入檔案

//模組成員進行匯入
//在gom.js模組中匯入dom1模組
let gom=require('./dom1');
//輸出dom1模組ve變數
console.log(gom.v);
//輸出方法
console.log(gom.s('小明'));

執行gom.js

在這裡插入圖片描述
模組成員匯出的另一種方式(module)

例:a.js

const g =name => `hello ${name}`;
 module.exports.gz=g;

b.js

const b=require('../模組化/a');
console.log(b.gz('小明'));

執行b.js

在這裡插入圖片描述

模組匯出兩種方式的聯絡與區別

exports是module.exports的別名(地址引用關係),匯出物件最終以module.exports為準.

  • 當export和module.exports指向同個物件時,二者是等價的

例:a.js

const g =name => `hello ${name}`;
const x=100;
exports.x=x;
 module.exports.gz=g;

b.js

const b=require('../模組化/a');
// console.log(b.gz('小明'));
console.log(b);

在這裡插入圖片描述
你可以發現 x:100照樣可以輸出

  • 當export和module.exports指向不同個物件時,以module.exports為準

例:a.js

 module.exports={
     name:'張三'
 }
 exports={
     age:20
 }

b.js

const b=require('../模組化/a');
console.log(b);

在這裡插入圖片描述
你可以發現最終輸出的是module.exports的值

3:系統模組

什麼是系統模組

Node執行環境提供的APl.因為這些API都是以模組化的方式進行開發的,所以我們又稱Node執行環境提供的API為系統模組

在這裡插入圖片描述
系統模組fs檔案操作

f:file檔案,s:system系統,檔案作業系統。

 (1)讀取檔案內容  
		fs.reaFile('檔案路徑/檔名稱'[,'檔案編碼’],ca1lback);  
		ca1lback是一個回撥函式

例 readfile.js

//系統模組
const fs=require('fs');
//通過readFile讀取檔案內容
fs.readFile('./a.js','utf8',(err,doc) =>{
    console.log(err);
    console.log(doc);
})

讀取過程是硬碟讀取 err是錯誤資訊,doc是檔案讀取的內容
在這裡插入圖片描述
執行你可以發現它將a.js的內容讀取下來了

(1)寫入檔案內容
fs.writeFile('檔案路徑/檔名稱‘,’資料’,callback);;
ca1lback是一個回撥函式

例:wirefile.js

const fs=require('fs');
fs.writeFile('./doex.txt','插入的資料',err =>{
    if(err!=null){
        console.log('有錯誤');
    }
    console.log('插入成功');
})

在這裡插入圖片描述
在這裡插入圖片描述
執行你可以發現插入成功了,doex.txt裡面也有插入的資料

系統模組path 路徑操作

為什麼要進行路徑拼接?

  • 不同作業系統的路徑分隔符不統一
  • /public/uploads/avatar
  • Windows上是\ /
  • Linux上是/

路徑拼接語法:path.join(路徑’,路徑,…)

//比如拼接//public/uploads/avater目錄
const path=require('path');
const pj=path.join('public','uploads','avater');
console.log(pj);

在這裡插入圖片描述
相對路徑VS絕對路徑

  • 大多數情況下使用絕對路徑,因為相對路徑有時候相對的是命令列工具的當前工作目錄

  • 在讀取檔案或者設定檔案路徑時都會選擇絕對路徑

  • 使用dirname獲取當前檔案所在的絕對路徑