我想创建一个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模块加载程序。
答案 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
。它对我有用。