尝试访问现有目录时,NodeJS ENOENT问题

时间:2019-03-22 10:52:36

标签: node.js terminal command-line-interface fs

我正在尝试通过从实例化节点的主目录中的templates文件夹中复制它们来创建将用于创建项目结构(包含所有必需的文件夹和文件)的NodeJS CLI处理。但是看来我在获取正确路径时遇到了一些问题。我有此功能,该功能应采用当前目录路径,用户将在此位置从终端运行命令,然后在该位置复制文件:

export async function createProject(options) {
  options = {
    ...options,
    targetDirectory: options.targetDirectory || process.cwd()  // CWD -> current working directory
  }

  // ISSUE is probably around here
  const currentFileUrl = import.meta.url;
  const templateDir = path.resolve(
    new URL(currentFileUrl).pathname,
    '../../templates',
    options.template.toLowerCase()
  );
  options.templateDirectory = templateDir;
  console.log(templateDir)
 // ISSUE is probably around here

  try {
    await access(templateDir, fs.constants.R_OK);
  } catch (err) {
    console.log(`%s ${err}`, chalk.bold.red("ERROR"));
    console.log('%s Invalid Template', chalk.bold.red("ERROR"))
    process.exit(1)
  }

  console.log("Copy project files...")
  await copyTemplateFiles(options);

  console.log("%s Project ready", chalk.bold.green("DONE"))
  return true;
}

我已经指出了我认为的原因,因为当我仅控制台记录templateDir值时,它将返回以下路径:

C:\E:\Web%20development\Projects\creator-cli\templates\javascript

在路径前加上两个分区,这可能导致其失败。这是我得到的错误

Error: ENOENT: no such file or directory, access 'C:\E:\Web%20development\Projects\creator-cli\templates\javascript'

我不知道为什么用C:\E:\来做。任何帮助将不胜感激:)

0 个答案:

没有答案