# 文件与路径
# 文件操作模块 fs
File System 文件操作系统。
// 引入文件系统 fs 模块
const fs = require("fs");
// 读取文件内容 需要硬盘操作文件,耗时
// fs.readFile('文件路径/文件名称','文件编码', callback);
// 读取上一级css目录下中的base.css
fs.readFile("../css/base.css", "UTF-8", (err, doc) => {
console.log(err);
if (err === null) {
// 如果文件读取发生错误,参数err的值为错误对象,否则err的值为null
// doc参数为文件内容
// 错误优先的回调函数
console.log(doc);
console.log("文件读取成功");
// output file contents in console
}
});
// 写入文件内容 需要硬盘操作文件,耗时
// fs.writeFile('文件路径/文件名称','数据',callback)
const contents = 'console.log("Hello World");';
fs.writeFile("./module.exports.js", contents, (err) => {
if (err != null) {
console.log(err); //如果出错,打印提示信息
console.log("文件写入失败");
return;
}
});
// 检查是否写入
fs.readFile("./module.exports.js", "utf-8", (err, doc) => {
if (err === null) {
console.log(doc);
console.log("文件写入成功");
}
});
# 路径操作模块 path
- 大多数情况下使用绝对路径,因为相对路径有时候相对的是命令行工具的当前工作目录
- 在读取文件或者设置文件路径时都会选择绝对路径
- 使用
__dirname
获取当前文件所在的绝对路径
// 路径拼接
// 因为linux操作系统只用/来做路径分隔符
// path.join('路径1','路径2','路径3',...)
// 引入path模块
const path = require("path");
// 路径拼接
let finialPath = path.join("itcast", "a", "b", "base.css");
// 输出结果 windows系统下输出\分隔符
console.log(finialPath); //itcast\a\b\base.css
// 相对路径VS绝对路径
// 在node.js中,大多数情况下使用绝对路径
// 使用__dirname获取当前文件所在的绝对路径
fs.writeFile(path.join(__dirname, "helloworld.js"), contents, (err) => {
if (err != null) {
console.log(err);
console.log("文件写入失败");
}
});
fs.readFile(path.join(__dirname, "helloworld.js"), "utf-8", (err, doc) => {
console.log(err);
console.log(doc);
console.log("文件写入成功");
});
# 进程对象 process
let cwd = process.cwd();
console.log("当前工作路径", cwd);
# 第三方模块 glob
# 案例 解压文档
const path = require("path");
const fs = require("fs");
const compressing = require("compressing");
// 定义目录
const source = "./source/";
const middle = "./middle/";
const target = "./images/";
// 创建文件夹
if (!fs.existsSync("./images/")) fs.mkdirSync("./images/");
if (!fs.existsSync("./middle/")) fs.mkdirSync("./middle/");
// 转换为绝对路径
const absource = path.join(__dirname, source);
const abmiddle = path.join(__dirname, middle);
const abtarget = path.join(__dirname, target);
// 拿到最外层目录
let dirs = fs.readdirSync(absource);
// 传入源目录,目标目录,子目录
uncompress(absource, abmiddle, abtarget, dirs);
// 获取子目录
function uncompress(source, middle, target, dirs) {
dirs.forEach((item) => {
// 如果是文件
if (fs.lstatSync(path.join(source, item)).isFile()) {
// 创建对应文件夹
if (!fs.existsSync(path.join(target, transformDir(item)))) fs.mkdirSync(path.join(target, transformDir(item)));
if (!fs.existsSync(path.join(middle, transformDir(item)))) fs.mkdirSync(path.join(middle, transformDir(item)));
// 解压zip
console.log(path.join(middle, transformDir(item), "/word/media/"));
compressing.zip
.uncompress(path.join(source, item), path.join(middle, transformDir(item)))
.then(() => {
console.log("解压成功");
let images = fs.readdirSync(path.join(middle, transformDir(item), "/word/media/"));
images.forEach((image) => {
fs.copyFileSync(
path.join(middle, transformDir(item), "/word/media/", image),
path.join(target, transformDir(item), image)
);
});
})
.catch((err) => {
console.error(err);
});
} else {
// 读取新的文件夹,获取子目录数组
let newDirs = fs.readdirSync(path.join(source, item));
// 创建目标目录
if (!fs.existsSync(path.join(target, item))) fs.mkdirSync(path.join(target, transformDir(item)));
if (!fs.existsSync(path.join(middle, item))) fs.mkdirSync(path.join(middle, transformDir(item)));
uncompress(path.join(source, item), path.join(middle, item), path.join(target, item), newDirs);
}
});
}
function transformDir(item) {
return item
.replace(/.zip|.docx|.doc|\(|\)/g, "")
.replace(/\s/g, "_")
.trim();
}
# 案例 压缩打包
const AdmZip = require("adm-zip");
const path = require("path");
let package_file_path = path.resolve(__dirname, "../package.json");
let dist_folder_path = path.resolve(__dirname, "../dist");
const packageJSON = require(package_file_path);
let name = packageJSON.name;
let version = packageJSON.version;
let date = new Date();
let time =
"" +
addZero(date.getUTCMonth() + 1) +
addZero(date.getDate()) +
"_" +
addZero(date.getHours()) +
addZero(date.getMinutes());
async function createZipArchive() {
const zip = new AdmZip();
const outputFile = `${name}_v${version}_${time}.zip`;
zip.addLocalFolder(dist_folder_path);
zip.writeZip(outputFile);
console.log(`Created ${outputFile} successfully`);
}
function addZero(num) {
return num < 10 ? "0" + num : num;
}
createZipArchive();