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

Posted

技术标签:

【中文标题】ENOENT,fs.mkdirSync 上没有这样的文件或目录【英文标题】:ENOENT, no such file or directory on fs.mkdirSync 【发布时间】:2015-04-14 10:01:57 【问题描述】:

我目前正在启动我的 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)

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

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 是如何出现的。

【问题讨论】:

让我看看你的objectPath,请 对象路径是错误返回的,./realworks/objects/ 您是否尝试递归地创建这些目录? fs.mkdir() 不能或不能这样做。我的猜测是文件夹“realworks”还不存在,这就是它抛出的原因。如果是这种情况,请尝试使用:npmjs.com/package/mkdirp @Charminbear 两个目录(父目录和子目录)实际上已经存在。所以第一个问题是 fs.existsSync 似乎失败了,然后创建一个已经存在的目录失败了。 ./realworks/objects/ 是相对于节点可执行文件而不是你的脚本,只是说。 【参考方案1】:

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

碰巧我正在测试windows最近启动的ubuntu终端安装在windows电脑上,就像虚拟机一样,但实际上并没有那么凌乱。

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

【讨论】:

与操作系统无关【参考方案2】:

什么对我有用;

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

【讨论】:

【参考方案3】:

ENOENT 在linux documentation 中描述如下:

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

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

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

这发生在我构建 docker 映像时,我没有足够的权限在当前 WORKDIR 中创建子文件夹。使用 --chown=user:usergroup 更改文件夹的所有者或将指令的 USER 更改为 root 用户都是该问题的有效解决方案。

【讨论】:

【参考方案4】:

在这里解决How to create full path with node's fs.mkdirSync?

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

fs.mkdirSync(targetDir,  recursive: true );

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

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

【讨论】:

b/c 这个答案专门针对mkdirSync,就像 OP +1 一样【参考方案5】:

当您使用fs.mkdirfs.mkdirSync时,同时传递folder1/folder2/folder3folder1folder2等路径必须存在,否则会出现上述错误。

【讨论】:

【参考方案6】:

当指定路径上的任何文件夹丢失时,mkdir 将抛出 ENOENT

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

为路径上每个不存在的目录递归调用fs.mkdir。 使用 v10.12 中引入的recursive 选项:fs.mkdir('./path/to/dir', recursive: true, err =&gt; )

【讨论】:

我如何知道“v10.12 中引入了递归选项”?有官方文件吗? @ZilMike 是的,官方文档对每个功能都有一个历史部分(您需要通过单击它来展开它)参见nodejs.org/api/fs.html#fs_fs_mkdir_path_options_callback 奇怪的是,在 10.19.0 中,即使有标志,它也无法正常工作。【参考方案7】:

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

【讨论】:

【参考方案8】:

以下内容对我有用:

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

【讨论】:

【参考方案9】:

试试:

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

【讨论】:

这应该是一个评论,直到被证明是修复。【参考方案10】:

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

【讨论】:

那么解决办法是什么??您只是从您的角度告诉我们原因。你应该给出一个你可以接受的解决方案

以上是关于ENOENT,fs.mkdirSync 上没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

错误:ENOENT:没有这样的文件或目录,stat ... .steampath

错误:ENOENT:没有这样的文件或目录,scandir

错误:ENOENT,没有这样的文件或目录“未定义”

Elastic Beanstalk 上的 Sidekiq 进程 - Errno::ENOENT:没有这样的文件或目录 - getcwd

Webpack bundle ENOENT:没有这样的文件或目录 fs.readdirSync

ENOENT:没有这样的文件或目录。?