const fs = require('fs');
const path = require('path');
//検索範囲のディレクトリ
let _dir = __dirname ;
_dir = _dir.replace(/\/apps/g, "");
//インクルードファイルの設置ディレクトリ
const incFolder = 'include'
const _incdir = _dir + '/' + incFolder ;
//変数定義
let incFile ="";
let incfileList = [];
let fileList = [];
let changePath = "";
//インクルードファイルの設置ディレクトリにあるファイル検索
incfiles = fs.readdirSync(_incdir);
incfiles.filter(function(incfile){
return fs.statSync(_incdir + "/" + incfile).isFile() && /.*\.html$/.test(incfile);
}).forEach(function (incfile) {
incfileList.push(incfile);
});
//下層フォルダ含めhtmlファイル検索
let searchFile = function(path, fileCallback){
files = fs.readdirSync(path);
files.forEach(function(file){
let _f = path + "/" + file;
//インクルードファイルの設置ディレクトリと/node_modules/ディレクトリは除外 その他除外したいディレクトリがある場合は条件追加
if( ~_f.indexOf('/'+ incFolder +'/') || ~_f.indexOf('/node_modules/')){
}else if(fs.statSync(_f).isDirectory()){
searchFile(_f, fileCallback);
}else{
if(~_f.indexOf('.html')){//htmlファイルしか修正しないように絞り込み
fileCallback(_f);
}
}
});
}
searchFile(_dir,function(path){
re = new RegExp(__dirname, "g");
path = path.replace(re, "");
fileList.push(path);
});
//インクルードファイルの設置ディレクトリにあるファイル数
const incfileListLength = incfileList.length;
//htmlファイルの数
const fileListLength = fileList.length;
for( let i = 0 ; i < incfileListLength; i++){
//インクルードファイルの設置ディレクトリにあるi番目のファイル名をincFileに格納
incFile = incfileList[i];
for( let j = 0 ; j < fileListLength; j++){
//インクルードファイルの設置フォルダにあるi番目のファイルの中身をincDataに格納、incDataのリセット
let incData = fs.readFileSync(_incdir + "/" + incFile,'utf-8');
//j番目のhtmlファイル名をchangeFileに格納
let changeFile = fileList[j];
//j番目のhtmlファイルの中身をchangeFileDataに格納
let changeFileData = fs.readFileSync(changeFile,'utf-8');
//incDataの「../」を「changePathKari」に変換
incData = incData.replace(/\.\.\//g, 'changePathKari');
//j番目のhtmlファイルのパスをfilePathに格納
let filePath = path.dirname(changeFile);
//検索範囲ディレクトリをrootとしたときのj番目のhtmlファイルのファイルパスに変換
filePath = filePath.replace(_dir,"");
//検索範囲ディレクトリをrootとしたとき、j番目のhtmlファイルがどれくらいの下の階層にいるか判定
let hierarchySize = (filePath.match(/\//g)||[]).length;
//changePathリセット
changePath = "";
//changePath生成
if( hierarchySize == 0 ){
changePath = "./";
}else{
for( let k = 0 ; k < hierarchySize ; k++ ){
changePath = changePath + "../";
}
}
//changePathKariをchangePathに変更
incData = incData.replace(/changePathKari/g,changePath);
//書き換えの箇所の始まり「<!-- incFile -->」
let startStr = '<!-- '+ incFile +' -->';
//書き換えの箇所の終わり「<!-- end incFile -->」
let endStr = '<!-- end '+ incFile +' -->';
//書き換えhtmlの作成
let replaceData = startStr + '\n' + incData + '\n' + endStr;
let conditions = '\s\S';
re = new RegExp(startStr +'[\\s\\S]*?' + endStr, "g");
//j番目のhtmlファイルの「<!-- incFile -->」〜「<!-- end incFile -->」をincDataに中身に書き換え
changeFileData = changeFileData.replace(re, replaceData);
fs.writeFileSync(changeFile, changeFileData);
}
}
content_copy
コードをクリップボードにコピー