msful
Version:
Web API server for micro service.
98 lines (88 loc) • 3.68 kB
JavaScript
// create msful project.
//
// プロジェクト名を指定した場合、そのプロジェクト名のフォルダを作成し
// その下に各フォルダをセットする.
module.exports.create = function (projectName) {
'use strict';
var out = function(n) {process.stdout.write(n);}
var constants = require("./constants");
var serverId = require("../lib/subs/serverId");
var fs = require('fs');
var htmlDir = constants.HTML_DIR.substring(2);
var apiDir = constants.API_DIR.substring(2);
var libDir = constants.LIB_DIR.substring(2);
var confDir = constants.CONF_DIR.substring(2);
var logDir = constants.LOG_DIR.substring(2);
// プロジェクト名が設定されている場合は、フォルダを作成して、
// その下にプロジェクトフォルダ構成を作成する.
var argvProjectNameFlag = false;
var baseDir = "./";
if(projectName != null && projectName != undefined) {
baseDir = "./" + projectName + "/" ;
try { fs.mkdirSync(baseDir); } catch(e) {}
argvProjectNameFlag = true;
} else {
// 現在のフォルダ名をプロジェクト名として取得.
var fullPath = require('path').resolve("./");
var p = fullPath.lastIndexOf("\\");
var pp = fullPath.lastIndexOf("/");
if(pp > p) {
p = pp;
}
if(p == -1) {
projectName = fullPath;
} else {
projectName = fullPath.substring(p+1);
}
}
// プロジェクトの雛形を作成.
try { fs.mkdirSync(baseDir + htmlDir); } catch(e) {}
try { fs.mkdirSync(baseDir + apiDir); } catch(e) {}
try { fs.mkdirSync(baseDir + libDir); } catch(e) {}
try { fs.mkdirSync(baseDir + confDir); } catch(e) {}
try { fs.mkdirSync(baseDir + logDir); } catch(e) {}
// package.jsonを新規プロジェクト用に生成してコピー.
var value = fs.readFileSync(__dirname + "/../project/package.json");
var strs = require("../lib/strs");
value = strs.changeString(value, "{{projectName}}", projectName);
value = strs.changeString(value, "{{user}}", process.env['username'] || process.env['USER'] || "");
fs.writeFileSync(baseDir + "package.json", value);
value = null;
// conf/logConf.jsをコピー.
value = fs.readFileSync(__dirname + "/../project/conf/logConf.js");
fs.writeFileSync(baseDir + "conf/logConf.js", value);
value = null;
// startup.jsをコピー.
value = fs.readFileSync(__dirname + "/../project/startup.js");
fs.writeFileSync(baseDir + "startup.js", value);
value = null;
// サーバIDを生成.
// 起動引数で、プロジェクト名設定で作成されている場合は、そのフォルダ配下にサーバIDを生成する.
// そうでない場合は、カレントディレクトリにサーバIDを生成する.
var id = "";
if(argvProjectNameFlag) {
id = serverId.createId("./" + projectName + "/");
} else {
id = serverId.createId();
}
// 処理結果を表示.
constants.viewTitle(out);
out("\n");
if(argvProjectNameFlag) {
out("new " + projectName + " project.\n");
} else {
out("new project.\n");
}
out("\n");
out(" ["+htmlDir+"] directory.\n");
out(" It stores static files (HTML, JS, CSS, Images) here.\n");
out(" ["+apiDir+"] directory.\n");
out(" Here, we store RESTFul API programs implemented by JS.\n");
out(" ["+libDir+"] directory.\n");
out(" This is a folder for storing JS libraries.\n");
out(" ["+confDir+"] directory.\n");
out(" This is a folder for storing configuration information in JSON format.\n");
out(" ["+logDir+"] directory.\n");
out(" It is the output destination folder of the log file.\n");
out("\nid: " + id + "\n\n");
}