一、打包zip文件
主要依赖archiver
const fs = require('fs')
const archiver = require('archiver')
// 创建生成的压缩包路径
const output = fs.createWriteStream(__dirname + '/example.zip')
const archive = archiver('zip', {
zlib: {level: 9} // 设置压缩等级
})
// 'close'事件监听
output.on('close', function() {
console.log()
})
// 'end'事件监听
output.on('end', function() {
})
// 'error'事件监听
archive.on('error', function(err) {
throw err;
});
archive.pipe(output)
// 添加目录;example为需要打包的目录,new-dir为打包后的子目录;false会将文件打包到根目录
archive.directory('./example/', 'new-dir')
// 添加文件;example.js为需要打包的文件,false表示保持原名
archive.file('example.js', false)
// 执行
archive.finalize()
二、SVG转Iconfont
主要依赖svgtofont
const svgtofont = require('svgtofont')
const path = require('path');
svgtofont({
src: path.resolve(process.cwd(), 'svg'), // 存放svg的目录
dist: path.resolve(process.cwd(), "fonts"), // 输出文件的目录
fontName: "iconfont", // 字体的名称
css: true, // 是否创建css文件
}).then((options) => {
console.log(options);
});
三、使用模板生成文件
const fs = require('fs');
const path = require('path');
// 模板目录
let templateIcon = fs.readFileSync(path.join(__dirname, './template.vue'), 'utf8')
// 需要替换的数据
let imgs = {}
// 全局替换目标数据
let content = templateIcon.replace(/\[imgs\]/g, JSON.stringify(imgs))
// 生成文件
fs.writeFile(path.join(__dirname, './icon.vue'), content, (err) => {
if (err) throw err;
console.log('The ' + targetFilePath + ' has been created!');
});
四、命令行等待用户输入
var readline = require('readline')
var rl = readline.createInterface(process.stdin, process.stdout)
rl.setPrompt('Test> ');
rl.prompt();
rl.on('line', function(line) {
switch (line.trim()) {
case 'copy':
console.log('复制');
break;
case 'hello':
console.log('world!');
break;
case 'close':
rl.close();
break;
default:
console.log('没有找到命令!');
break;
}
rl.prompt();
});
rl.on('close', function() {
console.log('bye bye!');
process.exit(0);
});
// promise
const rlFunc = function(prompt) {
return new Promise(function(resolve, reject) {
rl.setPrompt(prompt + '> ');
rl.prompt();
rl.on('line', function(user_input) {
rl.close()
if (user_input) {
resolve(user_input)
} else {
rl.prompt();
}
})
})
}
五、执行shell命令
const { exec } = require('child_process')
const shell = function(order) {
return new Promise(function(resolve, reject) {
exec(order, function(err, stdout) {
if (err) {
console.log('\n\033[40;31m Error \033[0m')
console.log(err);
process.exit(1);
} else {
resolve(stdout)
}
})
})
}
六、命令行打印样式
console.log('\033[42;30m example1 \033[40;32m example2\033[0m')
语法\033[背景色编号;字色编号m
输出的内容 \033[0m
字色编号:30黑,31红,32绿,33黄,34蓝,35紫,36深绿,37白色
背景编号:40黑,41红,42绿,43黄,44蓝,45紫,46深绿,47白色
还有些比较特殊的标记
\033[0m
关闭所有属性\033[1m
设置高亮度\033[4m
下划线\033[5m
闪烁\033[7m
反显\033[8m
消隐\033[nA
光标上移n行\033[nB
光标下移n行\033[nC
光标右移n列\033[nD
光标左移n列\033[y;xH
设置光标位置(y列x行)\033[2J
清屏\033[K
清除从光标到行尾的内容