gulp结构化
发布于 9 年前 作者 i5ting 6847 次浏览 最后一次编辑是 8 年前 来自 分享

gulp结构化是一个很大的问题,如果一直在Gulpfile.js上增加,大到一定程度上问题就来了

  • 可读性差
  • 莫名其妙的bug
  • 测试难

有没有比好的实践呢?

pixi

https://github.com/GoodBoyDigital/pixi.js

这个一个非常出名的 HTML 5 2D rendering engine。做游戏和一些微信超炫应用是比较好的一个技术选型。

它自己吹的是“it’s fast. Really fast”。

对于一个开发来说,一定要扒出点好东西才算合格。

它的gulpfile.js

var gulp        = require('gulp'),
    requireDir  = require('require-dir');

// Specify game project paths for tasks.
global.paths = {
    src: './src',
    out: './bin',

    get scripts() { return this.src + '/**/*.js'; },
    get jsEntry() { return this.src + '/index'; }
};

// Require all tasks in gulp/tasks, including subfolders
requireDir('./gulp/tasks', { recurse: true });

// default task
gulp.task('default', ['jshint', 'build']);

代码量很小,而且jshint和build根本没看到,它是怎么加载进来的呢?

requireDir  = require('require-dir');

是根据目录加载的node模块,和我常用的require-directory是一样的功能。

requireDir('./gulp/tasks', { recurse: true });

这就很明显了,看一下gulp目录

➜  gulp git:(master) tree .
.
├── tasks
│   ├── build.js
│   ├── clean.js
│   ├── dev.js
│   ├── jsdoc.js
│   ├── jshint.js
│   ├── scripts.js
│   └── watch.js
└── util
    ├── bundle.js
    ├── handleErrors.js
    ├── jsdoc.conf.json
    └── karma.conf.js

2 directories, 11 files

可以说这是一个比较好的一个gulp实践

mount-tasks

我根据上面pixi的做法,使用require-directory改了一个版本,没几行代码,主要是实现了指定目录,把里面的js加载成gulp 可用的 task。

Install

npm install --save mount-tasks

Usages

在Gulpfile.js里

var gulp        = require('gulp');

// Require all tasks in vendor/tasks, including subfolders
require('mount-tasks')(__dirname + '/tasks')

// default task
gulp.task('default', ['clean', 'build']);

在tasks目录,我们放2个task,结构如下

➜  mount-tasks git:(master) tree tasks
tasks
├── build.js
└── clean.js

0 directories, 2 files

此时,执行gulp,就可以出发clean和build任务了。

我们简单看一下任务是如何定义的,是否足够简单

clean.js里代码(build.js和这个类似)

var gulp    = require('gulp');

gulp.task('clean', function () {
  console.log('clean');
});

是不是足够简单呢?

如果你对gulp不太了解,可以看看这篇文档

https://github.com/streakq/js-tools-best-practice/blob/master/doc/Gulp.md

全文完

欢迎关注我的公众号【node全栈】

node全栈.png

5 回复

hottowel是 Angular 项目最佳实践的一个例子,gulp 结构也很好,不过在模块太多了,在同一个文件内也不好读。已经 star 楼主介绍的项目了,提高下 gulp 的写法。

@zysam gulp-load-plugins也是不错的

  "devDependencies": {
    "gulp": "^3.8.11",
    "gulp-bump": "^0.1.11",
    "gulp-load-plugins": "^0.8.0",
    "gulp-task-listing": "^1.0.0",
    "gulp-util": "^3.0.1",
    "yargs": "^1.3.3"
  },

bump version不错

material ui也是结构化的 自豪地采用 CNodeJS ionic

@wq123456

最有意思的是https://github.com/linnovate/mean/blob/master/gulpfile.js,通过env来处理

回到顶部