node复制当前目录下的文件夹到另一层目录(包含多层文件夹嵌套)

news2024/11/29 22:33:31

前段时间在跟进node项目时有个node项目的需求,然后上线流程是把前端build后的文件夹放到后端仓库的静态资源目录下,再把后端代码发布上线。这样做的好处是在前端页面调用接口时,可以直接 /xxx来调用(浏览器会自动把域名补全,比如node项目的域名是abc.com,那我们在前端代码使用axios时baseUrl可以直接填一个'/',url填’test‘,那在调用接口时会把abc.com补上去),而且也避免了跨域的问题,因为前后端是同域部署的。所以我需要写一个脚本把前端build后的内容复制到后端仓库的public目录下,这样就不需要每次打包完后再手动去cv了。

// moveBuild.js

const path = require('path');
const fs = require('fs');
const fse = require('fs-extra');
//源文件夹,这里的路径根据你的项目路径进行更改
const sourceDir = path.resolve(__dirname, '../build')
//目标文件夹,这里的路径根据你的项目路径进行更改
const targetDir =  path.resolve(__dirname, '../../service', 'public')

// npm run build后需要把build后的内容自动拷贝到后端目录下的public文件夹
//判断文件夹是否存在,不存在就创建一个新的文件夹
const isExist = (path) => {
    if (!fs.existsSync(path)) {
        fs.mkdirSync(path)
        fs.chmodSync(path, '777')
    }
}

//清空目标文件夹
const emptyDir = (path) => {
        try {
            fse.emptyDirSync(path)
            console.log('目标文件夹已成功清空');
        } catch (error) {
            console.log('目标文件夹清空失败:', error);
        }
}

//复制文件、文件夹
const copyFile = (sourcePath, targetPath) => {
    //获取build文件夹内的所有内容,每一项为fs.Dirent对象
    const sourceFile = fs.readdirSync(sourcePath, {withFileTypes: true})
    //遍历sourceFile数组,把里面的每一项依次加到目标文件夹中
    sourceFile.forEach(file => {
        //当前需要复制的源文件路径
        const nowSourcePath = path.resolve(sourcePath, file.name)
        //当前需要拷贝的目标文件路径
        const nowTargetPath = path.resolve(targetPath, file.name)
        //判断当前文件是否是文件夹,如果是文件则直接复制到目标文件夹;如果是文件夹则递归执行copyFile方法
        if (file.isDirectory()) {
            isExist(nowTargetPath)
            copyFile(nowSourcePath, nowTargetPath)
        } else {
            try {
                fs.copyFileSync(nowSourcePath, nowTargetPath)
            } catch (error) {
                console.log('复制文件发生错误:', error);
            }
        }
    })
}

// 复制前先把目标文件夹的内容清空
emptyDir(targetDir)
copyFile(sourceDir, targetDir)
console.log('已成功拷贝build文件夹内容到public文件夹下');

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

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

相关文章

Spring系统之IOC与AOP

前言 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 IOC 1.IOC的概念 控制反转(IoCInversion of Control)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码…

Locust单机多核压测,以及主从节点的数据通信处理

一、背景 这还是2个月前做的一次接口性能测试,关于locust脚本的单机多核运行,以及主从节点之间的数据通信。 先简单交代下背景,在APP上线之前,需要对登录接口进行性能测试。经过评估,我还是优先选择了locust来进行脚…

2023我和云栖有个约会

时间:2023.11.1 地点:云栖小镇 事件:约会 昨天刚在网上看到了有阿姨在云栖大会给自己女儿相亲的照片,今天直接就赶了过去。约会了一整天,虽然很累,但真的很值得。由于是第一次和云栖约会,那就…

“深入理解Nginx的负载均衡与动静分离“

目录 引言一、Nginx简介1. Nginx的基本概念2. Nginx的特点3. Nginx的安装配置 二、Nginx搭载负载均衡三、前端项目打包四、Nginx部署前后端分离项目,同时实现负载均衡和动静分离总结 引言 在现代互联网应用中,高性能和可扩展性是至关重要的。Nginx作为一…

初出茅庐的小李博客之STCW15408AS单片机串口1使用记录

STCW15408AS单片机串口1使用记录 资源介绍: STC15W401AS系列单片机是STC生产的单时钟/机器周期(1T)的单片机,是宽电压/高可靠/低功耗/超强抗干扰的新一代8051单片机,采用STC第九代加密技术,无法解密, 代码完全兼容传…

node使用fs模块(四)—— 文件夹的使用(创建、读取、删除)

