node js 递归生成vue文件目录

目录

什么是 fs 文件系统模块

fs.existsSync方法 

方法说明:

语法:

向指定的文件中写入内容  writeFile

 fs.writeFile() 的语法格式 

 fs.writeFile() 的示例代码

判断文件是否写入成功

 fs.mkdir 创建目录

 目录已存在,重复创建

创建的目录是多级的,

什么是 path 路径模块

路径拼接 join

 path.join() 的语法格式

path.join() 的代码示例

path.dirname() 路径的目录名称

 用法

例子


这段代码是一个用于创建目录的函数。它的作用是检查指定的目录是否存在,如果存在则调用回调函数,如果不存在则递归调用自身来创建父目录。

当找到存在的父目录后,代码使用fs.mkdir函数创建指定的目录。如果创建成功,则打印一条成功的提示信息。如果指定了label参数,则将label的内容写入dirname/index.vue文件中。

整个过程中,代码使用了一些Node.js的文件系统模块(fs)和路径模块(path)来进行文件和目录的操作。

const fs = require("fs");
const path = require("path");const menuList = [{label: "审批管理",path: "approval",},{label: "考勤管理",path: "attendance",},{label: "组织架构",path: "department",},{label: "员工管理",path: "employee",},{label: "权限管理",path: "permission",},{label: "角色管理",path: "role",},{label: "工资管理",path: "salary",},{label: "社保管理",path: "social",},
];/*** 递归创建目录* @param {string} dirname 目录名* @param {function} callback 回调函数* @param {string} label 标签* @param {boolean} verbose 是否输出日志*/
//
function mkdirs(dirname, callback, label, verbose = true) {// 检查目录是否存在if (fs.existsSync(dirname)) {callback && callback(); // 调用回调函数} else {// 递归调用mkdirs函数,创建父目录mkdirs(path.dirname(dirname),function () {fs.mkdir(dirname, function (err) {if (err) {throw err;}if (verbose) {console.log(`创建目录 ${dirname} 成功`);}// 如果存在label参数,则将label内容写入dirname/index.vue文件中if (label) {const basString = `<template><div>${label}</div></template><script>export default {}</script><style lang="scss" scoped></style>`;/*** 参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。参数2:必选参数,表示要写入的内容。参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8。参数4:必选参数,文件写入完成后的回调函数。*/fs.writeFile(// path.join(dirname, "index.vue") 是用于拼接路径的函数,将 dirname 和 "index.vue" 连接起来,形成文件的完整路径。path.join(dirname, "index.vue"),// basString 是要写入文件的内容basString,// { flag: "a" } 是一个选项对象,其中 flag 属性设置为 "a",表示以追加模式写入文件,即在已有内容的末尾添加新内容。{ flag: "a" },// function (err) { } ... 是一个回调函数,用于处理写入文件时可能发生的错误。function (err) {if (err) {throw err;}if (verbose) {console.log(`在 ${dirname} 目录下创建 index.vue 文件成功`);}});}});},label,verbose);}
}menuList.forEach((item) => {mkdirs(path.join(__dirname, "../views", item.path),() => {console.log("done");},item.label);if (item.children) {item.children.forEach((child) => {mkdirs(path.join(__dirname, "../views", child.path),() => {console.log("done");},child.label);});}
});

什么是 fs 文件系统模块

fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。

例如:

fs.writeFile() 方法,用来向指定的文件中写入内容

如果要在 JavaScript 代码中,使用 fs 模块来操作文件,则需要使用如下的方式先导入它:


fs.existsSync方法 

方法说明:

  以同步的方法检测目录是否存在。

  如果目录存在 返回 true ,如果目录不存在 返回false

语法:

fs.existsSync(pach);
由于该方法属于fs模块,使用前需要引入fs模块 var fs = require('fs');

接收参数:(path:将检测的目录路径)

var fs = require("fs");
var checkDir = fs.existsSync("checkDir");
console.log(checkDir);

向指定的文件中写入内容  writeFile

 fs.writeFile() 的语法格式 

