smurf

Fe development tool

Usage no npm install needed!

<script type="module">
  import smurf from 'https://cdn.skypack.dev/smurf';
</script>

README

Require

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"
}