├── cats
├── server.js
├── public
│ ├── css
│ │ └── main.css
│ ├── index.html
│ └── js
│ │ ├── main.js
│ │ └── main-dev.js
├── css
│ └── index.styl
├── js
│ └── index.js
├── src
│ └── index.js
├── package.json
├── Dockerfile
└── Dockerfile-dev
├── dogs
├── server.js
├── public
│ ├── css
│ │ └── main.css
│ ├── index.html
│ └── js
│ │ ├── main.js
│ │ └── main-dev.js
├── css
│ └── index.styl
├── js
│ └── index.js
├── src
│ └── index.js
├── package.json
├── Dockerfile
└── Dockerfile-dev
├── index
├── server.js
├── public
│ └── index.html
├── src
│ └── index.js
├── package.json
├── Dockerfile
└── Dockerfile-dev
├── proxy
├── server.js
├── Dockerfile
├── package.json
├── Dockerfile-dev
└── src
│ └── index.js
├── .gitignore
├── sh
├── build.sh
├── scale.sh
├── stop.sh
├── run.sh
├── build-dev.sh
├── run-dev.sh
├── scale-dev.sh
├── stop-dev.sh
├── restart-dev.sh
└── npminstall-dev.sh
├── rollup.config.js
├── package.json
├── docker-compose.yml
├── README.md
├── docker-compose-dev.yml
└── watch.js
/cats/server.js:
--------------------------------------------------------------------------------
1 |
2 | require('./src');
3 |
--------------------------------------------------------------------------------
/dogs/server.js:
--------------------------------------------------------------------------------
1 |
2 | require('./src');
3 |
--------------------------------------------------------------------------------
/index/server.js:
--------------------------------------------------------------------------------
1 |
2 | require('./src');
3 |
--------------------------------------------------------------------------------
/proxy/server.js:
--------------------------------------------------------------------------------
1 |
2 | require('./src');
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | npm-debug.log
2 | node_modules
3 |
--------------------------------------------------------------------------------
/cats/public/css/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #f9f9f9;
3 | }
4 |
--------------------------------------------------------------------------------
/dogs/public/css/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #f9f9f9;
3 | }
4 |
--------------------------------------------------------------------------------
/cats/css/index.styl:
--------------------------------------------------------------------------------
1 |
2 | @import 'nib'
3 |
4 | body
5 | background-color: #f9f9f9
6 |
--------------------------------------------------------------------------------
/dogs/css/index.styl:
--------------------------------------------------------------------------------
1 |
2 | @import 'nib'
3 |
4 | body
5 | background-color: #f9f9f9
6 |
--------------------------------------------------------------------------------
/sh/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | docker-compose -p boilerplate -f docker-compose.yml build $@
4 |
--------------------------------------------------------------------------------
/sh/scale.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | docker-compose -p boilerplate -f docker-compose.yml scale $@
4 |
--------------------------------------------------------------------------------
/sh/stop.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | docker-compose -p boilerplate -f docker-compose.yml down $@
4 |
--------------------------------------------------------------------------------
/sh/run.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | docker-compose -p boilerplate -f docker-compose-dev.yml up -d $@
4 |
--------------------------------------------------------------------------------
/sh/build-dev.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | docker-compose -p boilerplatedev -f docker-compose-dev.yml build $@
4 |
--------------------------------------------------------------------------------
/sh/run-dev.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | docker-compose -p boilerplatedev -f docker-compose-dev.yml up -d $@
4 |
--------------------------------------------------------------------------------
/sh/scale-dev.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | docker-compose -p boilerplatedev -f docker-compose-dev.yml scale $@
4 |
--------------------------------------------------------------------------------
/sh/stop-dev.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | docker-compose -p boilerplatedev -f docker-compose-dev.yml down $@
4 |
--------------------------------------------------------------------------------
/sh/restart-dev.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | docker-compose -p boilerplatedev -f docker-compose-dev.yml restart $@
4 |
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 |
2 | import buble from 'rollup-plugin-buble';
3 |
4 | export default {
5 | plugins: [ buble() ]
6 | };
7 |
--------------------------------------------------------------------------------
/sh/npminstall-dev.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | docker-compose -p boilerplatedev -f docker-compose-dev.yml exec $@ npm install
4 |
--------------------------------------------------------------------------------
/cats/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Cats! 🐈
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/dogs/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Dogs! 🐕
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/cats/public/js/main.js:
--------------------------------------------------------------------------------
1 | !function(){"use strict";var e=document.createElement("h1"),t=document.createElement("a");e.textContent="Meow!",t.href="/",t.textContent="Back to index",document.body.appendChild(e),document.body.appendChild(t)}();
--------------------------------------------------------------------------------
/dogs/public/js/main.js:
--------------------------------------------------------------------------------
1 | !function(){"use strict";var e=document.createElement("a"),t=document.createElement("h1");t.textContent="Woof!",e.href="/",e.textContent="Back to index",document.body.appendChild(t),document.body.appendChild(e)}();
--------------------------------------------------------------------------------
/index/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 🐈🐕
6 |
7 | Cats!
8 | Dogs!
9 |
10 |
11 |
--------------------------------------------------------------------------------
/cats/js/index.js:
--------------------------------------------------------------------------------
1 |
2 | var hello = document.createElement('h1');
3 | var index = document.createElement('a');
4 |
5 | hello.textContent = 'Meow!'
6 |
7 | index.href = '/';
8 | index.textContent = 'Back to index';
9 |
10 | document.body.appendChild(hello);
11 | document.body.appendChild(index);
12 |
--------------------------------------------------------------------------------
/dogs/js/index.js:
--------------------------------------------------------------------------------
1 |
2 | var index = document.createElement('a');
3 | var hello = document.createElement('h1');
4 |
5 | hello.textContent = 'Woof!'
6 |
7 | index.href = '/';
8 | index.textContent = 'Back to index';
9 |
10 | document.body.appendChild(hello);
11 | document.body.appendChild(index);
12 |
--------------------------------------------------------------------------------
/cats/src/index.js:
--------------------------------------------------------------------------------
1 |
2 | var path = require('path');
3 |
4 | var express = require('express');
5 | var compression = require('compression');
6 |
7 | var app = express();
8 |
9 | var STATIC_PATH = path.join(__dirname, '..', 'public');
10 |
11 | app.use(compression());
12 | app.use(express.static(STATIC_PATH));
13 |
14 | app.listen(80);
15 |
--------------------------------------------------------------------------------
/dogs/src/index.js:
--------------------------------------------------------------------------------
1 |
2 | var path = require('path');
3 |
4 | var express = require('express');
5 | var compression = require('compression');
6 |
7 | var app = express();
8 |
9 | var STATIC_PATH = path.join(__dirname, '..', 'public');
10 |
11 | app.use(compression());
12 | app.use(express.static(STATIC_PATH));
13 |
14 | app.listen(80);
15 |
--------------------------------------------------------------------------------
/index/src/index.js:
--------------------------------------------------------------------------------
1 |
2 | var path = require('path');
3 |
4 | var express = require('express');
5 | var compression = require('compression');
6 |
7 | var app = express();
8 |
9 | var STATIC_PATH = path.join(__dirname, '..', 'public');
10 |
11 | app.use(compression());
12 | app.use(express.static(STATIC_PATH));
13 |
14 | app.listen(80);
15 |
--------------------------------------------------------------------------------
/cats/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "cats",
3 | "version": "0.0.1",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "dependencies": {
12 | "compression": "~1.6.1",
13 | "express": "~4.13.4"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/dogs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dogs",
3 | "version": "0.0.1",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "dependencies": {
12 | "compression": "~1.6.1",
13 | "express": "~4.13.4"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/index/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dogs",
3 | "version": "0.0.1",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "dependencies": {
12 | "compression": "~1.6.1",
13 | "express": "~4.13.4"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/cats/public/js/main-dev.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | 'use strict';
3 |
4 | var hello = document.createElement('h1');
5 | var index = document.createElement('a');
6 |
7 | hello.textContent = 'Meow!'
8 |
9 | index.href = '/';
10 | index.textContent = 'Back to index';
11 |
12 | document.body.appendChild(hello);
13 | document.body.appendChild(index);
14 |
15 | }());
--------------------------------------------------------------------------------
/dogs/public/js/main-dev.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | 'use strict';
3 |
4 | var index = document.createElement('a');
5 | var hello = document.createElement('h1');
6 |
7 | hello.textContent = 'Woof!'
8 |
9 | index.href = '/';
10 | index.textContent = 'Back to index';
11 |
12 | document.body.appendChild(hello);
13 | document.body.appendChild(index);
14 |
15 | }());
--------------------------------------------------------------------------------
/proxy/Dockerfile:
--------------------------------------------------------------------------------
1 |
2 | FROM node:argon
3 | MAINTAINER Juha Lindstedt
4 |
5 | ENV NODE_ENV=production
6 |
7 | RUN mkdir -p /app
8 |
9 | COPY ./src /app/src
10 | COPY ./package.json /app/package.json
11 | COPY ./server.js /app/server.js
12 |
13 | WORKDIR /app
14 |
15 | RUN npm install
16 |
17 | ENTRYPOINT ["npm", "start"]
18 | EXPOSE 80
19 |
--------------------------------------------------------------------------------
/proxy/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "proxy",
3 | "version": "0.0.1",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "dependencies": {
12 | "express": "~4.13.4",
13 | "http-proxy": "~1.13.1"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/cats/Dockerfile:
--------------------------------------------------------------------------------
1 |
2 | FROM node:argon
3 | MAINTAINER Juha Lindstedt
4 |
5 | ENV NODE_ENV=production
6 |
7 | RUN mkdir -p /app
8 |
9 | COPY ./public /app/public
10 | COPY ./src /app/src
11 | COPY ./package.json /app/package.json
12 | COPY ./server.js /app/server.js
13 |
14 | WORKDIR /app
15 |
16 | RUN npm install
17 |
18 | ENTRYPOINT ["npm", "start"]
19 | EXPOSE 80
20 |
--------------------------------------------------------------------------------
/dogs/Dockerfile:
--------------------------------------------------------------------------------
1 |
2 | FROM node:argon
3 | MAINTAINER Juha Lindstedt
4 |
5 | ENV NODE_ENV=production
6 |
7 | RUN mkdir -p /app
8 |
9 | COPY ./public /app/public
10 | COPY ./src /app/src
11 | COPY ./package.json /app/package.json
12 | COPY ./server.js /app/server.js
13 |
14 | WORKDIR /app
15 |
16 | RUN npm install
17 |
18 | ENTRYPOINT ["npm", "start"]
19 | EXPOSE 80
20 |
--------------------------------------------------------------------------------
/index/Dockerfile:
--------------------------------------------------------------------------------
1 |
2 | FROM node:argon
3 | MAINTAINER Juha Lindstedt
4 |
5 | ENV NODE_ENV=production
6 |
7 | RUN mkdir -p /app
8 |
9 | COPY ./public /app/public
10 | COPY ./src /app/src
11 | COPY ./package.json /app/package.json
12 | COPY ./server.js /app/server.js
13 |
14 | WORKDIR /app
15 |
16 | RUN npm install
17 |
18 | ENTRYPOINT ["npm", "start"]
19 | EXPOSE 80
20 |
--------------------------------------------------------------------------------
/proxy/Dockerfile-dev:
--------------------------------------------------------------------------------
1 |
2 | FROM node:argon
3 | MAINTAINER Juha Lindstedt
4 |
5 | ENV NODE_ENV=development
6 |
7 | RUN mkdir -p /app
8 |
9 | COPY ./src /app/src
10 | COPY ./package.json /app/package.json
11 | COPY ./server.js /app/server.js
12 |
13 | WORKDIR /app
14 |
15 | RUN npm install
16 |
17 | ENTRYPOINT ["npm", "start"]
18 | EXPOSE 80
19 |
20 | VOLUME /app/src
21 |
--------------------------------------------------------------------------------
/cats/Dockerfile-dev:
--------------------------------------------------------------------------------
1 |
2 | FROM node:argon
3 | MAINTAINER Juha Lindstedt
4 |
5 | ENV NODE_ENV=development
6 |
7 | RUN mkdir -p /app
8 |
9 | COPY ./public /app/public
10 | COPY ./src /app/src
11 | COPY ./package.json /app/package.json
12 | COPY ./server.js /app/server.js
13 |
14 | WORKDIR /app
15 |
16 | RUN npm install
17 |
18 | ENTRYPOINT ["npm", "start"]
19 | EXPOSE 80
20 |
21 | VOLUME /app/public
22 | VOLUME /app/src
23 |
--------------------------------------------------------------------------------
/dogs/Dockerfile-dev:
--------------------------------------------------------------------------------
1 |
2 | FROM node:argon
3 | MAINTAINER Juha Lindstedt
4 |
5 | ENV NODE_ENV=development
6 |
7 | RUN mkdir -p /app
8 |
9 | COPY ./public /app/public
10 | COPY ./src /app/src
11 | COPY ./package.json /app/package.json
12 | COPY ./server.js /app/server.js
13 |
14 | WORKDIR /app
15 |
16 | RUN npm install
17 |
18 | ENTRYPOINT ["npm", "start"]
19 | EXPOSE 80
20 |
21 | VOLUME /app/public
22 | VOLUME /app/src
23 |
--------------------------------------------------------------------------------
/index/Dockerfile-dev:
--------------------------------------------------------------------------------
1 |
2 | FROM node:argon
3 | MAINTAINER Juha Lindstedt
4 |
5 | ENV NODE_ENV=development
6 |
7 | RUN mkdir -p /app
8 |
9 | COPY ./public /app/public
10 | COPY ./src /app/src
11 | COPY ./package.json /app/package.json
12 | COPY ./server.js /app/server.js
13 |
14 | WORKDIR /app
15 |
16 | RUN npm install
17 |
18 | ENTRYPOINT ["npm", "start"]
19 | EXPOSE 80
20 |
21 | VOLUME /app/public
22 | VOLUME /app/src
23 |
--------------------------------------------------------------------------------
/proxy/src/index.js:
--------------------------------------------------------------------------------
1 |
2 | var NET = process.env.NET;
3 |
4 | var express = require('express');
5 | var app = express();
6 | var httpProxy = require('http-proxy');
7 |
8 | var proxy = httpProxy.createProxyServer();
9 |
10 | app.set('strict routing', true);
11 |
12 | app.get('/cats', redirectTo('/cats/'));
13 | app.get('/dogs', redirectTo('/dogs/'));
14 |
15 | app.get('/', proxyTo(`http://index`));
16 |
17 | app.use('/cats', proxyTo(`http://cats`));
18 | app.use('/dogs', proxyTo(`http://dogs`));
19 |
20 | function redirectTo (target) {
21 | return function (req, res, next) {
22 | res.redirect(target);
23 | }
24 | }
25 |
26 | function proxyTo (target) {
27 | return function (req, res, next) {
28 | proxy.web(req, res, {target: target});
29 | }
30 | }
31 |
32 | app.listen(80);
33 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "docker-boilerplate",
3 | "version": "0.0.1",
4 | "description": "",
5 | "main": "watch.js",
6 | "scripts": {
7 | "dev": "sh sh/build-dev.sh && sh sh/run-dev.sh && node watch",
8 | "dev-stop": "sh sh/stop-dev.sh",
9 | "start": "sh sh/build.sh && sh sh/run.sh",
10 | "stop": "sh sh/stop.sh",
11 | "stop-dev": "sh sh/stop-dev.sh",
12 | "npminstall": "sh sh/npminstall-dev.sh",
13 | "restart": "sh sh/restart-dev.sh",
14 | "scale": "sh sh/scale.sh",
15 | "scale-dev": "sh sh/scale-dev.sh"
16 | },
17 | "author": "",
18 | "license": "ISC",
19 | "devDependencies": {
20 | "chokidar": "~1.4.2",
21 | "nib": "~1.1.0",
22 | "rollup": "~0.26.1",
23 | "rollup-plugin-buble": "~0.6.0",
24 | "stylus": "~0.54.5",
25 | "uglify-js": "~2.6.1"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '2'
2 |
3 | services:
4 | proxy:
5 | build:
6 | context: proxy
7 | dockerfile: Dockerfile
8 | restart: 'always'
9 | environment:
10 | NET: 'boilerplate'
11 | networks:
12 | boilerplate:
13 | ports:
14 | - '80:80'
15 |
16 | index:
17 | build:
18 | context: index
19 | dockerfile: Dockerfile
20 | restart: 'always'
21 | environment:
22 | NET: 'boilerplate'
23 | networks:
24 | boilerplate:
25 | aliases:
26 | - index
27 |
28 | cats:
29 | build:
30 | context: cats
31 | dockerfile: Dockerfile
32 | restart: 'always'
33 | environment:
34 | NET: 'boilerplate'
35 | networks:
36 | boilerplate:
37 | aliases:
38 | - cats
39 |
40 | dogs:
41 | build:
42 | context: dogs
43 | dockerfile: Dockerfile
44 | restart: 'always'
45 | environment:
46 | NET: 'boilerplate'
47 | networks:
48 | boilerplate:
49 | aliases:
50 | - dogs
51 |
52 | networks:
53 | boilerplate:
54 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Docker + Node.js boilerplate
2 |
3 | ## Clone
4 | ```
5 | git clone http://github.com/pakastin/docker-boilerplate
6 | ```
7 |
8 | ## Run dev environment
9 | ```
10 | npm install
11 | npm run dev
12 | ```
13 | 1) Mounts following files/folders for rapid updates:
14 | - [process]/public --> /app/public
15 | - [process]/src --> /app/src
16 |
17 | (node_modules are in /app/node_modules)
18 |
19 | 2) Starts watching following files:
20 | - [process]/css/**/*.styl --> build CSS to [process]/public/css/main.css
21 | - [process]/js/**/*.js --> build JS to [process]/public/js/main.js
22 | - [process]/src/**/*.js --> restart process
23 | - [process]/package.json --> npm install + restart process
24 |
25 | 3) Will quit on cmd+c
26 |
27 | ### Start production version
28 | ```
29 | npm start
30 | ```
31 | ### Start production version without node.js
32 | ```
33 | docker-compose up -d
34 | ```
35 | ### Scale containers
36 | ```
37 | npm run scale cats=5 dogs=5
38 | ```
39 | ### Scale containers without node.js
40 | ```
41 | docker-compose scale cats=1 dogs=2 index=3 proxy=4
42 | ```
43 | ### Scale dev containers
44 | ```
45 | npm run scale-dev cats=5 dogs=5
46 | ```
47 | ### Stop containers
48 | ```
49 | npm run stop
50 | ```
51 | ### Stop dev containers
52 | ```
53 | npm run stop-dev
54 | ```
55 |
--------------------------------------------------------------------------------
/docker-compose-dev.yml:
--------------------------------------------------------------------------------
1 | version: '2'
2 |
3 | services:
4 | proxy:
5 | build:
6 | context: proxy
7 | dockerfile: Dockerfile-dev
8 | restart: 'always'
9 | environment:
10 | NET: 'boilerplatedev'
11 | networks:
12 | boilerplatedev:
13 | ports:
14 | - '80:80'
15 | volumes:
16 | - './proxy/src:/app/src'
17 |
18 | index:
19 | build:
20 | context: index
21 | dockerfile: Dockerfile-dev
22 | restart: 'always'
23 | environment:
24 | NET: 'boilerplatedev'
25 | networks:
26 | boilerplatedev:
27 | aliases:
28 | - index
29 | volumes:
30 | - './index/public:/app/public'
31 | - './index/src:/app/src'
32 |
33 | cats:
34 | build:
35 | context: cats
36 | dockerfile: Dockerfile-dev
37 | restart: 'always'
38 | environment:
39 | NET: 'boilerplatedev'
40 | networks:
41 | boilerplatedev:
42 | aliases:
43 | - cats
44 | volumes:
45 | - './cats/public:/app/public'
46 | - './cats/src:/app/src'
47 |
48 | dogs:
49 | build:
50 | context: dogs
51 | dockerfile: Dockerfile-dev
52 | restart: 'always'
53 | environment:
54 | NET: 'boilerplatedev'
55 | networks:
56 | boilerplatedev:
57 | aliases:
58 | - dogs
59 | volumes:
60 | - './dogs/public:/app/public'
61 | - './dogs/src:/app/src'
62 |
63 | networks:
64 | boilerplatedev:
65 |
--------------------------------------------------------------------------------
/watch.js:
--------------------------------------------------------------------------------
1 |
2 | var cp = require('child_process');
3 |
4 | var chokidar = require('chokidar');
5 |
6 | watchNode('proxy');
7 |
8 | watchNode('index');
9 |
10 | watchNode('cats');
11 | watchCSS('cats', true);
12 | watchJS('cats', true);
13 |
14 | watchNode('dogs');
15 | watchCSS('dogs', true);
16 | watchJS('dogs', true);
17 |
18 | function watchNode (name) {
19 | var cmd = `npm run restart ${name}`;
20 | var cmd2 = `npm run npminstall ${name}`;
21 |
22 | chokidar.watch(`${name}/src/**/*.js`)
23 | .on('change', exec(cmd));
24 |
25 | chokidar.watch(`${name}/package.json`)
26 | .on('change', exec(cmd2, cmd));
27 | }
28 |
29 | function watchCSS (name, init) {
30 | var cmd = `stylus -u nib ${name}/css/index.styl -o ${name}/public/css/main.css`;
31 | init && exec(cmd)();
32 |
33 | chokidar.watch(`${name}/css/**/*.styl`)
34 | .on('change', exec(cmd));
35 | }
36 |
37 | function watchJS (name, init) {
38 | var cmd = `rollup -c -f iife ${name}/js/index.js -o ${name}/public/js/main-dev.js`;
39 | var cmd2 = `uglifyjs ${name}/public/js/main-dev.js -cmo ${name}/public/js/main.js`;
40 |
41 | init && exec(cmd, cmd2)();
42 |
43 | chokidar.watch(`${name}/js/**/*.js`)
44 | .on('change', exec(cmd, cmd2));
45 | }
46 |
47 | function exec (cmd) {
48 | cmd = cmd.split(' ');
49 | var args = new Array(arguments.length - 1);
50 | for (var i = 1; i < arguments.length; i++) {
51 | args[i - 1] = arguments[i];
52 | }
53 | return () => {
54 | console.log(cmd.join(' '));
55 | var childProcess = cp.spawn(cmd[0], cmd.slice(1));
56 |
57 | childProcess.stdout.pipe(process.stdout);
58 | childProcess.stderr.pipe(process.stderr);
59 | childProcess.on('error', console.error);
60 |
61 | if (args.length > 0) {
62 | childProcess.on('exit', () => {
63 | exec.apply(this, args)();
64 | });
65 | }
66 | }
67 | }
68 |
--------------------------------------------------------------------------------