使用 fs.writeFile() 方法,可以向指定的文件中写入内容,语法格式如下:

参数解读:

参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。
参数2:必选参数,表示要写入的内容。
参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8。
参数4:必选参数,文件写入完成后的回调函数。

 fs.writeFile() 的示例代码

向指定的文件路径中,写入文件内容:

//1、导入fs文件系统模块
const fs = require('fs')
//2、调用fs.writeFile()方法,写入文件内容
//参数1:表述文件存放的路径
//参数2:表示写入的内容
//参数3:回调函数
fs.writeFile('./2.text','abcd',function(err){//2.1、如果文件写入成功,则err的值为NULL//2.2、如果文件写入失败,则err的值等于一个错误对象console.log(err);
})

判断文件是否写入成功

可以判断 err 对象是否为 null,从而知晓文件写入的结果:

//1、导入fs文件系统模块
const fs = require('fs')
//2、调用fs.writeFile()方法,写入文件内容
//参数1:表述文件存放的路径
//参数2:表示写入的内容
//参数3:回调函数
fs.writeFile('./2.text','abcd',function(err){if(err){return console.log('文件写入失败!' + err.message)}console.log('文件写入成功!');
})

 fs.mkdir 创建目录

 创建目录

形参解析

path:传入将要被创建的文件夹路径

options.recursive:表示是否创建父目录

callback(err, path):err是创建文件夹过程产生的错误信息,path是创建的第一个目录路径

创建目录,我们需要注意几个问题:

 目录已存在,重复创建

重复创建目录不会发生报错,只是fs.mkdir的回调函数path参数会返回undefined

创建的目录是多级的,

创建多级目录,需要设置options.recursive为true,才能将多级目录都创建成功,并且fs.mkdir的回调函数形参path是第一级目录的所在路径

如果options.recursive为false,则无法创建多级目录,只支持单个目录创建 

什么是 path 路径模块

path 模块是 Node.js 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理
需求。

例如:

path.join() 方法,用来将多个路径片段拼接成一个完整的路径字符串

path.dirname()方法用于获取给定路径的目录名称。它会忽略相应平台的尾随目录分隔符。 

如果要在 JavaScript 代码中,使用 path 模块来处理路径,则需要使用如下的方式先导入它:

路径拼接 join

 path.join() 的语法格式

使用 path.join() 方法,可以把多个路径片段拼接为完整的路径字符串,语法格式如下:

参数解读:

…paths 路径片段的序列
返回值:

path.join() 的代码示例

使用 path.join() 方法,可以把多个路径片段拼接为完整的路径字符串:

const path = require('path')
const fs = require('fs')// //注意: ../会抵消前面的路径// const pathSter = path.join('/a','/b/c','../../','./d','e')// console.log(pathSter)//     \a\d\efs.readFile(path.join(__dirname,'./1.text'),'utf8',function(err,dataStr){if(err){return console.log(err.message)}console.log(dataStr)
})

 运行截图:

注意:今后凡是涉及到路径拼接的操作,都要使用 path.join() 方法进行处理。不要直接使用 + 进行字符串的拼接。

path.dirname() 路径的目录名称

 用法

path.dirname()方法用于获取给定路径的目录名称。它会忽略相应平台的尾随目录分隔符。 

用法:

path.dirname( path )

参数:该函数接受上面提到并在下面描述的一个参数:

  • path:这是用于提取目录名称的文件路径。如果此参数不是字符串值,则抛出TypeError。

返回值:它返回带有路径目录的字符串。

以下示例程序旨在说明Node.js中的path.dirname()方法:

例子

范例1:

// Node.js program to demonstrate the     
// path.dirname() method  // Import the path module 
const path = require('path'); // Complete file path 
path1 = path.dirname("/users/admin/website/index.html"); 
console.log(path1) // Only file name 
// returns a period (.) 
path2 = path.dirname("readme.md"); 
console.log(path2) // Path with file not specified 
path3 = path.dirname("website/post/comments") 
console.log(path3);

 输出:

