fs 模塊
主要是提供一些操做 磁盤文件 的 api,基本上構建工具 都要用到 fs
去對文件進行 讀 和 寫。javascript
fs 模塊
咋一看文檔,api賊多,簡直沒法直視。java
而後再看一下,發現其實能夠一分爲二,api大都分爲同步的和異步的,這樣分析就會以爲好多了。node
因而乎,半抄半寫的作了個 json 文件合併的小demo,功能就是讀取指定目錄下的 json 文件,而後寫到同一個 json 文件裏面去。shell
新建一個工做目錄,進入到 工做目錄後 npm init -y
, 而後在目錄下新建一個名字爲 json
的文件夾,放幾個json文件進去。npm
再在工做目錄新建一個 index.js
, 代碼以下:json
const fs = require('fs');
const path = require('path');
const exists = filePath => fs.existsSync(filePath);
// 獲取 命令行傳入的 json 目錄
const jsonPath = process.argv[2];
if (!jsonPath) {
console.log('未傳入json目錄');
process.exit(1);
}
const rootPath = path.join(process.cwd(), jsonPath);
const newFilePath = './data.json';
// 遍歷目錄下的 json 文件
function walkJsonFile(dirPath) {
const files = fs.readdirSync(dirPath);
const result = [];
files.forEach(file => {
const filePath = `${dirPath}/${file}`;
const stat = fs.statSync(filePath);
if ( stat.isFile() && (/\.json$/).test(file) ) {
result.push(filePath);
}
});
return result;
}
// 合併 json 文件內容 到 newJson 文件夾
function mergeJsonFile() {
const files = walkJsonFile(rootPath);
if (!files.length) process.exit(2);
const data = files
.filter(exists)
.reduce((total, file) => {
const fileData = fs.readFileSync(file);
// 獲取文件名稱
const baseName = path.basename(file, '.json');
let fileJson
try {
fileJson = JSON.parse(fileData);
} catch (err) {
console.log(err);
}
total[baseName] = fileJson;
// 若是不想區分 baseName, 直接合並便可
// total = { ...total, ...fileJson };
return total;
}, {});
fs.writeFileSync(newFilePath, JSON.stringify(data, null, 2));
}
mergeJsonFile();
複製代碼
在工做目錄下運行api
node index.js json
複製代碼
就能夠看到代碼被合併到新文件中了。異步
效果如圖:工具
參考ui