本篇文章帶大家深入了解Node中的模塊化、文件系統(tǒng)與環(huán)境變量,有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。
一、Node.js模塊化
1.0、變量作用域
(1)、在瀏覽器端使用var或不使用關鍵字定義的變量屬于全局作用域,也就是可以使用window對象訪問。【相關教程推薦:nodejs視頻教程、編程教學】
<script> var a = 100; (function () { b = 200; })(); console.log(window.a, a); console.log(window.b, b); </script>
登錄后復制
結果:
(2)、在Node.js中沒有window對象
(3)、在Node.js的交互環(huán)境下,定義的變量屬于global,global是類似瀏覽器端的window對象
(4)、在模塊中(文件中)有global對象,使用關鍵字var,let,const定義的成員不屬于global對象,僅在當前模塊中有效,而不使用關鍵字定義的對象屬于global對象。
var a=100; b=200; let c=300; const d=400; console.log(global); console.log(global.a); console.log(global.b); console.log(global.c); console.log(global.d);
登錄后復制
終端輸出:
1.1、模塊概要
早期的javascript版本沒有塊級作用域、沒有類、沒有包、也沒有模塊,這樣會帶來一些問題,如復用、依賴、沖突、代碼組織混亂等,隨著前端的膨脹,模塊化顯得非常迫切。
前端模塊化規(guī)范如下:
常見的的JavaScript模塊規(guī)范有:CommonJS、AMD、CMD、UMD、原生模塊化。
雖然我們學習過ES6的模塊化但是ES6與NodeJS使用不同的模塊化規(guī)范,單獨學習NodeJS的模塊化非常有必要。
模塊化是指解決一個復雜問題時,自頂向下逐層把系統(tǒng)劃分成若干模塊的過程。對于整個系統(tǒng)來說,模塊是可組合、分解和更換 的單元。
JavaScript在早期的設計中就沒有模塊、包、類的概念,開發(fā)者需要模擬出類似的功能,來隔離、組織復雜的JavaScript代碼,我們稱為模塊化。
模塊就是一個實現(xiàn)特定功能的文件,有了模塊我們就可以更方便的使用別人的代碼,要用什么功能就加載什么模塊。
模塊化開發(fā)的四點好處:
?。?)、 避免變量污染,命名沖突
?。?)、提高代碼復用率
?。?)、提高了可維護性
?。?)、方便依賴關系管理
nodejs中根據(jù)模塊的來源不同,將模塊分為了3大類,分別是:
- 內置模塊(內置模塊是由Node.js官方提供的,例如fs、path、http等)
- 自定義模塊 (用戶創(chuàng)建的每個 .js文件,都是自定義模塊)
- 第三方模塊 (由第三方開發(fā)出來的模塊,并非官方提供的內置模塊,也不是用戶創(chuàng)建的自定義模塊,使用前需要先下載)
模塊作用域。
和函數(shù)作用域類似,在自定義模塊中定義的變量、方法等成員,只能在當前模塊內被訪問,這種模塊級別的訪問限制,叫做模塊作用域。
模塊作用域的好處:防止了全局變量污染的問題
1.2、CommonJS
CommonJS就是一個JavaScript模塊化的規(guī)范,該規(guī)范最初是用在服務器端NodeJS中,前端的webpack也是對CommonJS原生支持的。
根據(jù)這個規(guī)范
(1)、每一個文件就是一個模塊,其內部定義的變量是屬于這個模塊的,不會對外暴露,也就是說不會污染全局變量。
(2)、導入自定義的模塊時路徑需要以./或../開始,同一路徑下也不能省略。
(3)、如果反復多次require模塊,只加載一次。
(4)、require引入模塊時,后綴名.js可以省略
(5)、每個模塊文件都是一個獨立的函數(shù)級作用域,在其它模塊中不能直接訪問
m1.js:
console.log("這是模塊m1"); let a=100; b=200;
登錄后復制
m2.js
var m11=require("./m1"); console.log(a); console.log(b);
登錄后復制
結果:
從上面的示例可以看出a在模塊2中是訪問不到的,模塊其實就是一個封閉的函數(shù):
m1.js的代碼如下:
console.log("這是模塊m1"); let a=100; b=200; //輸出當前函數(shù) console.log(arguments.callee+"");
登錄后復制
實際輸出結果:
function (exports, require, module, __filename, __dirname) { console.log("這是模塊m1"); let a=100; b=200; //輸出當前函數(shù) console.log(arguments.callee+""); }
登錄后復制
(6)、每個模塊中都包含如下5個對象:
exports:導出對象,默認為{}
require:導入函數(shù),使用該函數(shù)可以實現(xiàn)模塊的依賴
module:模塊信息,用于記錄當前模塊的所有信息
__filename:當前模塊的文件全路徑,含文件名
__dirname:當前模塊的文件路徑不含文件名
(7)、使用exports或module.exports對象可以將當前模塊中需要導出的內容暴露出去。
m1.js
let a=100; let b=()=>{ return 200; }; exports.a=a; exports.b=b;
登錄后復制
m2.js
const m1=require("./m1"); console.log(m1); console.log(m1.a); console.log(m1.b());
登錄后復制
結果:
(8)、導入模塊內容可以結合結構語法
m1.js
exports.a=100; exports.b=function(){ return 200; };
登錄后復制
m2.js
const {a,b:fun}=require("./m1"); console.log(a); console.log(fun());
登錄后復制
結果:
1.3、NodeJS中使用CommonJS模塊管理
CommonJS的核心思想就是通過 require 方法來同步加載所要依賴的其他模塊,然后通過 exports 或者 module.exports 來導出需要暴露的接口。
CommonJS API編寫應用程序,然后這些應用可以運行在不同的JavaScript解釋器和不同的主機環(huán)境中。
2009年,美國程序員Ryan Dahl創(chuàng)造了node.js項目,將javascript語言用于服務器端編程。這標志"Javascript模塊化編程"正式誕生。因為老實說,在瀏覽器環(huán)境下,以前沒有模塊也不是特別大的問題,畢竟網(wǎng)頁程序的復雜性有限;但是在服務器端,一定要有模塊,與操作系統(tǒng)和其他應用程序互動,否則根本沒法編程。NodeJS是CommonJS規(guī)范的實現(xiàn),webpack 也是以CommonJS的形式來書寫。
CommonJS定義的模塊分為:{模塊引用(require)} {模塊定義(exports)} {模塊標識(module)} //require()用來引入外部模塊; //exports對象用于導出當前模塊的方法或變量,唯一的導出口; //module對象就代表模塊本身。
登錄后復制
Nodejs的模塊是基于CommonJS規(guī)范實現(xiàn)的,通過轉換也可以運行在瀏覽器端。
特點:
1.3.1、模塊定義
根據(jù)commonJS規(guī)范,一個單獨的文件是一個模塊,每一個模塊都是一個單獨的作用域,也就是說,在該模塊內部定義的變量,無法被其他模塊讀取,除非為global對象的屬性。
模塊擁有像函數(shù)一樣的函數(shù)級作用域:
-
每個模塊內部,module變量代表當前模塊
-
module變量是一個對象,它的exports屬性(即module.exports)是對外的接口
-
加載某個模塊,其實是加載該模塊的module.exports屬性。require()方法用于加載模塊。
模塊只有一個出口,module.exports對象,我們需要把模塊希望輸出的內容放入該對象。
mathLib.js模塊定義
var message="Hello CommonJS!"; module.exports.message=message; module.exports.add=(m,n)=>console.log(m+n);
登錄后復制
在 Node.js 中,創(chuàng)建一個模塊非常簡單,如下我們創(chuàng)建一個 'main.js' 文件,代碼如下:
var hello = require('./hello'); hello.world();
登錄后復制
以上實例中,代碼 require('./hello') 引入了當前目錄下的hello.js文件(./ 為當前目錄,node.js默認后綴為js)。
Node.js 提供了exports 和 require 兩個對象,其中 exports 是模塊公開的接口,require 用于從外部獲取一個模塊的接口,即所獲取模塊的 exports 對象。
接下來我們就來創(chuàng)建hello.js文件,代碼如下:
exports.world = function() { console.log('Hello World'); }
登錄后復制
在以上示例中,hello.js 通過 exports 對象把 world 作為模塊的訪 問接口,在 main.js 中通過 require('./hello') 加載這個模塊,然后就可以直接訪 問main.js 中 exports 對象的成員函數(shù)了。
有時候我們只是想把一個對象封裝到模塊中,格式如下:
module.exports = function() { // ...}
登錄后復制
例如:
//hello.js function Hello() { varname; this.setName = function(thyName) { name = thyName; }; this.sayHello = function() { console.log('Hello ' + name); }; }; module.exports = Hello;
登錄后復制
這樣就可以直接獲得這個對象了:
//main.js var Hello = require('./hello'); hello = new Hello(); hello.setName('BYVoid'); hello.sayHello();
登錄后復制
模塊接口的唯一變化是使用 module.exports = Hello 代替了exports.world = function(){}。 在外部引用該模塊時,其接口對象就是要輸出的 Hello 對象本身,而不是原先的 exports。
1.3.2、模塊依賴
加載模塊用require方法,該方法讀取一個文件并且執(zhí)行,返回文件內部的module.exports對象。
在用require加載自定義模塊期間,可以省略.js這個后綴名。
myApp.js 模塊依賴
var math=require('./mathLib'); console.log(math.message); math.add(333,888);
登錄后復制
3、測試運行
安裝好node.JS
打開控制臺,可以使用cmd命令,也可以直接在開發(fā)工具中訪問
運行
1.3.3、內置模塊加載
也許你已經(jīng)注意到,我們已經(jīng)在代碼中使用了模塊了。像這樣:
var http = require("http"); ... http.createServer(...);
登錄后復制
Node.js中自帶了一個叫做"http"的模塊,我們在我們的代碼中請求它并把返回值賦給一個本地變量。
這把我們的本地變量變成了一個擁有所有 http 模塊所提供的公共方法的對象。
Node.js 的 require方法中的文件查找策略如下:
由于Node.js中存在4類模塊(原生模塊和3種文件模塊),盡管require方法極其簡單,但是內部的加載卻是十分復雜的,其加載優(yōu)先級也各自不同。如下圖所示:
從文件模塊緩存中加載
盡管原生模塊與文件模塊的優(yōu)先級不同,但是都不會優(yōu)先于從文件模塊的緩存中加載已經(jīng)存在的模塊。
從原生模塊加載
原生模塊的優(yōu)先級僅次于文件模塊緩存的優(yōu)先級。require方法在解析文件名之后,優(yōu)先檢查模塊是否在原生模塊列表中。以http模塊為例,盡管在目錄下存在一個http/http.js/http.node/http.json文件,require("http")都不會從這些文件中加載,而是從原生模塊中加載。
原生模塊也有一個緩存區(qū),同樣也是優(yōu)先從緩存區(qū)加載。如果緩存區(qū)沒有被加載過,則調用原生模塊的加載方式進行加載和執(zhí)行。
從文件加載
當文件模塊緩存中不存在,而且不是原生模塊的時候,Node.js會解析require方法傳入的參數(shù),并從文件系統(tǒng)中加載實際的文件,加載過程中的包裝和編譯細節(jié)在前一節(jié)中已經(jīng)介紹過,這里我們將詳細描述查找文件模塊的過程,其中,也有一些細節(jié)值得知曉。
require方法接受以下幾種參數(shù)的傳遞:
- http、fs、path等,原生模塊。
- ./mod或../mod,相對路徑的文件模塊。
- /pathtomodule/mod,絕對路徑的文件模塊。
- mod,非原生模塊的文件模塊。
node_modules文件夾用來存放所有已安裝到項目中的包。require()導入第三方包時,就是從這個目錄中查找并加載包。
package-lock.json配置文件用來記錄node_modules目錄下的每一個包的下載信息,例如包的名字、版本號、下載地址等。
注意:不要手動修改node_modules或package-lock.json文件中的任何代碼,npm包管理工具會自動維護它們。
1.3.4、module對象
在每個.js自定義模塊中都有一個module對象,它里面存儲了和當前模塊有關的信息
每個模塊內部,module變量代表當前模塊
module變量是一個對象,它的exports屬性(即module.exports)是對外的接口
加載某個模塊,其實是加載該模塊的module.exports屬性。require()方法用于加載模塊。
二、Node.js 文件系統(tǒng)
Node.js 提供一組類似 UNIX(POSIX)標準的文件操作API。 Node 導入文件系統(tǒng)模塊(fs)語法如下所示:
var fs = require("fs")
2.1、異步和同步
Node.js 文件系統(tǒng)(fs 模塊)模塊中的方法均有異步和同步版本,例如讀取文件內容的函數(shù)有異步的 fs.readFile() 和同步的 fs.readFileSync()。
異步的方法函數(shù)最后一個參數(shù)為回調函數(shù),回調函數(shù)的第一個參數(shù)包含了錯誤信息(error)。
建議大家是用異步方法,比起同步,異步方法性能更高,速度更快,而且沒有阻塞。
實例
創(chuàng)建 input.txt 文件,內容如下:
foo
創(chuàng)建 filereaddemo.js 文件, 代碼如下:
const fs=require("fs"); //依賴內置模塊fs,用于文件管理 //異步讀取文件students.txt,設置讀取成功時的回調函數(shù),err表示錯誤信息,data表示數(shù)據(jù) fs.readFile("students.txt",function(err,data){ if(err) throw err; console.log("異步:"+data+""); }); console.log("---------------"); //同步讀取 let data=fs.readFileSync("students.txt"); console.log("同步:"+data+"");
登錄后復制
以上代碼執(zhí)行結果如下:
接下來,讓我們來具體了解下 Node.js 文件系統(tǒng)的方法。
2.2、獲取文件信息
以下為通過異步模式獲取文件信息的語法格式:
fs.stat(path, callback)
參數(shù)使用說明如下:
-
path – 文件路徑。
-
callback – 回調函數(shù),帶有兩個參數(shù)如:(err, stats), stats 是 fs.Stats 對象。
fs.stat(path)執(zhí)行后,會將stats類的實例返回給其回調函數(shù)??梢酝ㄟ^stats類中的提供方法判斷文件的相關屬性。例如判斷是否為文件:
const fs=require("fs"); fs.stat("students.txt",(err,stats)=>{ console.log("是文件嗎?"+stats.isFile()); console.log("是目錄嗎?"+stats.isDirectory()); console.log(stats); });
登錄后復制
結果:
stats類中的方法有:
方法 | 描述 |
---|---|
stats.isFile() | 如果是文件返回 true,否則返回 false。 |
stats.isDirectory() | 如果是目錄返回 true,否則返回 false。 |
stats.isBlockDevice() | 如果是塊設備返回 true,否則返回 false。 |
stats.isCharacterDevice() | 如果是字符設備返回 true,否則返回 false。 |
stats.isSymbolicLink() | 如果是軟鏈接返回 true,否則返回 false。 |
stats.isFIFO() | 如果是FIFO,返回true,否則返回 false。FIFO是UNIX中的一種特殊類型的命令管道。 |
stats.isSocket() | 如果是 Socket 返回 true,否則返回 false。 |
接下來我們創(chuàng)建 file.js 文件,代碼如下所示:
var fs = require("fs"); console.log("準備打開文件!"); fs.stat('input.txt', function (err, stats) { if (err) { return console.error(err); } console.log(stats); console.log("讀取文件信息成功!"); // 檢測文件類型 console.log("是否為文件(isFile) ? " + stats.isFile()); console.log("是否為目錄(isDirectory) ? " + stats.isDirectory()); });
以上代碼執(zhí)行結果如下:
$ node file.js 準備打開文件! { dev: 16777220, mode: 33188, nlink: 1, uid: 501, gid: 20, rdev: 0, blksize: 4096, ino: 40333161, size: 61, blocks: 8, atime: Mon Sep 07 2015 17:43:55 GMT+0800 (CST), mtime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST), ctime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST) } 讀取文件信息成功! 是否為文件(isFile) ? true 是否為目錄(isDirectory) ? false
2.3、寫入文件
以下為異步模式下寫入文件的語法格式:
fs.writeFile(filename, data[, options], callback)
如果文件存在,該方法寫入的內容會覆蓋舊的文件內容。
參數(shù)使用說明如下:
-
path – 文件路徑。
-
data – 要寫入文件的數(shù)據(jù),可以是 String(字符串) 或 Buffer(流) 對象。
-
options – 該參數(shù)是一個對象,包含 {encoding, mode, flag}。默認編碼為 utf8, 模式為 0666 , flag 為 'w'
-
callback – 回調函數(shù),回調函數(shù)只包含錯誤信息參數(shù)(err),在寫入失敗時返回。
接下來我們創(chuàng)建 file.js 文件,代碼如下所示:
const fs=require("fs"); fs.writeFile("output1.txt","異步hello","utf-8",function(err){ if(!err){ console.log("異步文件寫入成功!"); } else{ throw err; } }); console.log("---------------"); fs.writeFileSync("output2.txt","同步hello","utf-8"); console.log("同步文件寫入成功");
登錄后復制
以上代碼執(zhí)行結果如下:
2.4、刪除文件
以下為刪除文件的語法格式:
fs.unlink(path, callback)
參數(shù)使用說明如下:
-
path – 文件路徑。
-
callback – 回調函數(shù),沒有參數(shù)。
接下來我們創(chuàng)建 file.js 文件,代碼如下所示:
const fs=require("fs"); fs.unlink("output1.txt",function(err){ if(err){ throw err; } else{ console.log("異步刪除文件成功!"); } }); console.log("--------------------"); fs.unlinkSync("output2.txt"); console.log("同步刪除文件成功!");
登錄后復制
以上代碼執(zhí)行結果如下:
2.5、創(chuàng)建目錄
以下為創(chuàng)建目錄的語法格式:
fs.mkdir(path[, mode], callback)
參數(shù)使用說明如下:
-
path – 文件路徑。
-
mode – 設置目錄權限,默認為 0777。
-
callback – 回調函數(shù),沒有參數(shù)。
接下來我們創(chuàng)建mkdirfile.js 文件,代碼如下所示:
const fs=require("fs"); fs.mkdir("dir1",function(err){ if(err){ throw err; } else{ console.log("異步創(chuàng)建目錄成功!"); } }); console.log("---------------------"); fs.mkdirSync("dir2"); console.log("同步創(chuàng)建目錄成功!");
登錄后復制
以上代碼執(zhí)行結果如下:
2.6、讀取目錄
以下為讀取目錄的語法格式:
fs.readdir(path, callback)
參數(shù)使用說明如下:
-
path – 文件路徑。
-
callback – 回調函數(shù),回調函數(shù)帶有兩個參數(shù)err, files,err 為錯誤信息,files 為 目錄下的文件數(shù)組列表。
接下來我們創(chuàng)建 file.js 文件,代碼如下所示:
const fs=require("fs"); fs.readdir("dir1",(err,files)=>{ if(err) {throw err;} else{ console.log("異步獲取目錄下的文件成功!"); files.forEach(file=>console.log(file)); } }); console.log("-----------------------"); let files=fs.readdirSync("dir2"); console.log("同步獲取目錄下的文件成功!"); files.forEach(file=>console.log(file));
登錄后復制
以上代碼執(zhí)行結果如下:
2.7、刪除目錄
以下為刪除目錄的語法格式:
fs.rmdir(path, callback)
參數(shù)使用說明如下:
-
path – 文件路徑。
-
callback – 回調函數(shù),沒有參數(shù)。
接下來我們創(chuàng)建 file.js 文件,代碼如下所示:
var fs = require("fs"); console.log("準備刪除目錄 /tmp/test"); fs.rmdir("/tmp/test",function(err){ if (err) { return console.error(err); } console.log("讀取 /tmp 目錄"); fs.readdir("/tmp/",function(err, files){ if (err) { return console.error(err); } files.forEach( function (file){ console.log( file ); }); }); });
登錄后復制
以上代碼執(zhí)行結果如下:
$ node file.js 準備刪除目錄 /tmp/test input.out output.out test test.txt 讀取 /tmp 目錄 ……
2.8、文件模塊方法參考手冊
以下為 Node.js 文件模塊相同的方法列表:
方法 | 描述 |
---|---|
fs.rename(oldPath, newPath, callback) | 異步 rename().回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.ftruncate(fd, len, callback) | 異步 ftruncate().回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.ftruncateSync(fd, len) | 同步 ftruncate() |
fs.truncate(path, len, callback) | 異步 truncate().回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.truncateSync(path, len) | 同步 truncate() |
fs.chown(path, uid, gid, callback) | 異步 chown().回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.chownSync(path, uid, gid) | 同步 chown() |
fs.fchown(fd, uid, gid, callback) | 異步 fchown().回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.fchownSync(fd, uid, gid) | 同步 fchown() |
fs.lchown(path, uid, gid, callback) | 異步 lchown().回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.lchownSync(path, uid, gid) | 同步 lchown() |
fs.chmod(path, mode, callback) | 異步 chmod().回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.chmodSync(path, mode) | 同步 chmod(). |
fs.fchmod(fd, mode, callback) | 異步 fchmod().回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.fchmodSync(fd, mode) | 同步 fchmod(). |
fs.lchmod(path, mode, callback) | 異步 lchmod().回調函數(shù)沒有參數(shù),但可能拋出異常。Only available on Mac OS X. |
fs.lchmodSync(path, mode) | 同步 lchmod(). |
fs.stat(path, callback) | 異步 stat(). 回調函數(shù)有兩個參數(shù) err, stats,stats 是 fs.Stats 對象。 |
fs.lstat(path, callback) | 異步 lstat(). 回調函數(shù)有兩個參數(shù) err, stats,stats 是 fs.Stats 對象。 |
fs.fstat(fd, callback) | 異步 fstat(). 回調函數(shù)有兩個參數(shù) err, stats,stats 是 fs.Stats 對象。 |
fs.statSync(path) | 同步 stat(). 返回 fs.Stats 的實例。 |
fs.lstatSync(path) | 同步 lstat(). 返回 fs.Stats 的實例。 |
fs.fstatSync(fd) | 同步 fstat(). 返回 fs.Stats 的實例。 |
fs.link(srcpath, dstpath, callback) | 異步 link().回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.linkSync(srcpath, dstpath) | 同步 link(). |
fs.symlink(srcpath, dstpath[, type], callback) | 異步 symlink().回調函數(shù)沒有參數(shù),但可能拋出異常。 type 參數(shù)可以設置為 'dir', 'file', 或 'junction' (默認為 'file') 。 |
fs.symlinkSync(srcpath, dstpath[, type]) | 同步 symlink(). |
fs.readlink(path, callback) | 異步 readlink(). 回調函數(shù)有兩個參數(shù) err, linkString。 |
fs.realpath(path[, cache], callback) | 異步 realpath(). 回調函數(shù)有兩個參數(shù) err, resolvedPath。 |
fs.realpathSync(path[, cache]) | 同步 realpath()。返回絕對路徑。 |
fs.unlink(path, callback) | 異步 unlink().回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.unlinkSync(path) | 同步 unlink(). |
fs.rmdir(path, callback) | 異步 rmdir().回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.rmdirSync(path) | 同步 rmdir(). |
fs.mkdir(path[, mode], callback) | S異步 mkdir(2).回調函數(shù)沒有參數(shù),但可能拋出異常。 mode defaults to 0777. |
fs.mkdirSync(path[, mode]) | 同步 mkdir(). |
fs.readdir(path, callback) | 異步 readdir(3). 讀取目錄的內容。 |
fs.readdirSync(path) | 同步 readdir().返回文件數(shù)組列表。 |
fs.close(fd, callback) | 異步 close().回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.closeSync(fd) | 同步 close(). |
fs.open(path, flags[, mode], callback) | 異步打開文件。 |
fs.openSync(path, flags[, mode]) | 同步 version of fs.open(). |
fs.utimes(path, atime, mtime, callback) | ? |
fs.utimesSync(path, atime, mtime) | 修改文件時間戳,文件通過指定的文件路徑。 |
fs.futimes(fd, atime, mtime, callback) | ? |
fs.futimesSync(fd, atime, mtime) | 修改文件時間戳,通過文件描述符指定。 |
fs.fsync(fd, callback) | 異步 fsync.回調函數(shù)沒有參數(shù),但可能拋出異常。 |
fs.fsyncSync(fd) | 同步 fsync. |
fs.write(fd, buffer, offset, length[, position], callback) | 將緩沖區(qū)內容寫入到通過文件描述符指定的文件。 |
fs.write(fd, data[, position[, encoding]], callback) | 通過文件描述符 fd 寫入文件內容。 |
fs.writeSync(fd, buffer, offset, length[, position]) | 同步版的 fs.write()。 |
fs.writeSync(fd, data[, position[, encoding]]) | 同步版的 fs.write(). |
fs.read(fd, buffer, offset, length, position, callback) | 通過文件描述符 fd 讀取文件內容。 |
fs.readSync(fd, buffer, offset, length, position) | 同步版的 fs.read. |
fs.readFile(filename[, options], callback) | 異步讀取文件內容。 |
fs.readFileSync(filename[, options]) | |
fs.writeFile(filename, data[, options], callback) | 異步寫入文件內容。 |
fs.writeFileSync(filename, data[, options]) | 同步版的 fs.writeFile。 |
fs.appendFile(filename, data[, options], callback) | 異步追加文件內容。 |
fs.appendFileSync(filename, data[, options]) | The 同步 version of fs.appendFile. |
fs.watchFile(filename[, options], listener) | 查看文件的修改。 |
fs.unwatchFile(filename[, listener]) | 停止查看 filename 的修改。 |
fs.watch(filename[, options][, listener]) | 查看 filename 的修改,filename 可以是文件或目錄。返回 fs.FSWatcher 對象。 |
fs.exists(path, callback) | 檢測給定的路徑是否存在。 |
fs.existsSync(path) | 同步版的 fs.exists. |
fs.access(path[, mode], callback) | 測試指定路徑用戶權限。 |
fs.accessSync(path[, mode]) | 同步版的 fs.access。 |
fs.createReadStream(path[, options]) | 返回ReadStream 對象。 |
fs.createWriteStream(path[, options]) | 返回 WriteStream 對象。 |
fs.symlink(srcpath, dstpath[, type], callback) | 異步 symlink().回調函數(shù)沒有參數(shù),但可能拋出異常。 |