/users/admin/website
.
website/post

范例2:

// Node.js program to demonstrate the     
// path.dirname() method  // Import the path module 
const path = require('path'); console.log("File name:", __filename); 
path1 = path.dirname(__filename); 
console.log(path1); console.log("Directory name:", __dirname); 
path2 = path.dirname(__dirname); 
console.log(path2);

输出:

File name: G:\tutorials\nodejs-path-dirname\index.js
G:\tutorials\nodejs-path-dirname
Directory name: G:\tutorials\nodejs-path-dirname
G:\tutorials

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/222213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python:Anaconda

简介 Anaconda是一个流行的Python发行版&#xff0c;专为科学计算和数据分析而设计。它包含了Python语言、Jupyter Notebook以及用于科学计算的众多包&#xff0c;如NumPy、Pandas、Matplotlib等。 Anaconda的特点是开箱即用&#xff0c;用户无需单独安装这些包&#xff0c;极…

Leetcode—459.重复的子字符串【简单】

2023每日刷题&#xff08;五十九&#xff09; Leetcode—459.重复的子字符串 算法思想 巧解的算法思想 实现代码 从第一个位置开始到s.size()之前&#xff0c;看s字符串是否是ss的子串 class Solution { public:bool repeatedSubstringPattern(string s) {return (s s).fin…

2023全球开发者生态调研:84%的开发者表示他们在工作中正积极使用生成式AI工具

今年JetBrains首次在一年一度的开发者生态调研中&#xff0c;增加了人工智能方向的问题。在全球26348名开发者参与的调研中&#xff0c;总体对人工智能的发展持乐观态度。特别是生成式AI在软件开发和编程环节中的应用&#xff0c;84%的开发者表示他们在工作中正在积极使用生成式…

占位图片(Placeholder Image)

一、引言 在网页设计和开发中&#xff0c;占位图片&#xff08;Placeholder Image&#xff09;是一种常见的技术手段&#xff0c;用于在用户上传图片之前或者图片加载失败时&#xff0c;展示一个临时替代的图片&#xff0c;以提高用户体验。本文将详细介绍占位图片的实现原理和…

中医电子处方管理系统软件,中医配方模板一键生成软件操作教程

一、前言&#xff1a; 在中医开电子处方时&#xff0c;如果能够使用配方模板功能&#xff0c;则可以节省很多时间。使用配方模板一键导入&#xff0c;几秒即可完成开单。 下面就以佳易王电子处方管理系统软件V17.1版本为例说明&#xff0c;其他版本可以参考&#xff0c;软件下…

获取 VirtualBox COM 对象失败,应用程序被终端 0x80000405错误解决以及Virtualbox下载

错误详情展示及解决_情况一 返回代码展示&#xff1a; 解决方式&#xff1a;打开在virtualbox的安装目录&#xff0c;找到VirtualBox.xml文件&#xff0c;将它删掉找到 错误详情展示及解决_情况二 返回代码展示&#xff1a; 情况说明&#xff1a; 原来是win10的电脑&#xf…

