javascript - 错误:ENOENT:没有这样的文件或目录,访问
问题描述
请!!帮我弄清楚为什么它会抛出“错误:ENOENT:没有这样的文件或目录,访问”
我在项目中创建了一个模板目录。
这是我的项目文件结构:
> bin
>src
>cli.js
>main.js
> templates
> javascript
>src
>package.json
>test-dir
>.gitignore
>LICENSE
>package.json
>readme.md
cli.js
import arg from "arg";
import inquirer from "inquirer";
import { chakatiFire } from "./main.js";
function parseArgumnetsOptions(rawArguments) {
let args = arg(
{
"--git": Boolean,
"--help": Boolean,
"--yes": Boolean,
"--install": Boolean,
"--g": "--git",
"--h": "--help",
"--y": "--yes",
"--i": "--install",
},
{
argv: rawArguments.slice(2),
}
);
return {
skipPrompts: args["--yes"] || false,
git: args["--git"] || false,
template: args._[0],
runInstall: args["--install"] || false,
};
}
async function promptErrorMissingOpts(opts) {
const defaultTemplate = "JavaScript";
if (opts.skipPrompts) {
return {
...opts,
template: opts.template || defaultTemplate,
};
}
const displayOptions = [];
if (!opts.template) {
displayOptions.push({
type: "list",
name: "template",
message: "What template would you like to use?",
choices: ["JavaScript"],
default: defaultTemplate,
});
}
if (!opts.git) {
displayOptions.push({
type: "confirm",
name: "git",
message: "Would you like to use git?",
default: false,
});
}
const userInput = await inquirer.prompt(displayOptions);
return {
...opts,
template: opts.template || userInput.template,
git: opts.git || userInput.git,
};
}
export async function cli(args) {
let opts = parseArgumnetsOptions(args);
opts = await promptErrorMissingOpts(opts);
// console.log(opts);
await chakatiFire(opts);
}
main.js
import chalk from "chalk";
import fs from "fs";
import path from "path";
import ncp from "ncp";
import { promisify } from "util";
// access
const access = promisify(fs.access);
// reccusive copy
const copy = promisify(ncp);
// async function to copy template files
async function copyTemplateFiles(opts) {
return copy(opts.templateDirectory, opts.targetDirectory, {
clobber: false,
});
}
export async function chakatiFire(opts) {
opts = {
...opts,
targetDirectory: opts.targetDirectory || process.cwd(),
};
const fullPathName = new URL(import.meta.url).pathname;
const templateDir = path.resolve(
fullPathName.substr(fullPathName.indexOf("/")),
"../../templates",
opts.template.toLowerCase()
);
opts.templateDirectory = templateDir;
try {
await access(templateDir, fs.constants.R_OK);
} catch (err) {
console.log(chalk.red(`Template directory ${templateDir} does not exist`));
console.log(err);
process.exit(1);
}
console.log("Copy project files");
await copyTemplateFiles(opts);
console.log(chalk.green(`Creating project from template ${opts.template}`));
return true;
}
当我在 test-dir 中运行命令(chakati-fire javascript --git)时,它会抛出这样的错误=>
PS D:\JavaScript_Projects\chakati\chakati-fire\test-dir> chakati-fire javascript --git 模板目录 D:\D:\JavaScript_Projects\chakati\chakati-fire\templates\javascript 不存在 [错误:ENOENT:没有这样的文件或目录,访问 'D:\D:\JavaScript_Projects\chakati\chakati-fire\templates\javascript'] { errno: -4058, code: 'ENOENT', syscall: 'access', path: 'D: \D:\JavaScript_Projects\chakati\chakati-fire\templates\javascript' }
解决方案
您从代码中获得的路径是D:\D:\JavaScript_Projects\chakati\chakati-fire\templates\javascript
(double D:\
),它不存在。
推荐阅读
- javascript - 如何在使用 ws npm 模块的 javascript 中使用 ws.send() 时发送 EOF
- python - 转换 .bat 文件以打开和加载 putty 会话到 Python
- php - Mailgun API - 发送多个附件
- sql-server - SQL Server 自动启动例程
- python - Windows SSL 证书存储和 Python LDAP
- java - 我应该在 OnBindViewHolder() 方法中设置 ReyclerView 的 Item 的 OnClickListener 吗?
- c# - ASP.NET Firebase 验证令牌 ID
- java - Android [LocationManager] requestLocationUpdates(), java.lang.RuntimeException
- swift - 为什么我的 Image CIPerspectiveCorrection 在每台设备上都不同?
- node.js - 如果我在节点服务器中将超时值设置为 0,是否会对性能产生影响?