Apa yang paling membanggakan Node ialah ia mempunyai teras yang sangat kecil. Walaupun sesetengah bahasa mempunyai pengikatan API POSIX penuh, Node melaksanakan sesedikit mungkin pengikatan dan mendedahkannya melalui API segerak, tak segerak atau penstriman.
Pendekatan ini bermakna terdapat beberapa ciri yang sangat mudah dalam sistem pengendalian yang perlu dibina semula dalam Node. Ini ialah tutorial praktikal yang mengajar anda cara menggunakan pakej sistem fail.
Memetik fail
Adalah penting apabila berinteraksi dengan sistem fail untuk menunjuk ke fail yang betul. Oleh kerana pakej NPM menggunakan rujukan laluan relatif, anda tidak boleh mengekod laluan secara keras. Terdapat dua cara utama untuk memastikan pakej merujuk fail yang betul:
// 使用 `path.join()` 而不是 `+` 确保Windows也能正常工作 const path = require('path') // 找到基于调用点的相对路径,对于命令行程序(CLI applications)非常实用 path.join(process.cwd(), 'my-dynamic-file') // 或者 path.resolve('my-dynamic-file') // 基于一个文件找到另外一个文件 path.join(__dirname, 'my-package-file')
Baca fail
Cara paling mudah untuk membaca fail secara tidak segerak dalam nod ialah menggunakan strim! Berikut ialah contoh:
const path = require('path') const fs = require('fs') // read a file and pipe it to the console fs.createReadStream(path.join(__dirname, 'my-file')) .pipe(process.stdout)
Buat fail
Membuat fail tidak sukar. Berikut ialah arahan kucing yang dilaksanakan dalam nod:
const path = require('path') const fs = require('fs') // cat ./my-file > ./my-other-file fs.createReadStream(path.join(__dirname, 'my-file')) .pipe(fs.createWriteStream(path.join(__dirname, './my-other-file')))
Padam fail
Fail dan direktori yang dipadamkan dalam skrip shell biasanya menggunakan arahan rm-rf. Rimraf dalam NodeJS juga melaksanakan fungsi yang sama:
const rimraf = require('rimraf') const path = require('path') rimraf(path.join(__dirname, './my-directory'), err => { if (err) throw err })
Cipta direktori
Mencipta dan memadam fail adalah sangat serupa, menggunakan pakej mkdirp
const mkdirp = require('mkdirp') const path = require('path') mkdirp(path.join(__dirname, 'foo/bar'), err => { if (err) throw err })
Cari fail
Gunakan readdirp untuk mencari fail dalam direktori semasa:
const readdirp = require('readdirp') const json = require('JSONStream') const path = require('path') // recursively print out all files in all subdirectories // to the command line. The object stream must be // stringified before being passed to `stdout`. readdirp({ root: path.join(__dirname) }) .pipe(json.stringify()) .pipe(process.stdout)
Gunakan findup untuk mencari fail dalam direktori induk semasa:
const findup = require('findup') const path = require('path') // recurse up all files relative to __dirname and find // all `package.json` files. findup(path.join(__dirname), 'package.json', (err, res) => { if (err) throw err console.log('dir is: ' + res) })
Mengenai paip
Ia amat berguna untuk mengendalikan ralat keseluruhan aliran data sekali dalam perancangan. Daripada menggunakan .on('error', cb) untuk setiap aliran data individu:
const pump = require('pump') const fs = require('fs') // oh no, no errors are handled! fs.createReadStream('./in.file').pipe(fs.createWriteStream('./out.file')) // that's better, we're handing errors now const rs = fs.createReadStream('./in.file') const ws = fs.createWriteStream('./out.file') pump(rs, ws, err => { if (err) throw err })