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.mkdir
或fs.mkdirSync
时,同时传递folder1/folder2/folder3
、folder1
和folder2
等路径必须存在,否则会出现上述错误。
【讨论】:
【参考方案6】:当指定路径上的任何文件夹丢失时,mkdir
将抛出 ENOENT
。
有 2 种可能的解决方案(不使用 3rd 方包):
为路径上每个不存在的目录递归调用fs.mkdir
。
使用 v10.12 中引入的recursive
选项:fs.mkdir('./path/to/dir', recursive: true, err => )
【讨论】:
我如何知道“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
Elastic Beanstalk 上的 Sidekiq 进程 - Errno::ENOENT:没有这样的文件或目录 - getcwd