node.js - 使用 `ncp` 复制文件会抛出 : no such file or directory, mkdir

标签 node.js glob fs-extra

我正在使用 ncp 复制文件,如下所示:

import ncp from "ncp";
import { promisify } from "util";

const ncpPromise = promisify(ncp);
const copyAssets = async (exportFolderName, includeSourceMaps) => {
  const assets = glob.sync("**/", { cwd: distPath });
  const options = { clobber: true, stopOnErr: true };
  if (!includeSourceMaps) {
    options.filter = (f) => {
      return !f.endsWith(".map");
    };
  }
  return Promise.all(
    assets.map((asset) => {
      return ncpPromise(
        path.join(distPath, asset),
        path.join(exportPath, exportFolderName, asset),
        options
      );
    })
  );
};

但这有时会失败并出现以下错误:

"ENOENT: no such file or directory, mkdir '/path/to/folder'"

我该如何解决这个问题?

最佳答案

我猜您正在尝试复制与给定 glob 匹配的所有文件,因此您需要执行以下操作:

const assets = glob.sync("**/*.*", { cwd: distPath }); // note the *.*

例如,当前有问题的 glob 将导致:

[
  'folder1/',
  'folder2/',
]

而这个答案中的 glob 将导致(这就是你想要的):

[
  'folder1/file1.txt',
  'folder1/file2.txt',
  'folder2/anotherfile.txt',
]

替代方案:

看起来像ncp没有得到维护。所以,你可以使用fs-extra ,它还可以复制文件和目录:

const glob = require("glob");
const path = require("path");
const fs = require("fs-extra");

const copyAssets = async (exportFolderName, includeSourceMaps) => {
  const assets = glob.sync("**/*.*", { cwd: distPath });

  const options = { overwrite: true };

  if (!includeSourceMaps) {
    options.filter = (f) => {
      return !f.endsWith(".map");
    };
  }

  return Promise.all(
    assets.map((asset) => {
      return fs
        .copy(
          path.join(distPath, asset),
          path.join(exportPath, exportFolderName, asset),
          options
        )
        .catch((e) => console.log(e));
    })
  );
};

关于node.js - 使用 `ncp` 复制文件会抛出 : no such file or directory, mkdir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66264194/

相关文章:

node.js - 如何使用 Node.js 在服务总线主题中创建新订阅?

c - 我如何获得此readdir代码示例以搜索其他目录

Ruby:Dir.glob 不返回任何文件

gulp.src (glob-stream) 负 glob 杀死匹配后的正 glob

node.js - fs-extra:复制文件而不覆盖

node.js - `fs-extra` 与 `bluebird ` 集成得到 `Cannot read property ' 然后 ' of undefined` 错误

javascript - 将 Canvas 发送到 UDP 多播地址 - 多播 Canvas 直播流

node.js - 如何在nodejs中将Uint8Array视频转换为帧

php - Nginx + PHP、Node.js 和 jQuery 设置

javascript - .then() 似乎没有等待前一个 .then()