文章目录 前言一、文件的创建1.参数2.基本使用 二、文件的读取1.参数2.读取文件的基本使用3.读取文件的递归使用(option中添加recursive为true) 三、文件的删除1. 参数2. 基本使用(删除文件夹)3. 递归删除文件夹 前言 创建、读取…

学习时遇到的错误

1. pycharm中使用ssh远程连接的jupyter时,出现***端口已经被占用的情况 办法一:更换端口,将端口更换为其他 办法二:重启远程终端服务器 2. 关于wandb,在pycharm中调用了wandb.init()初始化函数,中途关闭…

MolFormer分子预训练模型

Large-scale chemical language representations capture molecular structure and properties(2022,NMI) 和原本transformer encoder的不同: 采用linear attention mechanismrotary positional embedding 模型 transformer e…

x3daudio17.dll丢失是什么原因?x3daudio1_7.dll怎么解决?(修复教程分享)

在我多年的电脑使用经历中,我曾经遇到过x3daudio1_7.dll缺失的问题。这个问题让我苦恼了很久,但最终我还是找到了4种有效的修复方法。今天,我想和大家分享一下这些方法,希望对你们有所帮助。 首先,我要讲述一下我遇到…

跟着Nature Communications学作图:纹理柱状图+添加显著性标签!

📋文章目录 复现图片设置工作路径和加载相关R包读取数据集数据可视化计算均值和标准差 计算均值和标准差方差分析组间t-test 图a可视化过程图b可视化过程合并图ab 跟着「Nature Communications」学作图,今天主要通过复刻NC文章中的一张主图来巩固先前分享…

基础课15——语音标注

语音数据标注是对语音数据进行处理和分析的过程,目的是让人工智能系统能够理解和识别语音中的信息。这个过程包括了对语音信号的预处理、特征提取、标注等步骤。 在语音数据标注中,标注员需要对语音数据进行分类、切分、转写等操作,让人工智…

C++ 多线程之OpenMP并行编程使用详解

C 多线程之OpenMP并行编程使用详解 总结OpenMP使用详解本文转载自:https://blog.csdn.net/AAAA202012/article/details/123665617?spm1001.2014.3001.5506 1.总览 OpenMP(Open Multi-Processing)是一种用于共享内存并行系统的多线程程序设计方案,支持…

软件测试之用例篇(万能公式、具体方法)

目录 1. 概念 2. 万能公式 3.具体设计测试用例的方法 (1)等价类 (2)边界值 (3)判定表(因果图) (4)场景设计法 (5)正交法 如何使用 allparis 生成正交…

绕开网站反爬虫原理及实战

1.摘要 在本文中,我首先对网站常用的反爬虫和反自动化技术做了一个梳理, 并对可能能够绕过这些反爬技术的开源库chromedp所使用的技术分拆做一个介绍, 最后利用chromedp库对一个测试网站做了爬虫测试, 并利用chromedp库绕开了爬虫限制,成功通过程序自动获取到信息。在测试过程…

基站/手机是怎么知道信道情况的?

在无线通信系统中,信道的情况对信号的发送起到至关重要的作用,基站和手机根据信道的情况选择合适的资源配置和发送方式进行通信,那么基站或者手机是怎么知道信道的情况呢? 我们先来看生活中的一个例子,从A地发货到B地…

小程序如何设置自动预约快递

小程序通过设置自动预约功能,可以实现自动将订单信息发送给快递公司,快递公司可以自动上门取件。下面具体介绍如何设置。 在小程序管理员后台->配送设置处,选择首选配送公司。为了能够支持自动预约快递,请选择正常的快递公司&…

vue3写nav滚动事件中悬停在顶部

1. 防抖类Animate, 使用requestAnimationFrame代替setTimeout 也可以使用节流函数, lodash有现成的防抖和节流方法 _.debounce防抖 _.throttle节流 export default class Animate {constructor() {this.timer null;}start (fn) > {if (!fn) {throw new Error(需要执行…

力扣:147. 对链表进行插入排序(Python3)

题目: 给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中&#xff0c…

解决在Win7下运行一些老游戏花屏或色彩异常问题的方法

有一些喜欢回顾经典老游戏的玩家们,在目前最新的windows7的操作系统下,运行某些游戏会出现花屏,问题的原因是因为win7对这些游戏的DirectDraw不兼容,一种方法是改游戏配置文件,把游戏色彩8bit改成16bit,当然…

安装pytorch报错torch.cuda.is_available()=false的解决方法

参考文章: https://blog.csdn.net/qq_46126258/article/details/112708781 https://blog.csdn.net/Andy_Luke/article/details/122503884 https://blog.csdn.net/anmin8888/article/details/127910084 https://blog.csdn.net/zcs2632008/article/details/127025294 …