「Verilog学习笔记」加减计数器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule count_module(input clk,input rst_n,input mode,output reg [3:0]number,output reg zero);reg [3:0] num ; always (posedge clk or negedge r…

计算两股不同流量的气体,通过换热器换热后,高温气体的出口温度

# -*- coding: utf-8 -*- """ Created on Thu Nov 30 11:23:12 2023 计算两股不同流量的气体&#xff0c;通过换热器换热后&#xff0c;高温气体的出口温度 (煤烟二级&#xff0c;计算煤烟二级热侧出口温度) ------------------------------------------------ …

c语言:指针与数组

目录 使用指针访问数组 使用第一个元素获取数组首地址 使用数组名获取数组首地址 使用指针访问数组等价于下标访问 使用指针访问数组 指针类型的加减运算可以使指针内保存的首地址移动。指针类型加n后。首地址向后移动 n * 步长 字节。 指针类型减n后。首地址向前移动 n *…

Linux(21):软件安装 RPM,SRPM 与 YUM

软件管理员简介 以原始码的方式来安装软件&#xff0c;是利用厂商释出的Tarball来进行软件的安装。 不过&#xff0c;你每次安装软件都需要侦测操作系统与环境、设定编译参数、实际的编译、最后还要依据个人喜好的方式来安装软件到定位。这过程是真的很麻烦的。 如果厂商先在他…

mysql 数据库

一、mysql 数据库 安装 sudo apt-get install mysql-server sudo systemctl status mysql二、基本使用 1、mysql 登陆 sudo mysql -u root -p # 默认密码可能被设置为"root"&#xff0c;"admin"或者是空的2、创建用户 # 创建用户 newuser&#xff0c;改…

openHarmony添加system_basic权限安装报错

openHarmony添加system_basic权限安装报错 12/14 13:49:57: Install Failed: [Info]App install path:D:\huawei\project\FCTTest\entry\build\default\outputs\default\entry-default-signed.hap, queuesize:0, msg:error: failed to install bundle. error: install failed …

成绩分级 C语言xdoj53

问题描述 给出一个百分制的成绩&#xff0c;要求输出成绩等级A,B,C,D,E。90分以上为A&#xff0c;80~89分为B,70~79分为C,60~69分为D&#xff0c;60分以下为E。 输入说明 输入一个正整数m&#xff08;0<m<100&#xff09; 输出说明 输出一个字符 输入样例 …

有效的括号,成对字符合法性检测

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 一、题目描述 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0…

Unity中实现ShaderToy卡通火(移植篇)

文章目录 前言一、准备好我们的后处理基础脚本1、C#&#xff1a;2、Shader&#xff1a; 二、开始逐语句对ShaderToy进行转化1、首先&#xff0c;找到我们的主函数 mainImage2、其余的方法全部都是在 mainImage 函数中调用的方法3、替换后的代码(已经没报错了&#xff0c;但是效…

七.子查询

子查询 1.需求分析与解决问题1.1.实际问题1.2子查询的基本使用1.3子查询分类 2.单行子查询2.1单行比较操作符2.2代码示例2.3HAVING中的子查询2.4CASE中的查询2.5子查询中的空值问题2.6非法使用子查询 3.多行子查询3.1多行比较符操作3.2代码示例3.3空值问题 4.相关子查询4.1相关…

国家开放大学 湖南开放大学形成性考核 平时作业 统一资料

试卷代号&#xff1a;1258 房屋建筑混凝土结构设计 参考试题 一、单项选择题&#xff08;每小题2分&#xff0c;共计40分&#xff09; 1.( )是将框架结构中的部分跨间布置剪力墙或把剪力墙结构的部分剪力墙抽掉改为框架承重。 A.梁板结构体系 B.框…

LeetCode 2132. 用邮票贴满网格图:二维前缀和 + 二维差分

【LetMeFly】2132.用邮票贴满网格图&#xff1a;二维前缀和 二维差分 力扣题目链接&#xff1a;https://leetcode.cn/problems/stamping-the-grid/ 给你一个 m x n 的二进制矩阵 grid &#xff0c;每个格子要么为 0 &#xff08;空&#xff09;要么为 1 &#xff08;被占据&…

大模型应用_PrivateGPT

https://github.com/imartinez/privateGPT 1 功能 整体功能&#xff0c;想解决什么问题 搭建完整的 RAG 系统&#xff0c;与 FastGPT相比&#xff0c;界面比较简单。但是底层支持比较丰富&#xff0c;可用于知识库的完全本地部署&#xff0c;包含大模型和向量库。适用于保密级…

AI抽烟识别系统研发关键

为了设计一个有效的AI抽烟识别系统&#xff0c;我们需要考虑几个关键组成部分&#xff1a;图像捕捉、数据处理、模型训练、以及实际应用场景。下面是这个方案的详细阐述&#xff1a; 1. 图像捕捉与数据收集 摄像头部署&#xff1a;首先&#xff0c;在需要监控的区域安装高分辨…