$ koa2 --hbs --css sass --git koa2-test create : koa2-test create : koa2-test/package.json create : koa2-test/app.js create : koa2-test/.gitignore create : koa2-test/public create : koa2-test/public/javascripts create : koa2-test/public/images create : koa2-test/routes create : koa2-test/routes/index.js create : koa2-test/routes/users.js create : koa2-test/public/stylesheets create : koa2-test/public/stylesheets/style.sass create : koa2-test/views create : koa2-test/views/index.hbs create : koa2-test/views/layout.hbs create : koa2-test/views/error.hbs create : koa2-test/bin create : koa2-test/bin/www create : koa2-test/bin/run install dependencies: $ cd koa2-test && npm install run the app: $ DEBUG=koa2-test:* npm start $ cd koa2-test && npm install npm WARN prefer global node-gyp@3.4.0 should be installed with -g > node-sass@3.8.0 install /home/aubrey/tmp/koa2-test/node_modules/node-sass > node scripts/install.js Binary downloaded and installed at /home/aubrey/tmp/koa2-test/node_modules/node-sass/vendor/linux-x64-47/binding.node > node-sass@3.8.0 postinstall /home/aubrey/tmp/koa2-test/node_modules/node-sass > node scripts/build.js "/home/aubrey/tmp/koa2-test/node_modules/node-sass/vendor/linux-x64-47/binding.node" exists. testing binary. Binary is fine; exiting. koa2-test@0.1.0 /home/aubrey/tmp/koa2-test ├── co@4.6.0 ├─┬ debug@2.2.0 │ └── ms@0.7.1 ├─┬ handlebars@4.0.5 │ ├── async@1.5.2 │ ├─┬ optimist@0.6.1 │ │ ├── minimist@0.0.10 │ │ └── wordwrap@0.0.3 │ ├─┬ source-map@0.4.4 │ │ └── amdefine@1.0.0 │ └─┬ uglify-js@2.7.0 │ ├── async@0.2.10 │ ├── source-map@0.5.6 │ ├── uglify-to-browserify@1.0.2 │ └─┬ yargs@3.10.0 │ ├── camelcase@1.2.1 │ ├─┬ cliui@2.1.0 │ │ ├─┬ center-align@0.1.3 │ │ │ ├─┬ align-text@0.1.4 │ │ │ │ ├── longest@1.0.1 │ │ │ │ └── repeat-string@1.5.4 │ │ │ └── lazy-cache@1.0.4 │ │ ├── right-align@0.1.3 │ │ └── wordwrap@0.0.2 │ ├── decamelize@1.2.0 │ └── window-size@0.1.0 ├─┬ koa@2.0.0 │ ├─┬ accepts@1.3.3 │ │ └── negotiator@0.6.1 │ ├── content-disposition@0.5.1 │ ├── content-type@1.0.2 │ ├─┬ cookies@0.6.1 │ │ └── keygrip@1.0.1 │ ├── delegates@1.0.0 │ ├── depd@1.1.0 │ ├── destroy@1.0.4 │ ├── error-inject@1.0.0 │ ├── escape-html@1.0.3 │ ├── fresh@0.3.0 │ ├─┬ http-assert@1.2.0 │ │ ├── deep-equal@1.0.1 │ │ └── http-errors@1.4.0 │ ├─┬ http-errors@1.5.0 │ │ ├── inherits@2.0.1 │ │ └── setprototypeof@1.0.1 │ ├── is-generator-function@1.0.3 │ ├─┬ koa-compose@3.1.0 │ │ └── any-promise@1.3.0 │ ├── koa-is-json@1.0.0 │ ├─┬ mime-types@2.1.11 │ │ └── mime-db@1.23.0 │ ├─┬ on-finished@2.3.0 │ │ └── ee-first@1.1.1 │ ├── only@0.0.2 │ ├── parseurl@1.3.1 │ ├── statuses@1.3.0 │ ├─┬ type-is@1.6.13 │ │ └── media-typer@0.3.0 │ └── vary@1.1.0 ├─┬ koa-bodyparser@2.2.0 │ ├─┬ co-body@4.2.0 │ │ ├── inflation@2.0.0 │ │ ├── qs@4.0.0 │ │ └─┬ raw-body@2.1.7 │ │ ├── bytes@2.4.0 │ │ ├── iconv-lite@0.4.13 │ │ └── unpipe@1.0.0 │ └── copy-to@2.0.1 ├── koa-convert@1.2.0 ├─┬ koa-json@1.1.3 │ └─┬ streaming-json-stringify@3.1.0 │ ├── json-stringify-safe@5.0.1 │ └─┬ readable-stream@2.1.4 │ ├── buffer-shims@1.0.0 │ ├── core-util-is@1.0.2 │ ├── isarray@1.0.0 │ ├── process-nextick-args@1.0.7 │ ├── string_decoder@0.10.31 │ └── util-deprecate@1.0.2 ├─┬ koa-logger@1.3.0 │ ├── bytes@1.0.0 │ ├─┬ chalk@1.1.3 │ │ ├── ansi-styles@2.2.1 │ │ ├── escape-string-regexp@1.0.5 │ │ ├─┬ has-ansi@2.0.0 │ │ │ └── ansi-regex@2.0.0 │ │ ├── strip-ansi@3.0.1 │ │ └── supports-color@2.0.0 │ ├── humanize-number@0.0.2 │ └── passthrough-counter@1.0.0 ├─┬ koa-onerror@1.3.1 │ └─┬ swig@1.4.2 │ └─┬ uglify-js@2.4.24 │ ├── async@0.2.10 │ ├── source-map@0.1.34 │ └─┬ yargs@3.5.4 │ └── wordwrap@0.0.2 ├─┬ koa-router@7.0.1 │ ├── methods@1.1.2 │ └─┬ path-to-regexp@1.5.3 │ └── isarray@0.0.1 ├─┬ koa-static@2.0.0 │ └─┬ koa-send@3.1.1 │ ├─┬ mz@2.4.0 │ │ ├── object-assign@4.1.0 │ │ └─┬ thenify-all@1.6.0 │ │ └── thenify@3.2.0 │ └── resolve-path@1.3.2 ├─┬ koa-views@5.0.2 │ ├─┬ @f/defaults@1.0.1 │ │ └─┬ @f/foreach@1.2.2 │ │ ├── @f/foreach-array@1.0.0 │ │ ├── @f/foreach-obj@1.1.1 │ │ ├── @f/is-array@1.1.1 │ │ └─┬ @f/is-object@1.1.4 │ │ └── @f/is-function@1.1.1 │ └─┬ consolidate@0.14.1 │ └── bluebird@3.4.1 ├─┬ node-sass-middleware@0.8.0 │ ├─┬ mkdirp@0.5.1 │ │ └── minimist@0.0.8 │ └─┬ node-sass@3.8.0 │ ├── async-foreach@0.1.3 │ ├─┬ cross-spawn@3.0.1 │ │ ├─┬ lru-cache@4.0.1 │ │ │ ├── pseudomap@1.0.2 │ │ │ └── yallist@2.0.0 │ │ └─┬ which@1.2.10 │ │ └── isexe@1.1.2 │ ├─┬ gaze@1.1.0 │ │ └── globule@1.0.0 │ ├── get-stdin@4.0.1 │ ├─┬ glob@7.0.5 │ │ ├── fs.realpath@1.0.0 │ │ ├─┬ inflight@1.0.5 │ │ │ └── wrappy@1.0.2 │ │ └── once@1.3.3 │ ├── in-publish@2.0.0 │ ├─┬ lodash.clonedeep@4.3.2 │ │ └── lodash._baseclone@4.5.7 │ ├─┬ meow@3.7.0 │ │ ├─┬ camelcase-keys@2.1.0 │ │ │ └── camelcase@2.1.1 │ │ ├─┬ loud-rejection@1.6.0 │ │ │ ├─┬ currently-unhandled@0.4.1 │ │ │ │ └── array-find-index@1.0.1 │ │ │ └── signal-exit@3.0.0 │ │ ├── map-obj@1.0.1 │ │ ├── minimist@1.2.0 │ │ ├─┬ normalize-package-data@2.3.5 │ │ │ ├── hosted-git-info@2.1.5 │ │ │ ├─┬ is-builtin-module@1.0.0 │ │ │ │ └── builtin-modules@1.1.1 │ │ │ └─┬ validate-npm-package-license@3.0.1 │ │ │ ├─┬ spdx-correct@1.0.2 │ │ │ │ └── spdx-license-ids@1.2.1 │ │ │ └─┬ spdx-expression-parse@1.0.2 │ │ │ └── spdx-exceptions@1.0.4 │ │ ├─┬ read-pkg-up@1.0.1 │ │ │ ├─┬ find-up@1.1.2 │ │ │ │ └── path-exists@2.1.0 │ │ │ └─┬ read-pkg@1.1.0 │ │ │ ├─┬ load-json-file@1.1.0 │ │ │ │ ├─┬ parse-json@2.2.0 │ │ │ │ │ └─┬ error-ex@1.3.0 │ │ │ │ │ └── is-arrayish@0.2.1 │ │ │ │ ├── pify@2.3.0 │ │ │ │ └─┬ strip-bom@2.0.0 │ │ │ │ └── is-utf8@0.2.1 │ │ │ └── path-type@1.1.0 │ │ ├─┬ redent@1.0.0 │ │ │ ├─┬ indent-string@2.1.0 │ │ │ │ └── repeating@2.0.1 │ │ │ └── strip-indent@1.0.1 │ │ └── trim-newlines@1.0.0 │ ├── nan@2.4.0 │ ├─┬ node-gyp@3.4.0 │ │ ├── fstream@1.0.10 │ │ ├── graceful-fs@4.1.4 │ │ ├── nopt@3.0.6 │ │ ├─┬ npmlog@3.1.2 │ │ │ ├── are-we-there-yet@1.1.2 │ │ │ ├── console-control-strings@1.1.0 │ │ │ ├─┬ gauge@2.6.0 │ │ │ │ ├── aproba@1.0.4 │ │ │ │ ├── has-color@0.1.7 │ │ │ │ ├── has-unicode@2.0.1 │ │ │ │ └── wide-align@1.1.0 │ │ │ └── set-blocking@2.0.0 │ │ ├─┬ osenv@0.1.3 │ │ │ └── os-homedir@1.0.1 │ │ ├─┬ path-array@1.0.1 │ │ │ └─┬ array-index@1.0.0 │ │ │ └─┬ es6-symbol@3.1.0 │ │ │ ├── d@0.1.1 │ │ │ └─┬ es5-ext@0.10.12 │ │ │ └── es6-iterator@2.0.0 │ │ ├── rimraf@2.5.3 │ │ ├── semver@5.2.0 │ │ └─┬ tar@2.2.1 │ │ └── block-stream@0.0.9 │ ├─┬ request@2.73.0 │ │ ├── aws-sign2@0.6.0 │ │ ├── aws4@1.4.1 │ │ ├─┬ bl@1.1.2 │ │ │ └── readable-stream@2.0.6 │ │ ├── caseless@0.11.0 │ │ ├─┬ combined-stream@1.0.5 │ │ │ └── delayed-stream@1.0.0 │ │ ├── extend@3.0.0 │ │ ├── forever-agent@0.6.1 │ │ ├── form-data@1.0.0-rc4 │ │ ├─┬ har-validator@2.0.6 │ │ │ ├─┬ commander@2.9.0 │ │ │ │ └── graceful-readlink@1.0.1 │ │ │ ├─┬ is-my-json-valid@2.13.1 │ │ │ │ ├── generate-function@2.0.0 │ │ │ │ ├─┬ generate-object-property@1.2.0 │ │ │ │ │ └── is-property@1.0.2 │ │ │ │ ├── jsonpointer@2.0.0 │ │ │ │ └── xtend@4.0.1 │ │ │ └─┬ pinkie-promise@2.0.1 │ │ │ └── pinkie@2.0.4 │ │ ├─┬ hawk@3.1.3 │ │ │ ├── boom@2.10.1 │ │ │ ├── cryptiles@2.0.5 │ │ │ ├── hoek@2.16.3 │ │ │ └── sntp@1.0.9 │ │ ├─┬ http-signature@1.1.1 │ │ │ ├── assert-plus@0.2.0 │ │ │ ├─┬ jsprim@1.3.0 │ │ │ │ ├── extsprintf@1.0.2 │ │ │ │ ├── json-schema@0.2.2 │ │ │ │ └── verror@1.3.6 │ │ │ └─┬ sshpk@1.8.3 │ │ │ ├── asn1@0.2.3 │ │ │ ├── assert-plus@1.0.0 │ │ │ ├─┬ dashdash@1.14.0 │ │ │ │ └── assert-plus@1.0.0 │ │ │ ├── ecc-jsbn@0.1.1 │ │ │ ├─┬ getpass@0.1.6 │ │ │ │ └── assert-plus@1.0.0 │ │ │ ├── jodid25519@1.0.2 │ │ │ ├── jsbn@0.1.0 │ │ │ └── tweetnacl@0.13.3 │ │ ├── is-typedarray@1.0.0 │ │ ├── isstream@0.1.2 │ │ ├── node-uuid@1.4.7 │ │ ├── oauth-sign@0.8.2 │ │ ├── qs@6.2.0 │ │ ├── stringstream@0.0.5 │ │ ├── tough-cookie@2.2.2 │ │ └── tunnel-agent@0.4.3 │ └─┬ sass-graph@2.1.2 │ └─┬ yargs@4.8.0 │ ├─┬ cliui@3.2.0 │ │ └── wrap-ansi@2.0.0 │ ├─┬ lodash.assign@4.0.9 │ │ ├── lodash.keys@4.0.7 │ │ └── lodash.rest@4.0.3 │ ├─┬ os-locale@1.4.0 │ │ └─┬ lcid@1.0.0 │ │ └── invert-kv@1.0.0 │ ├── require-directory@2.1.1 │ ├── require-main-filename@1.0.1 │ ├─┬ string-width@1.0.1 │ │ ├── code-point-at@1.0.0 │ │ └── is-fullwidth-code-point@1.0.0 │ ├── which-module@1.0.0 │ ├── window-size@0.2.0 │ ├── y18n@3.2.1 │ └─┬ yargs-parser@2.4.0 │ └── camelcase@2.1.1 ├─┬ nodemon@1.9.2 │ ├─┬ chokidar@1.6.0 │ │ ├─┬ anymatch@1.3.0 │ │ │ ├── arrify@1.0.1 │ │ │ └─┬ micromatch@2.3.10 │ │ │ ├─┬ arr-diff@2.0.0 │ │ │ │ └── arr-flatten@1.0.1 │ │ │ ├── array-unique@0.2.1 │ │ │ ├─┬ braces@1.8.5 │ │ │ │ ├─┬ expand-range@1.8.2 │ │ │ │ │ └─┬ fill-range@2.2.3 │ │ │ │ │ ├── is-number@2.1.0 │ │ │ │ │ ├── isobject@2.1.0 │ │ │ │ │ └── randomatic@1.1.5 │ │ │ │ ├── preserve@0.2.0 │ │ │ │ └── repeat-element@1.1.2 │ │ │ ├─┬ expand-brackets@0.1.5 │ │ │ │ └── is-posix-bracket@0.1.1 │ │ │ ├── extglob@0.3.2 │ │ │ ├── filename-regex@2.0.0 │ │ │ ├─┬ kind-of@3.0.3 │ │ │ │ └── is-buffer@1.1.3 │ │ │ ├── normalize-path@2.0.1 │ │ │ ├─┬ object.omit@2.0.0 │ │ │ │ ├─┬ for-own@0.1.4 │ │ │ │ │ └── for-in@0.1.5 │ │ │ │ └── is-extendable@0.1.1 │ │ │ ├─┬ parse-glob@3.0.4 │ │ │ │ ├── glob-base@0.3.0 │ │ │ │ └── is-dotfile@1.0.2 │ │ │ └─┬ regex-cache@0.4.3 │ │ │ ├── is-equal-shallow@0.1.3 │ │ │ └── is-primitive@2.0.0 │ │ ├── async-each@1.0.0 │ │ ├── glob-parent@2.0.0 │ │ ├─┬ is-binary-path@1.0.1 │ │ │ └── binary-extensions@1.5.0 │ │ ├─┬ is-glob@2.0.1 │ │ │ └── is-extglob@1.0.0 │ │ ├── path-is-absolute@1.0.0 │ │ └─┬ readdirp@2.1.0 │ │ └── set-immediate-shim@1.0.1 │ ├── es6-promise@3.2.1 │ ├── ignore-by-default@1.0.1 │ ├─┬ lodash.defaults@3.1.2 │ │ ├─┬ lodash.assign@3.2.0 │ │ │ ├─┬ lodash._baseassign@3.2.0 │ │ │ │ ├── lodash._basecopy@3.0.1 │ │ │ │ └── lodash.keys@3.1.2 │ │ │ ├─┬ lodash._createassigner@3.1.1 │ │ │ │ ├── lodash._bindcallback@3.0.1 │ │ │ │ └── lodash._isiterateecall@3.0.9 │ │ │ └─┬ lodash.keys@3.1.2 │ │ │ ├── lodash._getnative@3.9.1 │ │ │ ├── lodash.isarguments@3.0.8 │ │ │ └── lodash.isarray@3.0.4 │ │ └── lodash.restparam@3.6.1 │ ├─┬ minimatch@3.0.2 │ │ └─┬ brace-expansion@1.1.5 │ │ ├── balanced-match@0.4.1 │ │ └── concat-map@0.0.1 │ ├─┬ ps-tree@1.1.0 │ │ └─┬ event-stream@3.3.3 │ │ ├── duplexer@0.1.1 │ │ ├── from@0.1.3 │ │ ├── map-stream@0.1.0 │ │ ├── pause-stream@0.0.11 │ │ ├── split@0.3.3 │ │ ├── stream-combiner@0.0.4 │ │ └── through@2.3.8 │ ├─┬ touch@1.0.0 │ │ └─┬ nopt@1.0.10 │ │ └── abbrev@1.0.9 │ ├── undefsafe@0.0.3 │ └─┬ update-notifier@0.5.0 │ ├─┬ configstore@1.4.0 │ │ ├── os-tmpdir@1.0.1 │ │ ├── uuid@2.0.2 │ │ ├─┬ write-file-atomic@1.1.4 │ │ │ ├── imurmurhash@0.1.4 │ │ │ └── slide@1.1.6 │ │ └── xdg-basedir@2.0.0 │ ├── is-npm@1.0.0 │ ├─┬ latest-version@1.0.1 │ │ └─┬ package-json@1.2.0 │ │ ├─┬ got@3.3.1 │ │ │ ├─┬ duplexify@3.4.5 │ │ │ │ ├── end-of-stream@1.0.0 │ │ │ │ └── stream-shift@1.0.0 │ │ │ ├── infinity-agent@2.0.3 │ │ │ ├── is-redirect@1.0.0 │ │ │ ├── is-stream@1.1.0 │ │ │ ├── lowercase-keys@1.0.0 │ │ │ ├── nested-error-stacks@1.0.2 │ │ │ ├── object-assign@3.0.0 │ │ │ ├── prepend-http@1.0.4 │ │ │ ├── read-all-stream@3.1.0 │ │ │ └── timed-out@2.0.0 │ │ └─┬ registry-url@3.1.0 │ │ └─┬ rc@1.1.6 │ │ ├── deep-extend@0.4.1 │ │ ├── ini@1.3.4 │ │ ├── minimist@1.2.0 │ │ └── strip-json-comments@1.0.4 │ ├─┬ repeating@1.1.3 │ │ └─┬ is-finite@1.0.1 │ │ └── number-is-nan@1.0.0 │ ├── semver-diff@2.1.0 │ └── string-length@1.0.1 └─┬ runkoa@1.5.2 ├─┬ babel-core@6.10.4 │ ├─┬ babel-code-frame@6.11.0 │ │ ├── esutils@2.0.2 │ │ └── js-tokens@2.0.0 │ ├─┬ babel-generator@6.11.3 │ │ ├─┬ detect-indent@3.0.1 │ │ │ ├── minimist@1.2.0 │ │ │ └── repeating@1.1.3 │ │ └── source-map@0.5.6 │ ├── babel-helpers@6.8.0 │ ├── babel-messages@6.8.0 │ ├─┬ babel-register@6.9.0 │ │ ├─┬ home-or-tmp@1.0.0 │ │ │ └── user-home@1.1.1 │ │ ├── path-exists@1.0.0 │ │ └─┬ source-map-support@0.2.10 │ │ └── source-map@0.1.32 │ ├── babel-runtime@6.9.2 │ ├── babel-template@6.9.0 │ ├─┬ babel-traverse@6.10.4 │ │ ├── globals@8.18.0 │ │ └─┬ invariant@2.2.1 │ │ └─┬ loose-envify@1.2.0 │ │ └── js-tokens@1.0.3 │ ├─┬ babel-types@6.11.1 │ │ └── to-fast-properties@1.0.2 │ ├── babylon@6.8.4 │ ├── convert-source-map@1.2.0 │ ├── json5@0.4.0 │ ├── lodash@4.9.0 │ ├── path-exists@1.0.0 │ ├── private@0.1.6 │ ├── shebang-regex@1.0.0 │ ├── slash@1.0.0 │ └── source-map@0.5.6 ├── babel-plugin-add-module-exports@0.1.4 ├─┬ babel-plugin-transform-es2015-modules-commonjs@6.10.3 │ └── babel-plugin-transform-strict-mode@6.11.3 ├─┬ babel-polyfill@6.9.1 │ ├── core-js@2.4.0 │ └── regenerator-runtime@0.9.5 ├─┬ babel-preset-es2015-node5@1.2.0 │ ├── babel-plugin-transform-es2015-destructuring@6.9.0 │ ├─┬ babel-plugin-transform-es2015-function-name@6.9.0 │ │ └── babel-helper-function-name@6.8.0 │ ├─┬ babel-plugin-transform-es2015-parameters@6.11.3 │ │ ├─┬ babel-helper-call-delegate@6.8.0 │ │ │ └── babel-helper-hoist-variables@6.8.0 │ │ └── babel-helper-get-function-arity@6.8.0 │ ├── babel-plugin-transform-es2015-shorthand-properties@6.8.0 │ ├─┬ babel-plugin-transform-es2015-sticky-regex@6.8.0 │ │ └── babel-helper-regex@6.9.0 │ └─┬ babel-plugin-transform-es2015-unicode-regex@6.11.0 │ └─┬ regexpu-core@2.0.0 │ ├── regenerate@1.3.1 │ ├── regjsgen@0.2.0 │ └─┬ regjsparser@0.1.5 │ └── jsesc@0.5.0 └─┬ babel-preset-stage-3@6.11.0 ├── babel-plugin-syntax-trailing-function-commas@6.8.0 ├─┬ babel-plugin-transform-async-to-generator@6.8.0 │ ├── babel-helper-remap-async-to-generator@6.11.2 │ └── babel-plugin-syntax-async-functions@6.8.0 └─┬ babel-plugin-transform-exponentiation-operator@6.8.0 ├─┬ babel-helper-builder-binary-assignment-operator-visitor@6.8.0 │ └── babel-helper-explode-assignable-expression@6.8.0 └── babel-plugin-syntax-exponentiation-operator@6.8.0 npm WARN optional Skipping failed optional dependency /chokidar/fsevents: npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.0.12