文档章节

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

zaaack
 zaaack
发布于 12/05 18:35
字数 502
阅读 157
收藏 0

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

项目地址: https://github.com/zaaack/foy gitee 地址: https://gitee.com/zane_young/foy

特点:

  • 基于 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

© 著作权归作者所有

共有 人打赏支持
zaaack

zaaack

粉丝 35
博文 92
码字总数 43513
作品 8
长沙
程序员
私信 提问
加载中

评论(3)

红薯
红薯

引用来自“zaaack”的评论

引用来自“红薯”的评论

代码放码云吧,我们来推荐一下:)
已经放了,谢谢红薯大大 👍😬

https://gitee.com/zane_young/foy

已推荐,文章记得加个gitee地址哈
zaaack
zaaack

引用来自“红薯”的评论

代码放码云吧,我们来推荐一下:)
已经放了,谢谢红薯大大 👍😬

https://gitee.com/zane_young/foy
红薯
红薯
代码放码云吧,我们来推荐一下:)
轻量级的项目 build 工具 - foy

福伊(foy) 是一个轻量级的基于 nodejs 和 promise 的通用 build 工具 特点: 基于 promise 的任务和内置工具函数(fs/shell), 无缝支持 async/await 类似于 shelljs 的跨平台 shell dsl, 人人都...

zaaack
12/05
0
0
Node v6.11.3 (LTS) 发布,重新开启快照功能

Node v6.11.3 (LTS) 已发布,这次发布的版本有 152 个提交,其中包括 75 个与测试相关的,25 个与文档相关的,21 个与构建/工具相关的,以及 3 个是升级依赖关系的。 值得关注的变更: buil...

局长
2017/09/06
1K
1
Node.js v8.9.4 (LTS) 发布,可以从任何目录配置

Node.js v8.9.4 (LTS) 发布了,Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时。 Node.js 使用高效、轻量级的事件驱动、非阻塞 I/O 模型。 更新内容: deps: upgrade npm to 5.6.0...

周其
01/04
2K
13
Node.js v8.5.0 发布,服务器端 JavaScript 运行环境

Node.js v8.5.0 发布了。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时。 Node.js 使用高效、轻量级的事件驱动、非阻塞 I/O 模型。 主要更新内容: build V8 中现在重新启用快照 ...

达尔文
2017/09/13
1K
13
Node.js v8.7.0 发布,服务器端 JavaScript 运行环境

Node.js v8.7.0 已发布,Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时。 Node.js 使用高效、轻量级的事件驱动、非阻塞 I/O 模型。 更新内容: deps: update npm to 5.4.2 #15600...

王练
2017/10/12
1K
10

没有更多内容

加载失败,请刷新页面

加载更多

领哥,项目管理

领哥 https://www.leangoo.com/kanban/board_list

miaojiangmin
18分钟前
1
0
2018阿里云双12年终大促主会场全攻略

摘要: 双12官方攻略出炉! 2018阿里云双12年终大促活动已经于12月7日正式开启,从已开放的活动页面来看,活动分为两个阶段: 12月7日-12月23日的拉新返现阶段和12月24日-12月28日的TOP100英...

阿里云云栖社区
19分钟前
1
0
努力使失败保持原子性(64)

失败的原子调用应该使得对象保持在被调用之前的状态,所谓:失败原子性 几种途径实现: 设计一个不可变对象,其失败原子性是显然的 对于可变参数,执行前检查参数有效性 避免执行一半报错,后...

Java搬砖工程师
19分钟前
1
0
slot分发内容

slot元素作为组件模板之中的内容分发插槽。这个元素自身将被替换。 有 name 特性的 slot 称为具名 slot。 有 slot 特性的内容将分发到名字相匹配的具名 slot。 内容分发就是指混合父组件的内...

Carbenson
31分钟前
1
0
python开发入门

1.执行python文件 # python ./demo.py 2.Python ImportError: No module named 'requests'异常 解决方法: # pip install requests;...

硅谷课堂
32分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部