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.rhkb.cn/news/213388.html

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

相关文章

定时任务特辑 | Quartz、xxl-job、elastic-job、Cron四个定时任务框架对比,和Spring Boot集成实战

专栏集锦&#xff0c;大佬们可以收藏以备不时之需&#xff1a; Spring Cloud 专栏&#xff1a;http://t.csdnimg.cn/WDmJ9 Python 专栏&#xff1a;http://t.csdnimg.cn/hMwPR Redis 专栏&#xff1a;http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏&#xff1a;http://t.csdni…

前端canvas的基础使用

一、介绍 前端中的 Canvas 是一种用于在网页上绘制图形的 HTML 元素。它提供了一个可以通过 JavaScript 进行绘制的 2D 绘图环境。使用 Canvas&#xff0c;您可以绘制图形&#xff0c;包括线条、矩形、圆形、文本和图像。Canvas 为开发人员提供了灵活自由的绘图能力&#xff0…

C++基础 -42- STL库之list链表

———————STL库之list链表——————— &#x1f384; list链表的格式(需要定义头文件) list<int> data1(4, 100);list<int> data2(4, 500);&#x1f384;list链表的合并接口 &#x1f384;举例使用合并接口并且验证 data2.merge(data1);list<int>::…

面试题之Docker篇

1、Docker 是什么&#xff1f; Docker一个开源的应用容器引擎&#xff0c;是实现容器技术的一种工具&#xff0c;让开发者可以打包他们的应用以及环境到一个镜像中&#xff0c;可以快速的发布到任何流行的操作系统上。 2、Docker的三大核心是什么? 镜像&#xff1a;Docker的镜…

AI洗稿软件,当下热门的AI洗稿软件大全【2024】

在如今信息爆炸的时代&#xff0c;文章创作成为越来越多人面临的任务之一。为了满足用户对高效、原创、多样化内容的需求&#xff0c;人工智能技术在洗稿领域得到了广泛应用。本文将专心分享AI洗稿领域的优质推荐。 AI洗稿的背景与应用 AI洗稿是指利用人工智能技术对现有文章进…

虹科Pico汽车示波器 | 汽车免拆检修 | 2018款东风风神AX7车发动机怠速抖动、加速无力

一、故障现象 一辆2018款东风风神AX7车&#xff0c;搭载10UF01发动机&#xff0c;累计行驶里程约为5.3万km。该车因发动机怠速抖动、加速无力及发动机故障灯异常点亮而进厂维修&#xff0c;维修人员用故障检测仪检测&#xff0c;提示气缸3失火&#xff1b;与其他气缸对调点火线…

ChatGPT在国内的使用限制,国内的ChatGPT替代工具

人工智能技术的发展不仅改变了我们的生活方式&#xff0c;也在各行各业发挥着越来越重要的作用。ChatGPT&#xff08;Generative Pre-trained Transformer&#xff09;作为一种先进的自然语言处理模型&#xff0c;由OpenAI推出&#xff0c;其在生成人类般流畅对话方面表现出色。…

互联网加竞赛 LSTM的预测算法 - 股票预测 天气预测 房价预测

0 简介 今天学长向大家介绍LSTM基础 基于LSTM的预测算法 - 股票预测 天气预测 房价预测 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/postgraduate 1 基于 Ke…

Java一对一聊天程序

我们首先要完成服务端&#xff0c;不然出错&#xff0c;运行也要先运行服务端&#xff0c;如果不先连接服务端&#xff0c;就不监听&#xff0c;那客户端不知道连接谁 服务端 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.Actio…

数据结构——二叉树的链式结构

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C语言小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ 一、二叉树的创建 这里我们使用先序遍历的思想来创建二叉树&#xff0c;这里的内容对于刚接触二…

TinyMPC - CMU (卡耐基梅隆大学)开源的机器人 MPC 控制器

系列文章目录 CasADi - 最优控制开源 Python/MATLAB 库 文章目录 系列文章目录前言一、机器人硬件对比1.1 Teensy 上的微控制器基准测试1.2 机器人硬件1.3 BibTeX 二、求解器三、功能&#xff08;预期&#xff09;3.1 高效3.2 鲁棒3.3 可嵌入式3.4 最小依赖性3.5 高效热启动3.…

【Linux系统编程】开发工具yum和vim

目录 一&#xff0c;yum工具的使用 1&#xff0c;yum的介绍 2&#xff0c;yum的使用 二&#xff0c;vim工具的开发 1&#xff0c;vim的介绍 2&#xff0c;模式的使用 3&#xff0c;vim配置文件 4&#xff0c;sudo配置文件 一&#xff0c;yum工具的使用 1&#xff0c;y…

BGP综合

1、使用PreVal策略&#xff0c;确保R4通过R2到达192.168.10.0/24。 2、使用AS_Path策略&#xff0c;确保R4迪过R3到达192.168.11.0/24。 3、配置MED策略&#xff0c;确保R4通过R3到达192.168.12.0/24。 4、使用Local Preference策略&#xff0c;确保R1通过R2到达192.168.1.0…

html动漫网页设计分享 紫罗兰永恒花园网页作业成品带视频,注册登录,表格,表单

html5静态网页设计要是用HTML DIVCSS JS等来完成页面的排版设计,一般的网页作业需要融入以下知识点&#xff1a;div布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点&#xff0c;学生网页作业源码可以…

五、HotSpot细节实现

一、并发标记与三色标记 问题&#xff1a;三色标记到底发生在什么阶段&#xff0c;替代了什么。并发标记 1、并发标记( Concurrent Marking) 从 GC Root 开始对堆中对象进行可达性分析&#xff0c;递归扫描整个堆里的对象图&#xff0c;找出要回收的对象&#xff0c;这阶段耗…

回归预测 | MATLAB实现CNN-BiLSTM(卷积双向长短期记忆神经网络

效果一览 基本介绍 提出一种同时考虑时间与空间因素的卷积&#xff0d;双向长短期记忆&#xff08; CNN-BiLSTM&#xff09;模型&#xff0c;将具有空间局部特征提取能力的卷积神经网络&#xff08;CNN&#xff09;和具有能同时考虑前后方向长时间信息的双向长短期记忆&#xf…

PHP 二维码内容解析、二维码识别

目录 1.首先是一些错误的示例 2.正确示例 3.二维码解析 4.完整示例&#xff0c;含生成 5.代码执行结果 6.参考文档 1.首先是一些错误的示例 本示例使用的是php7.3 通过搜索各种结果逐个尝试以后&#xff0c;得出一个可使用版本 解析错误经历&#xff1a;vendor核心报错 …

springboot 极简案例

安装idea File -> New Project 选择依赖 创建controller文件 输入controller类名 输入代码 运行项目 访问 localhost:8080/hello/boot package com.example.demo;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.…

WordCount 源码解析 Mapper,Reducer,Driver

创建包 com.nefu.mapreduce.wordcount &#xff0c;开始编写 Mapper &#xff0c; Reducer &#xff0c; Driver 用户编写的程序分成三个部分&#xff1a; Mapper 、 Reducer 和 Driver 。 &#xff08; 1 &#xff09; Mapper 阶段 ➢ 用户自定义的 Mapper 要继承自己的父…

Java最全面试题专题---1、Java基础知识(3)

IO流 java 中 IO 流分为几种? 按照流的流向分&#xff0c;可以分为输入流和输出流&#xff1b;按照操作单元划分&#xff0c;可以划分为字节流和字符流&#xff1b;按照流的角色划分为节点流和处理流。 Java Io流共涉及40多个类&#xff0c;这些类看上去很杂乱&#xff0c;…