JSONファイルを書き換える
nodeは手軽に使えるので、今までシェルスクリプトでやってたようなツール系の処理を書くのに便利なのですが、意外と同じような処理を調べ直すことが多かったので、自分のメモ用に書いておきます。
jsonファイルを書き換えるサンプル
jsonファイルとして、config.default.json
ファイルが
{
"debug" : true
}
みたなものがあったとして、これをfalseに書き換えて、config.json
として保存するコードは
次のようになる。
var fs = require('fs');
var path = require('path');
var config = JSON.parse(
fs.readFileSync(
path.resolve( __dirname , "config.default.json" )
)
);
var env = process.argv[2];
if (env == "release") {
config.debug = false;
} else {
config.debug = true;
}
fs.writeFileSync(
path.resolve( __dirname , "config.json" ),
JSON.stringify(config,null,' '),
"utf-8"
);
このコードをdeploy_config.js
とすると、呼び出し方は
node deploy_config.js release
debug
の値をtrueのままdeployしたい場合は
node deploy_config.js debug
とすればOK
JSON.stringifyと、readFileSync/writeFileSyncの使い方を毎回調べてるので、まとめました。
ファイルのタイムスタンプを比較してコピー
ついでに、ファイルのタイムスタンプを調べて、新しければコピーするコード。
ただし、プレースフォルダで書き換えも行う
今、srcDirとdestDirがあるとして、srcDir内のテキストファイルで新しいものがあれば、destDirにコピーする
また、プレースフォルダで、テキスト内に%%%ADMIN_MAIL%%%
、###DEBUG_MODE%%%
があれば、それぞれadmin_mail、config.debugに変換する。
fs.readdirSync(srcDir).forEach( file => {
var srcFile = path.join(srcDir,file);
var destFile = path.join(destDir,file);
var srcStat = fs.statSync(srcFile);
var srcMtime = srcStat.mtime;
var destStat = fs.statSync(destFile);
var destMtime = destStat.mtime;
if (srcMtime.getTime() > destMtime.getTime()) {
var text = fs.readFileSync(srcFile,'utf-8');
text = text.replace('%%%ADMIN_MAIL%%%',admin_mail);
text = text.replace('%%%DEBUG_MODE%%%',config.debug);
fs.writeFileSync(destFile,text,'utf-8');
console.log( "copy " + srcFile + " => " + destFile );
} else {
console.log( "skip " + srcFile + " => " + destFile );
}
});
fs.statSyncで取得した更新日時(mtime)は、Dateオブジェクトなので、getTime()で
UNIXタイムスタンプを取得出来るので、それを比較している。