README
Require
- rsync (http://rsync.samba.org/)
- requirejs ( for local dev mode )
Installation
$ npm install smurf -g
Quick Start
before we run the commands of smurf, we should have a project first
create a project
(directory structure)
project
├─┬src
│ └──...
└─.config
.config file
{
"job": "job", // String job name,
"require": {
"src": "path of requirejs.js", //required, relative path of requirejs.js
"mustache": "path of hogan.js", //require by using template
"paths": {
"lib": "common/lib" //alias
}
},
"registry": "http://registry.npm.fe.eucita.com", //private npm registry
//it will downloads all dependencies by using "smurf install" command
"exports":[ //exports files
"index/index", // index/index@ver.js & index/index@ver.css
"test/test.js" // test/test@ver.js
"test/cssonly.css" // test/cssonly@ver.css
// required test/cssonly.js file
],
"html": [],
"dependencies": {
"app": "*",
"jquery": "1.7.x",
"hogan": "*",
"requirejs": "*",
"icons": "*",
"button": "*",
"jquery-api": "*",
"dialog": "*",
"switcher": "*",
"filter-select": "*",
"filter-select-date": "*"
},
"dev": { //for rsync to server
"host": "127.0.0.1",
"path": "/home/q/www/project/"
}
}
get dependencies
$ smurf install
start a server
before start server, make sure the working directory contains project
$ sudo smurf server
server has three modes, [SRC|DEV|PRD]
- SRC: source mode, return every file, easy to debug
- DEV: package mode, return a package of required files
- PRD: product mode, return minified code
$ sudo smurf server -m DEV
pack
packing exports files
before run pack, make sure the project is working directory
$ smurf pack
result
project
├─┬dev(package directory)
│ ├─┬index
│ │ ├──index@dev.js
│ │ └──index@dev.css
│ └─┬test
│ ├──test@dev.js
│ └──cssonly@dev.css
│
├─┬src
│ ├─┬index
│ │ └──index.js
│ └─┬test
│ ├──test.js
│ └──cssonly.js
└─.config
min
minify exports files
before run min, make sure the project is working directory
$ smurf min
result
├─┬dev(package directory)
│ ├─┬index
│ │ ├──index@bc23723a6ebdd528a774264d37173293.js
│ │ └──index@db47495f5329bd6a6df53228034d4746.css
│ └─┬test
│ ├──test@dev.js
│ └──cssonly@dev.css
│
├─┬src
│ ├─┬index
│ │ └──index.js
│ └─┬test
│ ├──test.js
│ └──cssonly.js
└─.config
project
├─┬prd(product directory)
│ ├─┬index
│ │ ├──index@bc23723a6ebdd528a774264d37173293.js
│ │ └──index@db47495f5329bd6a6df53228034d4746.css
│ └─┬test
│ ├──test@version1.js
│ └──cssonly@version2.css
│
├─┬ver(versions directory)
│ ├─┬index
│ │ ├──index.js.ver (bc23723a6ebdd528a774264d37173293)
│ │ └──index.css.ver (db47495f5329bd6a6df53228034d4746)
│ └─┬test
│ ├──test.js.ver (version1)
│ └──cssonly.css.ver (version2)
│
├─┬src
│ ├─┬index
│ │ └──index.js
│ └─┬test
│ ├──test.js
│ └──cssonly.js
└─.config
sync
sync all package to target server
make sure you installed rsync (find it here http://rsync.samba.org/)
set dev environment in .config
before run sync
- make sure the project is working directory
- make sure you packed your project before
$ smurf sync
we also run pack and sync together
$ smurf pack && smurf sync
Hole .config file sample
{
"job": "vs",
"require": {
"src": "node_modules/requirejs/index.js",
"mustache": "node_modules/hogan/index.js",
"prd": "node_modules/release/index.js",
"paths": {
"modules":"modules"
}
},
"html": [{
"name": "index.jsp",
"title": "Viewscope",
"domain": "static.eucita.com",
"body": "index/index.mustache",
"js": "index/index.js",
"css": "index/index.css"
},{
"name": "manage.jsp",
"title": "Viewscope Manage",
"domain": "static.eucita.com",
"body": "manage/index.mustache",
"js": "manage/index.js",
"css": "manage/index.css"
}],
"exports":[
"index/index",
"manage/index"
],
"dependencies": {
"app": "*",
"jquery": "1.7.x",
"hogan": "*",
"release": "*",
"requirejs": "*",
"icons": "*",
"button": "*",
"jquery-api": "*",
"dialog": "*",
"switcher": "*",
"filter-select": "*",
"filter-select-date": "*"
},
"registry": "http://registry.npm.fe.eucita.com"
}