Create Modular Front-End Build System, organize the source by module, using relative path, html/js/css/img/fonts/tpl are in one same folder, like Baidu FIS. Good concept for FE source management / development.
Component Oriented Solution, based on gulp. More simple, flexible, expandable and stable. Everyone know gulp can do secondary development.
Support base64 image in html/CSS
Support JS/CSS inlnied in html
Support require('main.css'), require css file in js
Intergrated with spritesmith, support auto sprite img
Intergrated with icon-font, support SVG 2 Iconfont.
Intergrated with usemin,support complex combo/package.
Supoort FE Tpl embed function, the .tpl file will packaged into js file,support async js loading.
Intergrated with SCSS|ES6|ReactJS|Vuejs|Babel|Browserify|cssnano|uglify|imagmein and other plugins,One-Stop Solution Service, very Simple and Strong
High scalability, compatiable with almost gulp plugins, you can use them in gulpman. For example, you can put browser-sync in your gulpman build system
Intergrated with karma framework,support babel/es6 unit test and coverage result.
Introduction
Support Mac、Linux
No full test under Windows. You can install gulp、gulp-sass manually
Required Node >= 4.0.0
Install
npm install gulpman --save-dev
Run gulp gm:install to finish the setup
*If in China, please use cnpm to install it: cnpm install gulpman --save-dev
Note
If gulp-sass install failed, please run cnpm install gulp-sass gulp-imagemin by manual to fix that.
If error happened in npm install,such as /usr/local/lib/node_modules permission error, fix this by sudo chown -R "$(whoami)"+Path
sudo npm install is not recommended
The imagemin-pngquant module needlibpng-devel,if in Linux, please run yum install libpng-devel at first
If install failed, check the npm-debug.log to see if there are some ENOMEMerrors
Config
0. Support Auto Mode, no Config
You can skip Config, and directly jump to Usage
1. Config gulpfile.js:
require the gulpman in your gulpfile.js,then it will load gm:publish, gm:develop into gulp tasks.
gulp gm:publish or gulp gm:develop in terminal then it will work
/** * Gulpfile.js */vargulp=require('gulp'),gman=require('gulpman')// your other tasks ...// xxx .../** * config gulpman ====================== * Use config API * assets path, CDN, URL prefix */gman.config({// whether use absolute path, default `true` 'is_absolute': true,// cdn prefix support[string|array|function]arguments'cdn_prefix': '',// url prefix, defautl `/static`. This involves the server config ,such as the static path of nginx'url_prefix': '/static',/** use spritesmith for css-img sprite * Based on Spritesmith: https://github.com/Ensighten/spritesmith * Automatecially generate Sprite Image & CSS **///'spritesmith': { },/** usemin config **/// 'usemin': {}// The COMPONENTS directory'components': 'components',// For development assets and templates folder, related to Server Config'runtime_views': 'views','dist_views': 'views_dist',// For production assets and templates folder, related to Server Config'runtime_assets': 'assets','dist_assets': 'assets_dist',// The js library dir, set as a global module. Also you can set as `bower_components`'lib': 'lib',// You can add one customer global directory, so you can require module name directly, like: `require ('xxx')`. The xxx is in this directory'global': 'common'})
2. How to config CDN better
cdn_prefix support String, Array, Function
if argument is array, the CDN will be an random value
if argument is function,it would input one argument, mediaFile
'cdn_prefix': function(fileName){console.log(fileName)varc_list=['http://s0.com','http://s1.com','http://s2.com','http://s3.com','http://s4.com']// You can customized your strategyif(hostFile.match(/\.html$/gm)){returnc_list[0]}else{returnc_list[1]}},
3. About is_absolute
is_absolute is the dist path of source in html. default true. the dist path is like /static/home/main.js
[*]Need consistent config with Server, like nginx, apache
If no local server, you can set is_absolute as false, use relative path. Like ../../assets/static/home/main.js
4. gulpman directory
Use gulpman to arrange your directory as component,The root component dir can be./components(default). If you have one component named foo, then ./components/foo,all related assets such as html|js|css|fonts|image should be put in foo folder.
This solution for assets can be high efficiency and easy to maintain.
gm:develop to start develop mode, the views dir and assets dir can be generated automatically
gm:publish to publish assets in production env. The views_dist and assets_dist can generated.
5. What is global directory
For Browserify packing, the js module in global dir can be directly require or import in es6/js code
In gulpman.config, the lib和global are global directory. Take an example:
In components/lib directory, you have one module foo.js,then it is components/lib/foo.js. So when you use foo in your es6 file, you can use it like: import foo from 'foo', no need write as import foo from '../lib/foo'
similarly, global option can set your dir as global module dir. You can set bower dir as your lib dir.
Please make no conficts in your global dir
6. Support for complex and multi level directory in config
# Create components directory and add one demo# init components dir and a html demo
gulp gm:init
# develop and watch mode,watchings files changes and update files
gulp gm:develop
# Build and Watch one special component, other files are not compiled
gulp gm:develop -c component_name1,component_name2,component_name3...
# publish assets in production env
gulp gm:publish
# publish command support `-a`和`-v` parameters to set output assets/views path.
gulp gm:publish -v your_views_dist -a your_assets_dist
# clean dist files
gulp gm:clean
# clean dist files, including subfolders
gulp gm:clean-deep
# Generate one developing assets/views files, but not in watching mode# compile for develop, not watch
gulp gm:compile
2. Watch one special component in development
When the project become huge, if we watch all components assets, it will be slow and low efficiency, so we can only watch special component to get better performance
Fox example, if we want watch the home component:
# this will only build and watch `components/home` components
gulp gm:develop -c home
请发表评论