модуль node-"fs-extra" используется вместо fs

Node.js задняя часть Linux JSON JavaScript Promise

code

fs-extra — это расширение fs, которое предоставляет множество удобных API, наследует все методы fs и добавляет поддержку промисов для методов fs.

должен бытьfsзамена.

Зачем?

Я устал включать mkdirp, rimraf и ncp в большинство своих проектов.

какая проблема была решена

Прежде чем использовать его, вы должны понять, какие проблемы решает сторонняя библиотека для существующей библиотеки, а не использовать ее ради использования.

fs-extra имитирует команду, аналогичную следующей в Linux:

root$ rm -rf /
root$ mv tmpDir tmpNewDir
root$ mkdir -p one/two
root$ cp -r tmp tmpNew
...

Удобно не так ли? Это то, что заставило меня влюбиться в него!

嘻嘻

Установить

npm install fs-extra -S

использование

Вместо fs всегда следует использовать fs-extra, все методы fs привязаны к fs-extra, все методы fs будут возвращать обещание, если не будет передан обратный вызов.

это больше не нужно

const fs = require('fs');

ты можешь сделать это сейчас

const fs = require('fs-extra');

Если вы хотите, чтобы было понятно, что вы используете fs-extra, вы можете изменить идентификатор fs на fse

const fse = require('fs-extra');

Вы можете оставить оба, но это избыточно, потому чтоfs-extraунаследовал фс

const fs = require('fs');
const fse = require('fs-extra');

Sync vs Async vs Async/Await

Большинство методов по умолчанию являются асинхронными, и все асинхронные методы возвращают обещание, если обратный вызов не передается.

Типичный пример:

const fs = require('fs-extra')

// 异步方法,返回promise
fs.copy('/tmp/myfile', '/tmp/mynewfile')
  .then(() => console.log('success!'))
  .catch(err => console.error(err))

// 异步方法,回调函数
fs.copy('/tmp/myfile', '/tmp/mynewfile', err => {
  if (err) return console.error(err)
  console.log('success!')
})

// 同步方法,注意必须使用try catch包裹着才能捕获错误
try {
  fs.copySync('/tmp/myfile', '/tmp/mynewfile')
  console.log('success!')
} catch (err) {
  console.error(err)
}

// Async/Await:
async function copyFiles () {
  try {
    await fs.copy('/tmp/myfile', '/tmp/mynewfile')
    console.log('success!')
  } catch (err) {
    console.error(err)
  }
}

copyFiles()

API Methods

Все приведенные ниже методы являются методами расширения fs-extra.

Асинхронный/асинхронный

  • copy
  • пустой каталог (псевдоним: пустой каталог)
  • ensureFile
  • sureDir (псевдоним: mkdirp, mkdirs)
  • ensureLink
  • ensureSymlink
  • mkdirp
  • mkdirs
  • move
  • outputFile
  • outputJson (псевдоним: outputJSON)
  • pathExists
  • readJson (псевдоним: readJSON)
  • remove
  • writeJson (псевдоним: writeJSON)

Синхронизация/Синхронизация

  • copySync
  • emptyDirSync
  • ensureFileSync
  • ensureDirSync
  • ensureLinkSync
  • ensureSymlinkSync
  • mkdirpSync
  • mkdirsSync
  • moveSync
  • outputFileSync
  • outputJsonSync
  • pathExistsSync
  • readJsonSync
  • removeSync
  • writeJsonSync

1. копировать (источник: строка, место назначения: строка, [параметры: объект, обратный вызов: функция])

Скопируйте файл или каталог, каталог может содержать содержимое, напримерcp -r

  • srcОбратите внимание, что если src является каталогом, он скопирует все содержимое этого каталога, а не весь каталог.
  • destОбратите внимание, что если src — это файл, то dest не может быть каталогом.
  • options
    • overwrite: перезаписать существующие файлы или каталоги, по умолчанию — true. Обратите внимание, что если для этого параметра установлено значение false и цель существует, операция копирования завершится неудачно. Используйте параметр errorOnExist, чтобы изменить это поведение.
    • errorOnExist: выдает ошибку, когда перезапись имеет значение false и цель существует. Значение по умолчанию — ложь.
    • dereference: символические ссылки разыменования, по умолчанию false.
    • preserveTimestamps: Если true, будет установлена ​​последняя модификация и время доступа к исходному файлу. Если false, поведение метки времени зависит от ОС. Значение по умолчанию — ложь.
    • filter: Фильтр функции копирования файлов. Возвращает true для включения и false для исключения. Также возможно вернуть обещание, которое разрешается как true или false (или передать асинхронную функцию).
  • callbackПерезвони

