如果制作入门工具包生成器,如何使用nodejs动态创建和写入文件和文件夹内的内容

时间:2019-03-26 10:47:14

标签: node.js npm starter-kits

我想为带有node.js的Angular CLI的框架创建一个Project Starter Kit Generator。

以下是假设命令为kit-cli所需的功能:

  • kit-cli initkit-cli am/as:会问几个问题,并以此为基础创建所有文件和文件夹来开始使用。

  • kit-cli add option:将创建一些代码并将其添加到现有文件中,并在需要时运行一些基于系统的命令。

我的想法如下:

  • 将我的内容放入JSON文件中。

  • 根据用户的选择,从JSON文件中读取内容并创建文件夹和文件。

  • 不知道如何从现有文件中添加/删除代码。

问题:

  • 假设文件夹结构会根据用户的选择而变化,那么我应该如何存储和创建文件夹/文件结构。

  • 如何从现有文件中编辑/添加/删除代码。

1 个答案:

答案 0 :(得分:0)

您可以为此使用节点文件系统或纯Shell脚本。使用节点:

const fs = require("fs");

fs.writeFile(filePath, fileData, (err,res) => {
    if(err) console.log(err);
    console.log(res);
});

要在节点中写入文件:

fs.readFile('./file3.json', (err,res) => {
    let file = res;
    console.log(res.toString('utf-8'));
});

您可以包装fs.writeFile,以便可以将其与所需的所有文件一起使用,如下所示:

createFile('./file1.json', '{"pro1": "value1"', "prop2": "value2"}');
createFile('./file2.json', '{"pro3": "value3"', "prop4": "value4"}');
createFile('./file3.json', '{"pro5": "value5"', "prop6": "value6"}');

function createFile(path, data) {
    fs.writeFile(path, data, (err,res) => {
        if(err) console.log(err);
        console.log(res);
    });
}

这是您读取js文件的方法:

fs.readFile('./file.js', (err,res) => {
    let file = res.toString('utf-8');
    console.log(file);
    let lines = file.split('\n');
    for(var i = 0; i < lines.length; i++) {
        console.log(lines[i]);
    }
});

这是向其中添加模块的方式:

let modules = ['const def = require("def");', 'const xyz = require("xyz");'];

fs.readFile('./abc.js', (err,res) => {
    let file = res.toString('utf-8');
    let lines = file.split('\n');
    for(var i = 0; i < lines.length; i++) {
        if(i==0) {
            let mod = '';
            for(var j = 0; j < modules.length; j++) {
               mod += modules[j] + "\n"; 
            }
            lines[i] = mod + lines[i];
        }
    }
    let newFile = lines.join('\n');
    createFile('./abc.js', newFile);
});

我们正在检查是否在文件的第一行,所以我们知道这是放置模块导入的位置。

您可以定义数组中的所有模块,并将其添加到第一个模块的第一行,这就是为什么:

lines[i] = mod + lines[i];

然后我们将所有行并在它们之间添加新行以保存文件。

let newFile = lines.join('\n');
createFile('./abc.js', newFile);

这是检查您是否在方法声明末尾的方法:

if(lines[i].includes('});')) {
        lines[i] = '\tconsole.log("xyz added");\n\n' + lines[i];
}

要确保您添加的方法正确而不是全部添加:

if(lines[i].includes('});') && lines[i].includes('abc')) {
    lines[i] = '\tconsole.log("xyz added");\n\n' + lines[i];
}

并在方法声明中添加注释:

abc.method(function () { 
  console.log("abc called");
}); // end of abc