当前位置: 首页 > 知识库问答 >
问题:

node.js - 为什么没有报错呢?

卜瀚漠
2024-04-04

书上说这段代码在目录被glob匹配的情况下(如node_modules/fs.stat)应该报错,但是我在本地执行没有。

下面代码实现了一个copy的功能,将source directory下的所有文件复制到destination directory
对这段代码的几点说明:

  • 此处的glob版本为7.2.3,最新版本的glob是基于promise的,不再支持回调。
  • fs-extra提供了更多的功能,相比于fs

    • fs.ensureDir确保该目录存在,如果不存在,就创建一个。
    • fs.copy复制一个文件或目录。
    import glob from 'glob'import fs from 'fs-extra'import path from 'path'const [srcRoot, dstRoot] = process.argv.slice(2)glob(`${srcRoot}/**/*.*`, { ignore: '*.bck' }, (err, files) => {if (err) {  console.log(err)} else {  for (const srcName of files) {    const dstName = srcName.replace(srcRoot, dstRoot)    const dstDir = path.dirname(dstName)    fs.ensureDir(dstDir, (err) => {      if (err) {        console.error(err)      } else {        fs.copy(srcName, dstName, (err) => {          if (err) {            console.error(err)          }        })      }    })  }}})

    执行

    rm -rf /tmp/outmkdir /tmp/outnode copy-file-unfiltered.js ../node_modules /tmp/out 2>&1 | head -n 6

    书上说应该出现如下错误

    [Error: ENOENT: no such file or directory, chmod \'/tmp/out/@nodelib/fs.stat/README.md'] {errno: -2,code: 'ENOENT',syscall: 'chmod',path: '/tmp/out/@nodelib/fs.stat/README.md'}

    书上对此错误做出了如下解释

    The problem is that node_modules/fs.stat and node_modules/fs.walk match our globbing expression, but are directories rather than files.

但是我在本地复现的时候并没有出现这个错误,fs.ensureDir确保了目录存在,怎么会报no such file or directory错误呢?

共有1个答案

计胤
2024-04-04

为什么要这么麻烦?尽信书不如无书,现在复制目录直接 await fs.cp(from, to, { recursive: true }) 就行了,了不起加一句 mkdir(to, { recursive: true })

node.js 马上就要 22 了,现在学就不用从上古版本学起了。不要在这种细节上浪费时间。

 类似资料:
  • 问题内容: 当我发现 Node.js是使用V8 JavaScript引擎构建的时 ,我想到: 太好了,因为网页将像在浏览器中一样呈现,并且具有支持XPath的“本机” DOM和在执行的页面上进行的任何AJAX调用,因此网页抓取将更加容易。 当它使用与Chrome相同的JavaScript引擎时,为什么没有本地DOM? 为什么它没有在已检索页面中运行JavaScript的模式? 我对JavaScri

  • 使用指南 - 数据报告 - 概述 - 为什么有些报告没有权限 在百度统计中,无权限报告所属的站点应是“权限站点”,权限站点在右上角站点选择下拉框中有“权限站点”的字样标注,如图所示: 权限站点是其他账户将其自有站点授权给您查看数据的站点,在授权时定义了您的查看和设置权限。如果此报告无权限,说明授权发起者未授权给您。 您可以在“管理->网站列表”的“权限网站”标签下,查看该站点的权限来源账户,如需开

  • 我正在尝试使用JUnit错误收集器报告错误。虽然我的断言失败了,但JUnit中并没有报告错误。但我在控制台中收到了“错误”信息。

  • 使用指南 - 数据报告 - 百度推广 - 为什么推广报告中没有数据 如果确认代码安装正确(点此查看如何检查代码安装正确),那么百度推广报告中没有数据或者数据显示不全,可能有以下原因: 1、您的查看时间为添加代码的当天,此时百度推广数据尚未生成,要等次日查看; 2、如果是某个特定的计划、单元或关键词没有数据,请检查: (1)您是否在全部的百度推广URL中安装了代码? 请确保在全部的百度推广URL都安

  • 错误 C1001 内部编译器错误。 错误 E0065 应输入“;” 为什么会显示这种错误啊

  • 问题内容: 我正在尝试做这样的事情: 不幸的是,即使在Java 9中也不存在。 为什么它被遗漏了? 建议的解决方法是什么? 问题答案: 为什么它被遗漏了? 该API提供了可重用的构建块。这里的相关积木是,,。通过这些,您可以实现所需的功能:将流内映射到对象,然后获得平面图。提供构建基块的排列是不切实际的,并且很难扩展。 建议的解决方法是什么? 如前所述,使用可用的构建基块(+ ):