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

Posted mr-nobody

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了foy: 轻量级的基于 nodejs 的通用 build 工具相关的知识,希望对你有一定的参考价值。

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

特点:

  • 基于 promise 的任务和内置工具函数(fs/shell), 无缝支持 async/await
  • 类似于 shelljs 的跨平台 shell dsl, 人人都会写 shell
  • 易学易用,无需为写仅仅几个 build 命令而花费几个小时去寻找和学习第三方包
  • 很小的安装成本
    • foy: 技术分享图片
    • gulp: 技术分享图片
    • grunt: 技术分享图片
  • 无缝和第三方支持 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

以上是关于foy: 轻量级的基于 nodejs 的通用 build 工具的主要内容,如果未能解决你的问题,请参考以下文章

基于NodeJS的全栈式开发(基于NodeJS的前后端分离)转

也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)

wikijs:一款基于NodeJS的轻量级wiki

css EL-Custom Elementor CSS由Dave Foy修复

LVGL文件浏览器|基于 lvgl 实现的简洁通用轻量级的文件浏览器

LVGL文件浏览器|基于 lvgl 实现的简洁通用轻量级的文件浏览器