V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yzhen123
V2EX  ›  Node.js

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

  •  
  •   yzhen123 · 2018-12-05 20:22:46 +08:00 · 3317 次点击
    这是一个创建于 2184 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    
    
    1 条回复    2018-12-05 20:48:37 +08:00
    yzhen123
        1
    yzhen123  
    OP
       2018-12-05 20:48:37 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3901 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:22 · PVG 18:22 · LAX 02:22 · JFK 05:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.