11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JSONファイルを書き換える

Last updated at Posted at 2017-12-30

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タイムスタンプを取得出来るので、それを比較している。

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?