如果制作初学者工具包生成器,如何使用 nodejs 在文件和文件夹中动态创建和写入内容
How to dynamically create and write content inside files and folders with nodejs if making a starter kit generator
我想为一个框架创建一个 Project Starter Kit Generator,就像 Angular CLI 和 node.js 一样。
以下是假设命令为 kit-cli
:
时需要的功能
kit-cli init
或 kit-cli am/as
:将询问几个问题,并基于此创建所有文件和文件夹以开始使用。
kit-cli add option
: 将创建一些代码并将其添加到现有文件中,如果需要,将 运行 一些基于系统的命令。
我想到了以下方法:
正在将我的内容放入 JSON 个文件中。
根据用户的选择,从JSON文件中读取内容并创建文件夹和文件。
不知道如何从现有文件中 add/remove 编码。
问题:
假设文件夹结构会根据用户的选择而变化,我应该如何存储和创建 folder/file 结构。
我应该如何编辑/add/remove 现有文件中的代码。
您可以为此使用节点文件系统或纯 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
我想为一个框架创建一个 Project Starter Kit Generator,就像 Angular CLI 和 node.js 一样。
以下是假设命令为 kit-cli
:
kit-cli init
或kit-cli am/as
:将询问几个问题,并基于此创建所有文件和文件夹以开始使用。kit-cli add option
: 将创建一些代码并将其添加到现有文件中,如果需要,将 运行 一些基于系统的命令。
我想到了以下方法:
正在将我的内容放入 JSON 个文件中。
根据用户的选择,从JSON文件中读取内容并创建文件夹和文件。
不知道如何从现有文件中 add/remove 编码。
问题:
假设文件夹结构会根据用户的选择而变化,我应该如何存储和创建 folder/file 结构。
我应该如何编辑/add/remove 现有文件中的代码。
您可以为此使用节点文件系统或纯 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