nodeJS路径模块无法解析目录路径

时间:2020-07-05 01:45:46

标签: node.js node-modules filepath

我想创建一个CLI来引导我的项目。一切正常,但是为了复制模板文件,我使用ncp,在其中将模板目录作为参数。所以我尝试了,

import chalk from 'chalk';
import path from 'path';
import fs from 'fs';
import { promisify } from 'util';
const access = promisify(fs.access);
...
const templateDir = path.resolve(
    new URL(import.meta.url).pathname,
    '../../templates',
    'project_name'
  );

  try {
    await access(templateDir, fs.constants.R_OK);
  } catch (err) {
    console.error('%s Invalid template name', chalk.red.bold('ERROR'));
    process.exit(1);
  }
...

我得到了ERROR Invalid template name

然后我试图找出问题所在,

 //* after getting ERROR Invalid template name
  //* checking file exist or not
  fs.stat(templateDir, function (err, stat) {
    if (err == null) {
      console.log('File exists');
    } else if (err.code === 'ENOENT') {
      // file does not exist
      console.log("file doesn't exit");
    } else {
      console.log('Some other error: ', err.code);
    }
  });
file doesn't exit
[Error: ENOENT: no such file or directory, access 'G:\G:\CLI%20project\create-project\templates\javascript'] {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'access',
  path: 'G:\\G:\\CLI%20project\\create-project\\templates\\javascript'
}
ERROR Invalid template name

我希望访问权限应为G:\CLI%20project\create-project\templates\javascript,但它没有给出该权限。哪里发生了错?我使用esm模块加载程序。

2 个答案:

答案 0 :(得分:0)

请仔细阅读错误内容。

[Error: ENOENT: no such file or directory, access 'G:\G:\CLI%20project\create-project\templates\javascript'] {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'access',
  path: 'G:\\G:\\CLI%20project\\create-project\\templates\\javascript'
}

他们不是在欺骗您。他们只是在告诉你/

G:\\G:\\

出现错误消息是有原因的。

答案 1 :(得分:0)

我遇到了同样的问题,并找到了答案:

const templateDir = path.resolve(
    new URL(import.meta.url).pathname, // This is where it gives the error
    '../../templates',
    options.template
);

将新的URL (import.meta.url).pathname更改为__filename。它对我有用。