Node[2] -- NODE中關於檔案的操作 fs模組的使用
阿新 • • 發佈:2019-01-24
參考張大神的這篇文章
主要使用的是node中的fs檔案系統的模組
1 圖片批量重新命名
var fs = require("fs");
var src = 'D:\Testing/img';
//路徑寫了半天不對,原來是這麼寫的,如果進入的是子檔案,要用反斜線
如果是一個,可以直接使用 var src = 'D:\images';
fs.readdir(src, function(err, files) {
files.forEach(function(filename) {
var oldPath = src + '/' + filename,
newPath = src + '/myImg_' + filename;
fs.rename(oldPath, newPath, function(err) {
if (!err) {
console.log(filename + '圖片改名成功!');
}
})
});
});
嘗試按照檔名稱重新排序
var fs = require("fs");
var src = 'D:\Testing/img';
fs.readdir(src, function(err, files) {
files.forEach (function(filename,index) {
var imgEnd = filename.split(".");
var oldPath = src + '/' + filename,
newPath = src + '/myImgs_' + index + "."+ imgEnd[1];
fs.rename(oldPath, newPath, function(err) {
if (!err) {
console.log(filename + '圖片改名成功!' );
}
})
});
});
效果如下
解析:
node 中的 fs 模組是處理關於檔案的
其中的fs.readdir方法 用來讀取檔案目錄
fa.readdir(' 檔案路徑 ',function(err,file){
if(err){
console.log(err)
}else{
console.log(file)
}
//files是一個包含 “ 指定目錄下所有檔名稱的” 陣列
})
fs.rename 方法
用來修改檔名稱,可更改檔案的存放路徑。
參考例項
//同以目錄下的檔案更名:
var fs = require('fs');
fs.rename('125.txt','126.txt', function(err){
if(err){
throw err;
}
console.log('done!');
})
//不同路徑下的檔案更名 + 移動:(新的路徑必須已存在,路徑不存在會返回異常)
var fs = require('fs');
fs.rename('125.txt','new/126.txt', function(err){
if(err){
throw err;
}
console.log('done!');
})
2 node 分割靜態頁面
【經常寫靜態的福利】
程式碼在這裡就不在貼了,和張大神的一樣,需要注意的是
這個正則
/<link\srel="import"\shref="(.*)">/gi
對應頁面中查詢的是<link rel="import" href="header.html">
一個空格 而且末尾沒有斜槓
由於我I是一個亂敲空格的人【捂臉】,所以把這個正則改了
data.replace
(/<link\s+rel="import"\s+href="(.*)"\s*\/?>/gi, ...)
這樣對應的html文件應該是 ,哦,還加了一個斜槓
<link rel="import" href="header.html" />
然後就是注意這個檔案目錄問題,
需要組裝的字程式碼的檔案放在一個資料夾,但是與你要 NODE 的 import.js 不是同級關係
反正我是在這裡摔倒了
3 NODE靜態頁面分割擴充套件
因為需要控制的頁面不只一個,所以在這個部分就不太合適了,
這裡是只是寫了一個檔案。所以需要改動成,監控所有子靜態塊
於是用了一個 fs.readdir 去讀取資料夾中所有 html檔案
改動之後的import。js 內容如下
// 引入fs檔案處理模組
var fs = require("fs");
// 測試用的HTML頁資料夾地址和檔名稱
var src = 'import';
//這裡讀取所有的檔案出來
fs.readdir(src, function(err, files) {
files.forEach(function(filename,index) {
var filename = filename;
// 預設先執行一次
fnImportExample(src, filename);
// 監控檔案,變更後重新生成
fs.watch(src + '/' + filename, function(event, filename) {
if (event == 'change') {
console.log(src + '/' + filename + '發生了改變,重新生成...');
fnImportExample(src, filename);
}
});
});
});
var fnImportExample = function(src, filename) {
// 讀取HTML頁面資料
// 使用API文件中的fs.readFile(filename, [options], callback)
fs.readFile(src + '/' + filename, {
// 需要指定編碼方式,否則返回原生buffer
encoding: 'utf8'
}, function(err, data) {
// 下面要做的事情就是把
// <link rel="import" href="header.html">
// 這段HTML替換成href檔案中的內容
// 可以求助萬能的正則
var dataReplace = data.replace(/<link\srel="import"\shref="(.*)">/gi, function(matchs, m1) {
// m1就是匹配的路徑地址了
// 然後就可以讀檔案了
return fs.readFileSync(src + '/' + m1, {
encoding: 'utf8'
});
});
// 由於我們要把檔案放在更上一級目錄,因此,一些相對地址要處理下
// 在本例子中,就比較簡單,對../進行替換
dataReplace = dataReplace.replace(/"\.\.\//g, '"');
// 於是生成新的HTML檔案
// 文件找一找,發現了fs.writeFile(filename, data, [options], callback)
fs.writeFile(filename, dataReplace, {
encoding: 'utf8'
}, function(err) {
if (err) throw err;
console.log(filename + '生成成功!');
});
});
};
最近寫了一個檔案批量重新命名的包,發到npm上了