Проверьте, существует ли файл в Gulp
Мне нужно проверить, существует ли файл в задаче gulp, я знаю, что могу использовать некоторые функции node из node, есть два:
fs.exists()
и fs.existsSync()
Проблема заключается в том, что в документации node говорится, что эти функции будут устаревшими
Ответы
Ответ 1
Вы можете использовать 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);
}
});
Список доступных кодов ошибок здесь
Использование fs.access()
для проверки доступности файла перед вызовом fs.open(), fs.readFile()
или fs.writeFile()
не рекомендуется. Это вводит условие гонки, поскольку другие процессы могут изменять состояние файла между двумя вызовами. Вместо этого пользовательский код должен открывать/читать/записывать файл напрямую и обрабатывать возникшую ошибку, если файл недоступен.
Ответ 2
Вы можете добавить
var f;
try {
var f = require('your-file');
} catch (error) {
// ....
}
if (f) {
console.log(f);
}
Ответ 3
С 2018 года вы можете использовать fs.existsSync()
:
fs.exists() устарела, а fs.existsSync() - нет. Параметр обратного вызова для fs.exists() принимает параметры, которые несовместимы с другими обратными вызовами Node.js. fs.existsSync() не использует обратный вызов.
Смотрите этот ответ для более подробной информации.
Ответ 4
node documentatión не рекомендует использовать stat, чтобы проверить, существует ли файл:
Используя fs.stat(), чтобы проверить наличие файла перед вызовом fs.open(), fs.readFile() или fs.writeFile() не рекомендуется. Вместо этого код пользователя должен открывать/читать/записывать файл напрямую и обрабатывать ошибка поднята, если файл недоступен.
Чтобы проверить, существует ли файл без последующего манипулирования им, Рекомендуется использовать fs.access().
Если вам не нужно читать или писать файл, вы должны использовать fs.access
, простой и асинхронный способ:
try {
fs.accessSync(path)
// the file exists
}catch(e){
// the file doesn't exists
}
Ответ 5
Я считаю, что пакет fs-access
устарел, иначе вы можете использовать:
path-exists
.
file-exists
.
Intracutions (путь-существует):
npm install path-exists --save
const myFile = '/my_file_to_ceck.html';
const exists = pathExists.sync(myFile);
console.log(exists);
Intracutions (файл существует):
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: путь существует
NPM ссылка: файл существует