пример:

const fs = require('fs-extra')

// With a callback:
fs.copy('/tmp/myfile', '/tmp/mynewfile', err => {
  if (err) return console.error(err)

  console.log('success!')
}) // copies file

fs.copy('/tmp/mydir', '/tmp/mynewdir', err => {
  if (err) return console.error(err)

  console.log('success!')
}) // copies directory, even if it has subdirectories or files

// With Promises:
fs.copy('/tmp/myfile', '/tmp/mynewfile')
.then(() => {
  console.log('success!')
})
.catch(err => {
  console.error(err)
})

// With async/await:
async function example () {
  try {
    await fs.copy('/tmp/myfile', '/tmp/mynewfile')
    console.log('success!')
  } catch (err) {
    console.error(err)
  }
}

example()

Использовать функцию фильтра

const fs = require('fs-extra')

const filterFunc = (src, dest) => {
  // your logic here
  // it will be copied if return true
}

fs.copy('/tmp/mydir', '/tmp/mynewdir', { filter: filterFunc }, err => {
  if (err) return console.error(err)

  console.log('success!')
})

2. emptyDir (каталог: строка, [обратный вызов: функция])

Убедитесь, что каталог пуст. Если каталог не пуст, удалите содержимое каталога. Создайте каталог, если он не существует. Сам каталог не удаляется.

Псевдоним: emptydir()

  • dirЦелевой путь
  • callbackметод обратного вызова

пример:

const fs = require('fs-extra')

// assume this directory has a lot of files and folders
// With a callback:
fs.emptyDir('/tmp/some/dir', err => {
  if (err) return console.error(err)

  console.log('success!')
})

// With Promises:
fs.emptyDir('/tmp/some/dir')
.then(() => {
  console.log('success!')
})
.catch(err => {
  console.error(err)
})

// With async/await:
async function example () {
  try {
    await fs.emptyDir('/tmp/some/dir')
    console.log('success!')
  } catch (err) {
    console.error(err)
  }
}

example()

3. sureFile (файл: строка, [обратный вызов: функция])

Убедитесь, что файл существует. Если запрашиваемый файл находится в несуществующем каталоге, эти каталоги будут созданы. Если файл уже существует, никакие изменения не вносятся.

Псевдоним: createFile()

  • fileЦелевой путь
  • callbackметод обратного вызова

пример:

const fs = require('fs-extra')

const file = '/tmp/this/path/does/not/exist/file.txt'

// With a callback:
fs.ensureFile(file, err => {
  console.log(err) // => null
  // file has now been created, including the directory it is to be placed in
})

// With Promises:
fs.ensureFile(file)
.then(() => {
  console.log('success!')
})
.catch(err => {
  console.error(err)
})

// With async/await:
async function example (f) {
  try {
    await fs.ensureFile(f)
    console.log('success!')
  } catch (err) {
    console.error(err)
  }
}

example(file)

4. sureDir(dir: string, [обратный вызов: func])

Если структура каталогов не существует, она создается, если каталог существует, то не создается, аналогично mkdir -p.

Псевдоним: mkdirs(), mkdirp()

  • dirЦелевой путь
  • callbackметод обратного вызова

пример:

const fs = require('fs-extra')

const dir = '/tmp/this/path/does/not/exist'

// With a callback:
fs.ensureDir(dir, err => {
  console.log(err) // => null
  // dir has now been created, including the directory it is to be placed in
})

// With Promises:
fs.ensureDir(dir)
.then(() => {
  console.log('success!')
})
.catch(err => {
  console.error(err)
})

// With async/await:
async function example (directory) {
  try {
    await fs.ensureDir(directory)
    console.log('success!')
  } catch (err) {
    console.error(err)
  }
}

example(dir)

5. sureLink(srcpath: строка, dstpath: строка, [обратный вызов: func])

Убедитесь, что ссылка существует. Если структура каталогов не существует, создайте ее.

  • srcpathисходный путь
  • dstpathЦелевой путь
  • callbackметод обратного вызова

пример

const fs = require('fs-extra')

const srcpath = '/tmp/file.txt'
const dstpath = '/tmp/this/path/does/not/exist/file.txt'

// With a callback:
fs.ensureLink(srcpath, dstpath, err => {
  console.log(err) // => null
  // link has now been created, including the directory it is to be placed in
})

// With Promises:
fs.ensureLink(srcpath, dstpath)
.then(() => {
  console.log('success!')
})
.catch(err => {
  console.error(err)
})

