2

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'"

どうすればこれを解決できますか?

4

2 に答える 2

2

特定のグロブに一致するすべてのファイルをコピーしようとしていると思うので、次のようにする必要があります。

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

たとえば、問題の現在のグロブは次のようになります。

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

一方、この回答のグロブは次のようになります(これはあなたが望むものです):

[
  '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));
    })
  );
};
于 2021-02-21T18:02:19.120 に答える