ENOENT,fs.mkdirSync 上没有这样的文件或目录

问题描述 投票:0回答:11

我目前正在启动我的 NodeJS 应用程序,并且有以下 if 语句:

Error: ENOENT, no such file or directory './realworks/objects/'
    at Object.fs.mkdirSync (fs.js:654:18)
    at Object.module.exports.StartScript (/home/nodeusr/huizenier.nl/realworks.js:294:7)

然而,奇怪的是该文件夹已经存在,但检查在以下代码段上失败:

if(fs.existsSync(objectPath)) {
    var existingObjects = fs.readdirSync(objectPath);
    existingObjects.forEach(function (objectFile) {
        var object = JSON.parse(fs.readFileSync(objectPath+objectFile));
        actualObjects[object.ObjectCode] = object;
    });
}else{
    fs.mkdirSync(objectPath); // << this is line 294
}

我不明白在创建目录时如何会出现

no such file or directory

node.js
11个回答
86
投票

当给定路径上的任何文件夹丢失时,

mkdir
将抛出一个
ENOENT

有 2 种可能的解决方案(不使用第 3 方软件包):

  • 对路径上每个不存在的目录递归调用
    fs.mkdir
  • 使用
    recursive
    选项,在v10.12中引入:
    fs.mkdir('./path/to/dir', {recursive: true}, err => {})

26
投票

这里解决如何用node的fs.mkdirSync创建完整路径?

NodeJS 版本 10.12.0 添加了对 mkdir 和 mkdirSync 的本机支持,以使用 recursive: true 选项递归创建目录,如下所示:

fs.mkdirSync(targetDir, { recursive: true });

如果你更喜欢 fs Promises API,你可以写

fs.promises.mkdir(targetDir, { recursive: true });

9
投票

当您使用

fs.mkdir
fs.mkdirSync
时,传递
folder1/folder2/folder3
folder1
folder2
等路径时必须存在,否则会出现上述错误。


3
投票

以下对我有用:

fs.mkdir( __dirname + '/realworks/', err => {})

0
投票

问题是由

forever
相对于调用
forever start
命令的工作目录(而不是应用程序入口点的位置)运行应用程序引起的。


0
投票

尝试:

fs.mkdir('./realworks/', err => {})

0
投票

错误的原因是,如果 fs.mkdir 或 fs.mkdirSync 的路径上存在任何文件夹,这些方法将抛出/回调 ENOENT 错误。


0
投票

ENOENT 在 linux 文档 中的描述如下:

没有这样的文件或目录(POSIX.1-2001)。

通常,当指定路径时会出现此错误 - 名称不存在,或者名称中的组件之一不存在 路径名的目录前缀不存在,或者 指定的路径名是一个悬空符号链接。

ENOENT 的另一个可能原因是您缺乏足够的权限来创建目录。

我在构建 docker 映像时发生了这种情况,我没有足够的权限在当前 WORKDIR 中创建子文件夹。使用

--chown=user:usergroup
更改文件夹的所有者或将
USER
更改为指令的
root
用户都是该问题的有效解决方案。


0
投票

对我有用的是;

  1. 删除我的yarn.lock、package-lock.json和nodemodules
  2. 使用
    yarn build
  3. 重新安装
  4. 重新启动我的本地服务器

0
投票

这可能听起来很奇怪,但这是一个可能的问题。 在创建目录然后在其中写入文件时,我遇到了同样的错误。

我将

fs.promises.mkdir
recursive: true
一起使用,然后使用
fs.promises.writeFile

writeFile
抛出的错误,因为目录不存在。

尽管

mkdir
兑现了承诺,但似乎操作系统仍然没有创建它。

一个可能的解决方案是在

mkdir
之后添加睡眠,我不喜欢这样解决,但它有效。

import { promises as fs } from 'fs';
...
await fs.mkdir(dirname(filePath), { recursive: true });
await new Promise(r => setTimeout(r, 300)); // Sometimes the OS needs time to create the directory
await fs.writeFile(filePath, content);

-1
投票

所以...您可能正在使用 ubuntu 终端来创建您的 React 应用程序。

我正巧正在测试windows最近推出的ubuntu终端安装在windows电脑上,就像一个虚拟机但其实没那么乱。

我碰巧遇到了和你们一样的错误,在测试了社区之前提供的所有选项后,没有一个起作用。但是,我确实找到了解决我的问题的方法。它给了我 ENOENT 错误,例如未找到测试文件或目录。但我确实在那里。我正在使用 npm start,并想出了使用 sudo npm start 的想法......并且它起作用了。

© www.soinside.com 2019 - 2024. All rights reserved.