// With async/await:
async function example (src, dest) {
  try {
    await fs.ensureLink(src, dest)
    console.log('success!')
  } catch (err) {
    console.error(err)
  }
}

example(srcpath, dstpath)

6.sureSymlink(srcpath: строка, dstpath: строка, [обратный вызов: func])

Убедитесь, что символическая ссылка существует. Если структура каталогов не существует, создайте ее.

  • srcpathисходный путь
  • dstpathЦелевой путь
  • callbackметод обратного вызова
const fs = require('fs-extra')

const srcpath = '/tmp/file.txt'
const dstpath = '/tmp/this/path/does/not/exist/file.txt'

// With a callback:
fs.ensureSymlink(srcpath, dstpath, err => {
  console.log(err) // => null
  // symlink has now been created, including the directory it is to be placed in
})

// With Promises:
fs.ensureSymlink(srcpath, dstpath)
.then(() => {
  console.log('success!')
})
.catch(err => {
  console.error(err)
})

// With async/await:
async function example (src, dest) {
  try {
    await fs.ensureSymlink(src, dest)
    console.log('success!')
  } catch (err) {
    console.error(err)
  }
}

example(srcpath, dstpath)

7. move(src: string, dest: string, [options: object, callback: func])

Перемещайте файлы или каталоги даже между устройствами. похожийmv

  • srcpathисходный путь
  • dstpathЦелевой путь
  • options
    • overwrite: перезаписать существующий файл или каталог, по умолчанию — false.
  • callbackметод обратного вызова

пример:

const fs = require('fs-extra')

const srcpath = '/tmp/file.txt'
const dstpath = '/tmp/this/path/does/not/exist/file.txt'

// With a callback:
fs.move(srcpath, dstpath, err => {
  if (err) return console.error(err)

  console.log('success!')
})

// With Promises:
fs.move(srcpath, dstpath, {
  overwrite: true
})
.then(() => {
  console.log('success!')
})
.catch(err => {
  console.error(err)
})

// With async/await:
async function example (src, dest) {
  try {
    await fs.move(srcpath, dstpath)
    console.log('success!')
  } catch (err) {
    console.error(err)
  }
}

example(srcpath, dstpath)

8. outputFile(файл: перемешивание, данные: строка|буфер|Uint8Array, [опции: строка|объект, обратный вызов: функция])

Почти так же, как writeFile (т. е. перезаписывает), за исключением того, что родительский каталог создается, если он не существует. файл должен быть путем к файлу (буферы или файловые дескрипторы не допускаются).

  • fileнаписать путь к файлу
  • dataданные записываются в файл
  • options
  • callbackметод обратного вызова

пример:

const fs = require('fs-extra')

const file = '/tmp/this/path/does/not/exist/file.txt'

// With a callback:
fs.outputFile(file, 'hello!', err => {
  console.log(err) // => null

  fs.readFile(file, 'utf8', (err, data) => {
    if (err) return console.error(err)
    console.log(data) // => hello!
  })
})

// With Promises:
fs.outputFile(file, 'hello!')
.then(() => fs.readFile(file, 'utf8'))
.then(data => {
  console.log(data) // => hello!
})
.catch(err => {
  console.error(err)
})

// With async/await:
async function example (f) {
  try {
    await fs.outputFile(f, 'hello!')

    const data = await fs.readFile(f, 'utf8')

    console.log(data) // => hello!
  } catch (err) {
    console.error(err)
  }
}

example(file)

9. outputJson (файл: строка, объект: объект, [параметры: объект, обратный вызов: функция])

Практически то же самое, что и writeJson, за исключением того, что если каталог не существует, он создается.

Псевдоним: outputJSON()

  • fileнаписать путь к файлу
  • objectОбъект JSON, записанный в файл
  • options
    • encoding| По умолчанию используется utf8.
    • modeПо умолчанию 0o666
    • flagсмотрите подробностиПоддерживаемые флаги файловой системы, по умолчанию 'w'
    • spaces Количество пробелов для отступа или строка, используемая для отступа (т. е. передайте тег '\t' для отступа)
    • EOLУстановите символ EOL. По умолчанию \n.
    • replacer JSON replacer
  • callbackметод обратного вызова

пример:

const fs = require('fs-extra')

const file = '/tmp/this/path/does/not/exist/file.json'

// With a callback:
fs.outputJson(file, {name: 'JP'}, err => {
  console.log(err) // => null

  fs.readJson(file, (err, data) => {
    if (err) return console.error(err)
    console.log(data.name) // => JP
  })
})

