UNPKG

@msyuan/js-lib-cli

Version:

一个快速创建JavaScript库开发项目的CLI工具

74 lines (66 loc) 2.02 kB
const fs = require("node:fs"); const path = require("node:path"); const copydir = require("copy-dir"); const template = require("template_js"); // 判断是否是模板文件 function isTemplate(pathname) { return path.extname(pathname) === ".tmpl"; } // 文件目录拷贝 function copyDir(from, to, options) { // console.log("目录拷贝", from, to, options); copydir.sync(from, to, options); } /** * @desc 拷贝文件到某一个目录 * 用法:比如:copyFile(pathResolve("demo/111.js"), pathResolve("bin/demo/111.js")); * 此时bin下111.js的内容就等于demo下111.js的内容了,当然也可以重新命名一个新的 * copyFile(pathResolve("demo/111.js"), pathResolve("bin/demo/222.js")),这时 * 222.js的内容则等于111.js的内容 */ function copyFile(from, to) { const buffer = fs.readFileSync(from); const parentPath = path.dirname(to); // 目录不存在处理 if (!fs.existsSync(parentPath)) { mkdirSyncFunc(parentPath); } fs.writeFileSync(to, buffer); } // 创建目录 function mkdirSyncFunc(target) { try { // recursive 表示递归创建目录 fs.mkdirSync(target, { recursive: true }); } catch (e) { mkdirp(target); function mkdirp(dir) { if (fs.existsSync(dir)) { return true; } const dirname = path.dirname(dir); mkdirp(dirname); fs.mkdirSync(dir); } } } // 读取模板文件 function readTmpl(from, data = {}) { const text = fs.readFileSync(from, { encoding: "utf-8" }); return template(text, data); } // 拷贝模板文件 function copyTmpl(from, to, data = {}) { // 如果不是模板文件,则直接拷贝即可 if (!isTemplate(from)) { return copyFile(from, to); } const parentPath = path.dirname(to); mkdirSyncFunc(parentPath); fs.writeFileSync(to, readTmpl(from, data), { encoding: "utf8" }); } exports.isTemplate = isTemplate; exports.copyDir = copyDir; exports.copyFile = copyFile; exports.readTmpl = readTmpl; exports.copyTmpl = copyTmpl;