• foy: 轻量级的基于 nodejs 的通用 build 工具


    npm 的 scripts 下写的命令太多就很容易很乱,各种第三方轮子都只能解决一部分问题,总感觉不是很好用,想找个类似 make 的工具只能找到 jake, 可是 jake 的 API 太老,居然很多都不支持 promise, 代码也不多,就干脆自己造轮子了, 感觉效果还行。

    特点:

    • 基于 promise 的任务和内置工具函数(fs/shell), 无缝支持 async/await
    • 类似于 shelljs 的跨平台 shell dsl, 人人都会写 shell
    • 易学易用,无需为写仅仅几个 build 命令而花费几个小时去寻找和学习第三方包
    • 很小的安装成本
      • foy: install size
      • gulp: install size
      • grunt: install size
    • 无缝和第三方支持 promise 的工具包整合,不需要封装成插件就能用

    使用:

    安装

    yarn add -D foy # or npm i -D foy
    
    # Or Install globally with
    
    yarn add -g foy # or npm i -g foy
    
    

    在项目根目录下增加一个 Foyfile.js (或者 Foyfile.ts, 需要安装 ts-node)

    import { task, desc, option, strict, fs } from 'foy'
    
    
    task('build', async ctx => {
      await ctx.exec('tsc')
    })
    
    desc('Build ts files with tsc')
    option('-w, --watch', 'watch file changes')
    strict() // This will throw an error if you passed some options that doesn't defined via `option()`
    task('build2', async ctx => {
      await ctx.exec(`tsc ${ctx.options.watch ? '-w' : ''}`)
    })
    
    task('task', async ctx => {
      await fs.rmrf('/some/dir/or/file') // Remove directory or file
      await fs.copy('/src', '/dist') // Copy folder or file
      let json = await fs.readJson('./xx.json')
      await ctx.env('NODE_ENV', 'production')
      await ctx.cd('./src')
      await ctx.exec('some command') // Execute an command
      let { stdout } = await ctx.exec('ls', { stdio: 'pipe' }) // Get the stdout, default is empty because it's redirected to current process via `stdio: 'inherit'`.
    })
    
    

    然后就可以运行任务了

    # 安装在本地 node_modules 目录下
    npx foy build
    npx foy build1
    npx foy task 
    
    # 安装在全局
    
    foy build
    foy build1
    
    
  • 相关阅读:
    原生js 异步请求,responseXML解析
    asp.net中Page.ClientScript.RegisterStartupScript用法小结
    asp.net 在repeater控件中加按钮
    无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever
    js 注册控件的onclick事件
    js控件设置只读属性和不可用属性
    js CheckBox只读
    js时间日期格式
    js正则判断日期
    UIPickerView的使用(三)
  • 原文地址:https://www.cnblogs.com/Mr-Nobody/p/10072686.html
Copyright © 2020-2023  润新知