检查 Gulp 中是不是存在文件

Posted

技术标签:

【中文标题】检查 Gulp 中是不是存在文件【英文标题】:Check if file exist in Gulp检查 Gulp 中是否存在文件 【发布时间】:2015-08-01 15:37:36 【问题描述】:

我需要检查 gulp 任务中是否存在文件,我知道我可以使用 node 中的一些 node 函数,有两个:

fs.exists()fs.existsSync()

问题是在节点文档中,说这些功能将被弃用

【问题讨论】:

Check synchronously if file/directory exists in Node.js的可能重复 【参考方案1】:

我相信fs-access 包已经贬值,或者你可能想使用:

path-exists.

file-exists.

内幕(路径存在):

npm install path-exists --save

const myFile = '/my_file_to_ceck.html';
const exists = pathExists.sync(myFile);
console.log(exists);

内幕(文件存在):

npm install file-exists --save


const fileExists = require('file-exists');
const myFile = '/my_file_to_ceck.html';
fileExists(myFile, (err, exists) => console.log(exists))

NPM Link: path exists

NPM Link: file exists

【讨论】:

【参考方案2】:

截至2018年,您可以使用fs.existsSync()

fs.exists() 已弃用,但 fs.existsSync() 不是。 fs.exists() 的回调参数接受与其他 Node.js 回调不一致的参数。 fs.existsSync() 不使用回调。

See this answer for more details.

【讨论】:

【参考方案3】:

您可以使用fs.access

fs.access('/etc/passwd', (err) => 
    if (err) 
        // file/path is not visible to the calling process
        console.log(err.message);
        console.log(err.code);
    
);

可用错误代码列表here


不建议在调用fs.open(), fs.readFile()fs.writeFile() 之前使用fs.access() 检查文件的可访问性。这样做会引入竞争条件,因为其他进程可能会在两次调用之间更改文件的状态。相反,用户代码应该直接打开/读取/写入文件并处理文件不可访问时引发的错误。

【讨论】:

当前节点文档[不推荐使用stat检查文件是否存在][1]: [1]:nodejs.org/api/fs.html#fs_fs_stat_path_callback【参考方案4】:

节点文档does not recommend using stat to check wether a file exists:

不建议在调用 fs.open()、fs.readFile() 或 fs.writeFile() 之前使用 fs.stat() 检查文件是否存在。 相反,用户代码应该直接打开/读取/写入文件并处理 如果文件不可用,则会引发错误

要检查文件是否存在而不随后对其进行操作, 推荐使用 fs.access()。

如果你不需要读写文件你应该使用fs.access,简单的异步方式是:

try 
	fs.accessSync(path)
	// the file exists
catch(e)
	// the file doesn't exists

【讨论】:

【参考方案5】:

你可以添加

var f;

try 
  var f = require('your-file');
 catch (error) 

  // ....


if (f) 
  console.log(f);

【讨论】:

以上是关于检查 Gulp 中是不是存在文件的主要内容,如果未能解决你的问题,请参考以下文章

检查文件目录中是不是存在文件

检查包中是不是存在文件

检查文件夹中是不是存在文件[重复]

如何检查文件夹中是不是存在文件?

检查文件是不是存在于javascript中?

检查目录中是不是存在 JSON 文件 - Swift