sey
Simple JavaScript bundling tool with declarative and easy configuration. It also has incremental build support which only rebuilds changed files to pace up build and bundling processes.
Built-in modules take the responsibility of maintaining dependencies and compatibility issues.
Why sey
As we know, there is grunt and gulp for running some tasks to make your web project production-ready.
They also brought extra learning curve and maintenance cost for learning own configuration and packages with them.
This is where sey comes into play and offers alternative build system:
Feature | sey | Grunt | Gulp |
---|---|---|---|
Configuration Approach | Descriptive | Imperative | Imperative |
Configuration Type | API and JSON | JSON | API |
Platform targeting | node and web | Agnostic | Agnostic |
Incremental builds | ✓ | ||
Built-in modules | ✓ | ||
No disk IO during tasks | ✓ | ||
No maintainance cost | ✓ |
in other words, sey...
- has ability to target node.js projects as well as web browser projects,
- has built-in tasks, which does not need extra maintenance cost due to expiration of concepts and methods. all you need is updating to keep up to date,
- has declarative configuration which only needs the input of what user expect. say goodbye to planning directives such as copy, concat, etc.
- supports partial building on changed files. it never starts over doing all tasks.
- supports both configuration and API at the same time,
- is specialized for create bundles and building projects,
- is as fast as it can be.
Built-in Tasks
- addheader: adds file header to each file
- compile: compiles various source files (typescript, jsx, sass, less) into JavaScript
- commonjs: enables commonjs modules in browser
- concat: concatenates all content of source files
- eolfix: replaces various EOL types with unix standard
- lint: lints source files
- minify: minifies source files
- optimize: optimizes source files if available
- preprocess: proprocesses source files for macro support
- transpile: transpiles source files to adapt standards (ES6 -> ES5, etc.)
Usage
To Install:
npm install -g sey
To create the seyfile in current directory:
sey init
To create the seyfile (with API-type configuration) in current directory:
sey init --api
To edit seyfile created:
vim seyfile.js
(or open seyfile.js with your favorite text editor)
To build:
sey build
To build single bundle named 'main':
sey build main
To clean working directory:
sey clean
Configuration (seyfile) Examples
Configuration Based:
let config = global: clean: before: './dist/*' after: main: target: 'node' standard: 2016 eslint: quotes: 2 'single' eser: true banner: '/**' ' * my package' ' */' '' ops: src: './src/**/*.js' './src/**/*.ts' './src/**/*.jsx' dest: './dist/scripts/' addheader: true compile: true commonjs: name: 'browserified.js' entry: './index.js' eolfix: true lint: true optimize: true preprocess: true transpile: true src: './src/**/*.css' './src/**/*.less' './src/**/*.scss' dest: './dist/styles/' addheader: true compile: true concat: 'style.css' eolfix: true lint: true minify: true optimize: true preprocess: true src: './test/*.js' test: true ; sey;
API Based:
let config = ; config; config ; config ; config ; config ; sey;
How sey works
sey is usually being started from command line. It simply loads its configuration named seyfile.js
and built-in modules first.
Loaded modules may delegate any "phase". Or, they can subscribe any internal event.
Depending on command line parameters, a "preset" will be executed.
Sample Hierarchy:
- \ (presets)
+ lint
- build (phases)
+ init
+ preprocess
+ lint
- compile (operations)
- compile (tasks)
+ babeljsx
+ less
+ sass
+ typescript
+ transpile
+ bundling
+ finalize
+ publish
+ test
+ server
+ deploy
Preset: A set of phases in execution order. For example build
executes init, preprocess, lint, compile, bundling and finalize "phase"s in a sequence.
Phase: Each step of delivery. Consists of "operation"s.
Operation: The delegation point of tasks. However configuration directives tell us which operation is asked, operation must correspond to a task to be executed.
To do so, the dominant (with higher weight point) task is elected depending on modules' claims.
Task: The class definition of the task.
Todo List
- Deploy Task
- Watch Task (Refresh Friendliness)
- PostCSS Tasks (transpile op)
- Sourcemaps
- Fancy output including line counts, lint and test results
See GitHub Issues.
Requirements
- node.js (https://nodejs.org/)
License
Apache 2.0, for further details, please see LICENSE file
Contributing
See contributors.md
It is publicly open for any contribution. Bugfixes, new features and extra modules are welcome.