一些实用的Node脚本

一、打包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 清除从光标到行尾的内容
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值