使用node.js的fs文件操作模块配合path路径转换模块,获取模板文件,根据json配置文件统一生成。
let fs = require("fs");
let path = require("path");
let vuex_api_example, vuex_api_list;
let vuex_api_example_path = path.resolve(__dirname, "./vuex_api_example.js");
let vuex_api_list_path = path.resolve(__dirname, "./vuex_api_list.json");
let vuex_api_modules_public = path.resolve(__dirname, "./vuex/modules");
vuex_api_example = fs.readFileSync(vuex_api_example_path).toString();
vuex_api_list = fs.readFileSync(vuex_api_list_path).toString();
if (fs.existsSync(vuex_api_modules_public)) {
del_dir(vuex_api_modules_public);
}
fs.mkdirSync(vuex_api_modules_public);
make_file(JSON.parse(vuex_api_list), "");
function write_file(path, element) {
let replace_name = path
.split(vuex_api_modules_public + "/")[1]
.split(".")[0]
.split("/")
.join("_");
let content = vuex_api_example.replace(/replace_name/g, replace_name);
if (!element.has_params) {
content = content.replace(/params/g, "{}");
}
let str = "";
for (
let index = 0;
index < path.split(vuex_api_modules_public + "/")[1].split("/").length + 1;
index++
) {
str += "../";
}
content = content.replace(/{replace_dir}/g, str);
fs.writeFile(path, content, err => {
if (err) {
return console.error(err);
}
console.log(`generate file : ${path} successed`);
});
}
function make_file(params, dir_name) {
for (let index = 0; index < params.length; index++) {
let element = params[index];
if (element.dir_name) {
let new_dir_name = `${dir_name}/${element.dir_name}`;
fs.mkdirSync(vuex_api_modules_public + new_dir_name);
make_file(element.children, new_dir_name);
} else {
let new_dir_name = `${dir_name}/${element.file_name}.js`;
fs.open(path.resolve(vuex_api_modules_public + new_dir_name), "w", function(
err,
fd
) {
if (err) {
return console.error(err);
}
write_file(vuex_api_modules_public + new_dir_name, element);
});
}
}
}
function del_dir(p) {
var list = fs.readdirSync(p);
list.forEach((v, i) => {
var url = p + "/" + v;
var stats = fs.statSync(url);
if (stats.isFile()) {
fs.unlinkSync(url);
} else {
arguments.callee(url);
}
});
fs.rmdirSync(p);
}
生成的没毛病。+66666++++