// With Promises:
fs.outputJson(file, {name: 'JP'})
.then(() => fs.readJson(file))
.then(data => {
  console.log(data.name) // => JP
})
.catch(err => {
  console.error(err)
})

// With async/await:
async function example (f) {
  try {
    await fs.outputJson(f, {name: 'JP'})

    const data = await fs.readJson(f)

    console.log(data.name) // => JP
  } catch (err) {
    console.error(err)
  }
}

example(file)

10. pathExists (файл: строка [ обратный вызов: функция])

Проверяет существование заданного пути, проверяя файловую систему. Похоже на: fs.exists

  • fileПуть файла
  • callbackПерезвони

пример:

const fs = require('fs-extra')

const file = '/tmp/this/path/does/not/exist/file.txt'

// With a callback:
fs.pathExists(file, (err, exists) => {
  console.log(err) // => null
  console.log(exists) // => false
})

// Promise usage:
fs.pathExists(file)
  .then(exists => console.log(exists)) // => false

// With async/await:
async function example (f) {
  const exists = await fs.pathExists(f)

  console.log(exists) // => false
}

example(file)

11. readJson (файл: строка, [параметры: объект, обратный вызов: функция])

Прочитайте файл JSON, затем разберите его на объект

Псевдоним: readJSON()

  • fileПуть к JSON-файлу
  • options
    • throwsЕсли false и JSON недействителен, он не выдаст ошибку, по умолчанию true
  • callbackПерезвони

пример:

const fs = require('fs-extra')

// With a callback:
fs.readJson('./package.json', (err, packageObj) => {
  if (err) console.error(err)

  console.log(packageObj.version) // => 0.1.3
})

// With Promises:
fs.readJson('./package.json')
.then(packageObj => {
  console.log(packageObj.version) // => 0.1.3
})
.catch(err => {
  console.error(err)
})

// With async/await:
async function example () {
  try {
    const packageObj = await fs.readJson('./package.json')

    console.log(packageObj.version) // => 0.1.3
  } catch (err) {
    console.error(err)
  }
}

example()

12. удалить (путь: строка, [обратный вызов: функция])

Удалить файлы или каталоги. Каталог может содержать контент, напримерrm -rf

  • pathЦелевой путь
  • callbackПерезвони

пример:

const fs = require('fs-extra')

// remove file
// With a callback:
fs.remove('/tmp/myfile', err => {
  if (err) return console.error(err)

  console.log('success!')
})

fs.remove('/home/jprichardson', err => {
  if (err) return console.error(err)

  console.log('success!') // I just deleted my entire HOME directory.
})

// With Promises:
fs.remove('/tmp/myfile')
.then(() => {
  console.log('success!')
})
.catch(err => {
  console.error(err)
})

// With async/await:
async function example (src, dest) {
  try {
    await fs.remove('/tmp/myfile')
    console.log('success!')
  } catch (err) {
    console.error(err)
  }
}

example()

13. writeJson(файл, объект, [параметры, обратный вызов])

Записывает объекты в файлы JSON почти так же, как outputJson, за исключением того, что каталог должен существовать.

Псевдоним: writeJSON()

  • fileнаписать путь к файлу
  • objectОбъект JSON, записанный в файл
  • options
    • encoding| По умолчанию используется utf8.
    • modeПо умолчанию 0o666
    • flagсмотрите подробностиПоддерживаемые флаги файловой системы, по умолчанию 'w'
    • spaces Количество пробелов для отступа или строка, используемая для отступа (т. е. передайте тег '\t' для отступа)
    • EOLУстановите символ EOL. По умолчанию \n.
    • replacer JSON replacer
  • callbackметод обратного вызова

пример:

const fs = require('fs-extra')

// With a callback:
fs.writeJson('./package.json', {name: 'fs-extra'}, err => {
  if (err) return console.error(err)

  console.log('success!')
})

// With Promises:
fs.writeJson('./package.json', {name: 'fs-extra'})
.then(() => {
  console.log('success!')
})
.catch(err => {
  console.error(err)
})

// With async/await:
async function example () {
  try {
    await fs.writeJson('./package.json', {name: 'fs-extra'})
    console.log('success!')
  } catch (err) {
    console.error(err)
  }
}

example()

напиши в конце

Нет никаких сомнений в том, что fs-extra определенно является хорошим выбором для использования в производственной среде, но если вы хотите поиграть с черной технологией, вам все равно нужно больше узнать о модуле fs, в конце концов, это босс.

Оригинальная ссылка