Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save kathyonu/c53943026d3e1ef0b129 to your computer and use it in GitHub Desktop.
Save kathyonu/c53943026d3e1ef0b129 to your computer and use it in GitHub Desktop.
Rails app steps to establish ruby-stellar-sdk workiing with passing tests

We are installing Node.js on a Mac El Capitan, Version 10.11.2
We began doing so thinking we could achieve contact with Stellar.org's
platform using Rails. Turns out, we cannot at this time do so, to our
knowledge. That means this Gist has been misnamed twice in one name.
There is no Rails anything here, and there is no ruby-stellar-sdk here,
either. What is here is everything I used to go from a Rails mindset to
Node.js learnings, so that we can write an app capable of working with
the Stellar platform.

The instructions that follow have our system up and running.

I am still cleaning up this instructional material, fine tuning the Gist
so no question is unanswered, no resource unlinked, this day 20160225.

I can recommend to you how to read this document, being the one who authored it.
I can tell you to give it a first gentle read, knowing ahead of time that every
name and term and reference you do not know will be defined and its best source
link given. This means the document will make more sense if you keep reading,
knowing the answers to your questions and definitions of unknown terms or names
will be answered and defined. Don't stop to look up every new term, don't visit
the links on your first read. Your second read through will have fewer questions,
and the links will be there to then answer them.

Yes, give this a relaxed reading all the way through and then come back here
and begin. You will see all is revealed and defined and referenced as you go
along, with sidebars and nuances shared where they are useful.

One more note .. I first arrived at a working app with gulp.
I have begun writing those instructions in a new Gist.
I am currently following Heroku's Your First Heroku Node Program !
Wow, Heroku made it crystal clear easy peasy lemon squeezey.

Collection of Commands

As I went along doing the installations, the uninstalls, verifying every command
in order more than once while writing this Gist, I began collecting useful commands
and relationships such as what is required and what installs what.

I presume you have Homebrew and .git in place here: ~/.

How will you know if you do ?
Simple as opening a new Terminal and running this:
cd ~/
ls -aux : you will see the .git directory.

brew is presumed installed
brew-cask is installed by brew and we do so here
node is installed by brew, updated by brew-cask
node is Node.js installed as node : update notices will show in brew update
nvm is installed by brew and required to install npm
nvm is a Node Version Manager
npm is a Node Package Manager
npm is bundled with Node, npm is rich with easily installed tools
npm is updated with npm install --global npm@latest anytime after install
npm is used to install others, such as yo, the full name being Yeoman
gulp is a compiling, streaming, testing workflow space
yo is short for Yeoman, requires node be installed, and is creator of gulp

As I finish writing these instructions, it appears our work flow will be using
node yo gulp trilogy, empowering the webapp creator space with gulp using
the crowning-creator-jewel in the yeoman/generator-webapp repository.
Yeoman is a generator that scaffolds out a front-end web app using gulp for the build process.

To find definitions, descriptions and uses of the commands we will be using below,
search this file using the entire command. By the time this Gist is done, all of
these commands will work. This is a list of commands I needed or wanted to know the
proofs and results as this **homebrew homebrew-cask nvm npm yo gulp
and its generator-webapp)

By the time we are done, these and many more commands will return a result:

echo $HOME
echo $NVM_PATH
brew help
brew home
brew outdated
brew update
brew upgrade
brew upgrade ruby : upgrades named app
brew cleanup
brew doctor : Check your system for potential problems
brew desc ruby
brew info
brew info nvm
brew info ruby
brew list
brew log --oneline nvm
brew log --oneline ruby
brew missing : check all installed brews for missimg dependencies
brew --version : must be >= 0.9.5 to install Cask
brew install < name > : to install command line tools
brew install brew-cask : installs Homebrew's Cask
brew remove brew-cask
brew cask install < name > to install GUI apps
brew tap : list all installed taps
brew tap caskroom/cask : a tap is a download location for information to install programs using Homebrew
brew cask : displays Cask commands
brew cask list : shows installed casks
brew cask search : shows the entire list of GUI apps available
brew cask search chrome : searches for anything with chrome in it
brew cask search google-chrome
brew cask install google-chrome
ls /opt/homebrew-cask/Caskroom # result is google-chrome
brew cask uninstall google-chrome
ls /opt/homebrew-cask/Caskroom # result is google-chrome is gone
brew cask create my-cask
brew tap caskroom/cask
brew tap-info tap : Display information about tap

For definitions of any command, and to find actual usage
and results of these commands, screen-search this page for
the full command, including back-ticks.

I leave this next first command for you to learn by your own net search ..

brew cask alfred : search this command on this page for explanation and results
brew cask home
brew cask ls | list : shows installed casks
brew cask doctor : makes sure your brew is raring to go
brew cask search
brew cask search node
brew cask search ruby
brew cask info go
brew cask info node
brew cask outdated : always good to check
brew cask update : always good to do
brew cask cleanup
brew cask install node
brew cask update node
brew cask home node
brew search nvm
brew search node
brew search go
brew install nvm
brew install node
brew install go
brew uninstall nvm
brew uninstall node
brew uninstall go

nvm install v5.6.0
nvm use 5.6 : without this, many of the below will not work, later we set it as default
nvm alias default node : sets the node version in use as default when opening a new shell
nvm update -g package-name
nvm version : is not the same as next
nvm --version
nvm which 5.6 nvm current : current version in use
nvm version : base version
nvm --version : not the same as above
node --version
nvm --version && node --version
node --version && npm --version
nvm --version && node --version && npm --version
nvm which 5
nvm which 5.6
which node
which node 5.6
which npm
npm -h --help
npm config -h : or ..
npm help config
npm help search < text >
npm info : run after you install npm, see what you see : search 201602171620 for our result
npm -l : displays full usage info, a valuable resource indeed
npm --version
npm list : same as next
npm ls : want to know version of lodash or yo etc.
nvm ls-remote
npm help install
npm help outdated
npm help shrinkwrap
npm help 7 registry
npm help 5 folders
npm help ls

npm install -g yo : the -g switch is short for --global
npm install --global yo
npm rm --global yo

npm install -g gulp
npm install --global gulp
npm rm --global gulp

npm install --global gulp-cli
npm install --save-dev gulp : Install gulp in the project devDependencies
npm rm --global gulp-cli

Name Change : these two have been changed as of 20160214 or 15
npm install --global yo generator-gulp-webapp
npm rm --global yo generator-gulp-webapp

The new commands are:

npm install --global yo generator-webapp
npm rm --global yo generator-webapp

"Now you can scaffold your very own web app:

mkdir my-webapp

cd my-webapp

yo webapp"

We choose to name our new directory as yo-stellar
because that is what it will become:

mkdir yo-stellar

cd yo-stellar

yo stellar : this command generates our webapp

To start developing, run:

gulp serve : fires up two local servers and two external servers

First time you see this system fire up, it is a sight to see.
Make sure you visit all four browser addresses, e.g. http://localhost:9000

gulp serve:test

gulp : alone will make a production-ready build of the app

gulp serve:dist : to preview the production-ready build to check if everything is ok

gulp tasks : search this command without backticks to see our first result of running it

gulp --tasks : is not the same command as above : search without backticks to see results

Next, the moment we have been working towards,
these three commands create our first continuous-development-and-testing app ..

cd ~/

mkdir yo-stellar

cd yo-stellar

gulp serve

When we arrived at this point, our app fired right up.
Sweet success, look at that beautiful output! gulp serve to see it.
Having arrived at this point, we are onto developing this app.
LATE NOTE: We have built different apps now, using different tools.
DO NOT MISS THIS TOOL: Your First Heroku Node Program !
The beauty of this Heroku tool is it gives you everything you need, and
it is crystal clear.

End of Commands section.

Notes along the way:

TODO: 20160215
AFTER: next node version update, currently we are at 5.6.0
CLARIFY how node will be updated after brew update gives notice of new version.
CLARIFICATION : 201602?? 201603??

Description: The Homebrew install command for nvm is: brew install nvm.
Simple as that.
TODO: 20160215 : Just noticed the ~/.nvmrc file is not mentioned nor defined
Done: 20160215 : The npm -l mentions this file and how to set configs.
Done: 20160215 : The ~/.nvmrc has been created with this content : 5.6.0 : nothing else

TODO: MAKE List of brew installs and nvm installs and npm installs.
QUESTION : 20160211 : VERIFY WE USE brew install node or brew install cask node
Answer: 20160213 : I search brew search node and brew cask search node and I see this:
First reference: showing brew install node
Second reference: showing brew cask install node because it is a Cask token.
Further research is needed, obviously. Meanwhile, I did run both when the time was right.


will-i-am:~ William$ brew search node
homebrew/versions/node010                leafnode                               
homebrew/versions/node012                node                                   
homebrew/versions/node04                 node-build                             
homebrew/versions/node06                 nodebrew                               
homebrew/versions/node08                 nodeenv                                
homebrew/versions/node4-lts              nodenv                                 
Caskroom/cask/mindnode-pro               Caskroom/cask/nodeclipse               
Caskroom/cask/node-profiler              Caskroom/cask/printnode                
Caskroom/cask/node                       Caskroom/cask/soundnode                
Caskroom/cask/nodebox                  

will-i-am:~ William$ brew cask search node
==> Exact match
node
==> Partial matches
mindnode-pro  nodebox   printnode
node-profiler nodeclipse  soundnode
will-i-am:~ William$ 

We will be installing node with brew install node and then
We will see if Cask knows about it and what to do with it. Later,
We will then uninstall it then install it with brew cask install node.
We shall then see the difference.

QUESTION: Are all npm install commands followed by the -g switch ?
QUESTION: Are all npm rm -g the same?
Answer : If you install with -g, yes, you uninstall with it too.
Answer : The -g switch is part of the command, explained by npmjs docs:
"The -g or --global argument will cause npm to install the package globally
rather than locally. See npm-folders."
Also from that reference, this quote:
"Global install (with -g): puts stuff in /usr/local or wherever node is installed."

Therefore the npm rm -g or --global argument will cause npm to remove / uninstall
the package globally.

These two commands are the same to install gulp globally:

npm install -g gulp-cli
npm install --global gulp-cli

The commands above and below are from the gulp Getting Started docs.

Here, the --save-dev switch installs gulp in your project devDependencies:

npm install --save-dev gulp

"Create a gulpfile.js at the root of your project:"

var gulp = require('gulp');

gulp.task('default', function() {
// place code for your default task here
});

Run gulp:

$ gulp : search gulp results to see result

The default task will run and do nothing.

To run individual tasks, use gulp <task> <othertask>.

Where do I go now?

You have an empty gulpfile and everything is installed.
How do you REALLY get started? Check out the recipes and
the list of articles for more information.

.src, .watch, .dest, CLI args - How do I use these things?

For API specific documentation you can check out the documentation for that.

Define API : Application Programming Interface
A very good explanation from MailChimp :
"API stands for application programming interface.
It can be helpful to think of the API as a way for different apps to talk to one another.
For many users, the main interaction with the API will be through API keys, which allow
other apps to access your account without you giving out your password."

Never run commands in the indented areas. I leave this for now to show how the name of
a package changed midstream of my writing these instructions, resulting in command not working.
Also, I have changed all names to the current name and address. What was once generator-gulp-webapp
is now generator-webapp:

Now we will add the 'coup de grace' with the yeoman/generator-gulp-webapp.

From the gulp README.md file:

If you haven't already, install yo and this generator by running:

$ npm install --global yo generator-gulp-webapp

TODO: MISMATCH : command first shown in the previous use also shows creating the gulp.js file.
FIX THIS : 20160215 : what happened ?
Fixed : on 20160217 this command:

$ npm install --global yo generator-gulp-webapp
was renamed to this command:
$ npm install --global yo generator-webapp and is the command to run:

npm install --global yo generator-webapp

Now you can scaffold your very own web app:

mkdir my-webapp

cd my-webapp

yo webapp

Watch the magic.

To start developing, run:

gulp serve

This will fire up a local web server, open http://localhost:9000 in your default
browser and watch files for changes, reloading the browser automatically via LiveReload.

To run the tests in the browser, run:

gulp serve:test

You will need to study the yeoman/generator-webappreference before we do the actual install,
and then again before you go into production, for more commands to do so.
For example:

Tasks

To get the list of available tasks, run:

gulp --tasks

The yeoman/generator-webapp generator uses Bower and keeps
bower_components in the project root. The link explains why.

There is a bit more to know, so make sure you read the
yeoman/generator-webapp Getting Started file.

For example:

While gulp serve is running, installing Bower components will usually be as easy as ..
Open new Terminal:
$ bower install --save jquery
HOWEVER : 20160218 : this didn't work.

TODO: 20160218 : Why did it not work and ..
QUESTION: Can jQuery be installed by into this project by brew, brew-cask or npm ?
Answer : 2016021? : don't know yet. Not working it on for now. Answer : 20160225 :

gulp tasks : search this command one more time w/o backticks to see our first result of running it

gulp --tasks : is not the same command as above : search without backticks to see results

One more important reference is the generator-webapp/docs/bower.md file.
Reading this will explain how and why bower_components are served as if located in the app,
when they are in fact kept in the project root.

End of The Commands Used

End of gulp instructions.

Overview

It has taken me a good bit of study to feel like I know where to start with
developing our app with the Stellar.org platform.

First thing I am certain of is we have to install nvm and its many tools
to make use of the Stellar platform. This is unequivocal in Feb 2016,
because .. the js-stellar-sdk is functioning, while the ruby-stellar-sdk
is not. If we want to use our Ruby on Rails app in any way with the tools we are
installing, we will need to first begin with the stellar-core and the js-stellar-sdk.

What are they, you ask ? I answer now with, these are new terms soon to be defined
and links given to learn more. Meanwhile, what the heck does sdk stand for ?

Define SDK
Answer : -sdk at the end of names means Software Development Kit.

A software development kit (SDK or "devkit") is typically a set of software
development tools that allows the creation of applications for a certain software
package, software framework, hardware platform, computer system, video game
console, operating system, or similar development platform.

**Late note : Having just recently learned of Homebrew-Cask, You will not find
it mentionded in these beginning notes. After we found Homebrew-Cask, all the quirks
and oddities we were going to have to deal with are gone. I leave some of those
notes in place, for now, while I adjust the full Gist to show the new reality of
how easy it is to work with Homebrew and Homebrew-Cask to install all that is needed
to work with the Stellar.org platform. That is the goal here, and all below is what
is needed to arrive with our system 'roaring to go stellar.'

Homebrew-Cask, Caskroom, Taps, Casks and other terms will be defined as
we go along. Yo, gulp and others will also be defined.

I have arrived at the decision to use yo and gulp and their generator-webapp.
I have removed the go and go-start instructions.
I have removed the grunt and gb instructions.
I have added the Getting Started with Node.js on Heroku materials,
the clearest on the net, app included.
Thank you, Heroku, for the easy walk through.

In the Installation Instructions, and
In the Installation Commands and Results I describe the steps,
commands and results, to arrive at being able to, I believe, begin using
the Stellar Developer Materials.

All the commands we have used to complete this install have been distilled
without notes or references, and placed above these overview paragraphs,
for your easy Homebrew installation of nvm and yo and gulp and
beyond. For explanations and references for each of these commands, please see
the Installation Instructions below the commands. Don't go yet.

Define keg-only
keg-only means a brew formula is not symlinked into /usr/local. An example of a notice you will see in the Install Instructions below:
"This formula is keg-only, which means it was not symlinked into /usr/local."

Three days into writing these instructions and running and verifying
commands, I just found Homebrew Cask, and my question is ..

QUESTION: Will Homebrew-Cask change anything, once we install it ?
Answer : Yes, Homebrew-Cask simplifies the install and updates with
its Casks,
including node.

What is it ?
As npm is to nvm, cask is to homebrew, both are 'package manager' systems.

Why install it ?
I will answer these two questions right now:

QUESTION: What is a 'CLI workflow'
Answer : Command Line Interface workflow

It is always an excellent idea to set up your .gitignore file(s) BEFORE you
begin committing. Below is a list of .gitignore file addtions we will be
using, and, before we are done, we will be showing the complete .gitignore
file we have assembled from these resources, ready for you to use:

Do not make a first commit without first ensuring your .gitignore file is set.

.gitignore manual
Best .gitignore files resource
Global OSX.gitignore
GitBook.gitignore
gulp-gitignore
Heroku's Getting Started with Node.js
Heroku's Best Practices for Node.js Development
Node.gitignore
Rails.gitignore
Ruby.gitignore
Sass.gitignore
Yeoman.gitignore
WordPress.gitignore : an example we won't be using

We are going to keep this next one as the last .gitignore file to enter,
and the reason is, this one adds two items, both of which may be already
included in the above additions.

# Grunt ignore created by https://www.gitignore.io/api/grunt
# Grunt usually compiles files inside this directory
dist/

# Grunt usually preprocesses files such as coffeescript, compass... inside the .tmp directory
.tmp/

End of Configuration and Ignore Files

We are using Homebrew and Homebrew-Cask.
If you are curious, this is how we Installed Homebrew-Cask.

End of Homebrew-Cask

Open new Terminal, get ready, gulp ..

Installation Instructions

The following will be a full installation of all that is required to work
with Node.js and its supporting tools to build websites and
API's. We are building this because we want to be able to make use of
the js-stellar-sdk from Stellar.org.

I have removed all further mention of the Stellar.org materials into
a new Gist as yet incomplete, doing so for clarity and simplicity in this Gist.

You do not need to care about using the Stellar platform to use these
instructions to easily install your tools, just ignore the Stellar mentions.

Make use of the Commands and Their Results after being run, as
you install because more explanations are in that area. After we install nvm
and npm and yo and others, all installations are extremely easy ..

This all begins with the complete instructions for how to install nvm, with
Homebrew's lovely brew install command. Also, we found Homebrew-Cask while
doing this, so we bring that wonderful tool into the mix, too.

Why my team uses npm instead of bower will sway you to choose npm
and the reason for me is, Bower adds its own complexities to keeping
everything in sync. Late note: I have now written into the instructions
how we will be installing nvm and node, both installed by Homebrew using
Homebrew-Cask. Bower will be used as a tool of other installations, perhaps
managing jQuery and Bookstrap. I do not know yet, but I do know we will be
installing Bower as part of another installation, and we will be using
nvm and npm as our prime package manager first, not Bower.

Also, in my studies I came across the name, CommonJS.
My understanding right now is nvm is our path, and CommonJS is used
internally by other parts of the build process, we will not be installing
CommonJs directly.

As Rails developer, my study of Stellar so far leads me to see the need to
install nvm and npm, and gulp, not grunt.

May I recommend you read this article, Gulp vs Grunt. Why one? Why the Other?.
It appears it is a case of gulp or grunt. That being said, while we will be
using gulp, other parts of the build process do use grunt.

Regarding npm: npm software wiki, a quote:

"npm, the Node Package Manager, is the default package manager
for the JavaScript runtime environment Node.js."

Another quote from the same source:

Overview:
As of Node.js version 0.6.3, npm is bundled and installed automatically
with the environment. npm runs through the command line and manages
dependencies for an application. It also allows users to install Node.js
applications that are available on the npm registry. npm is written
entirely in JavaScript and was developed by Isaac Z. Schlueter as a result
of the frustrations he had experienced while working with CommonJS . . .

That one line catches my eye ..
'npm allows users to install Node.js applications
that are available on the npm registry.'

Our tools so far definitely include nvm and npm and node, and yo
and git and gulp ready to generate web apps with yo webapp.

What is nvm : Node Version Manager
What is npm : Node Package Manager.
What is Yo : Yo is the tool to use for running Yeoman generators.

Yeoman
Now that we have Node.js installed on our machine, we are now ready to
install Yeoman. Yeoman is using 3 core tools. These core tools are composed
by Yo, Grunt, and Bower. So we will install them one by one using npm which
came with Node.js when we installed node.

What is gb.
What is grunt : grunt is the task-manager. See a great explanation a bit further below.
What is Bower : Bower is a package manager.

A note about Yo from their link:

"We now have the core tools needed for Yeoman to work, but there is one more
thing we need to do. That is to install the generator we want to use. If you want
to create a basic webapp, you just need to run npm install -g generator-webapp
or if you want to work on AngularJS, just run npm install -g generator-angular.
(Do not run the command yet.)

We now have all the things needed, and you can now kickstart your project by
running yo webapp or yo angular.

To install Yo, we will run: npm install -g yo.
To install gulp, we will run: npm install -g gulp

io.js "is a fork of Joyent's Node.js"
We will not be using io.js and that quote is from:
Install Node.js or io.js with nvm, by Fernan Morales : 03 Feb 2015.
Another quote:
"... everything written here is also clearly explained by Creationix
in the Readme from the NVM repo. Also, executing nvm alone or nvm help will
display a comprehensive list of all the commands along with a brief description.
Good to know.

A great explanation of Grunt from Treehouse.com:

" . . because Node.js can be used on your desktop computer, programmers have
created useful Node-based tools that help with the process of building web sites.
For example, Grunt is a popular tool used to automate common tasks like compiling
Sass files to CSS, making JavaScript files smaller so they load in less time, and
compressing images to smaller file size. While these tools run through the
Node.js environment, you’ll use another tool, NPM, to install them.
NPM is what’s called a “package manager.”
NPM makes installing a tool like Grunt
easy as npm install -g grunt followed by npm install -g grunt-cli.

Other tools you may run across:
gulp : A streaming build system, the g is capitalized only in the gulp logo.
gulp faq
gulp js
generator-webapp

The install gulp instructions are simple:


 installing Gulp is very reminiscent of what you had to do with Grunt.

    Have a package.json
    npm install -g gulp
    npm install --save-dev gulp
    Create a gulpfile.js
    gulp

At this point, the main difference with Grunt is that they didn’t take their  
CLI out of core (at least not yet), which might confuse you if you don’t  
understand global installs in npm.

Before heading to a sample gulpfile, let’s look at how the API looks like.  
There’s five methods, and that’s all you need. That’s awesome, a concise API  
really helps keep the module focused on just what it’s good at, processing  
build tasks.

    .src(globs[, options]) takes a glob and returns an input stream
    .dest(path) takes a path and returns an output stream
    .task(name[, deps], fn) defines a task
    .run(tasks...[, cb]) runs tasks
    .watch(glob [, opts], cb) watches the file system

AFTER we arrive at the point where gulp and yo are installed, we will be
installing Yeoman's generator-webapp, their repository description is,
'A gulp.js generator for modern webapps'

We will be using Homebrew to install nvm. You can also use the curl command.
The Yeoman reference gives the command to install nvm as:
curl https://raw.githubusercontent.com/creationix/nvm/v0.7.0/install.sh | sh
This script will clone the nvm repository from Github into your ~/.nvm
directory and adds the 'source line' to your ~/.bash_profile or ~/.profile
file. When we use Homebrew to install, we have to add that 'source line' manually.

Regarding Yeoman: it uses three main tools, composed by Yo, Grunt and Bower.

I visit creationix/nvm. The description
reads as:
"Node Version Manager - Simple bash script to manage multiple active node.js versions"
Well, now I know what nvm is and what it means and what it does.
NVM is the most basic Package Manager system for "active node.js versions."

Note: We will be managing node with Homebrew-Cask.

Do we already have nvm installed ? If so, where is it and what version ?
The creationix/nvm repository shows me the install command to use
to install nvm and contains this note:
"The (install) script clones the nvm repository to ~/.nvm and adds
the source line to your profile (~/.bash_profile, ~/.zshrc or ~/.profile)."

TODO : 20160206 : What is the 'source line' ?
Answer: 20160206 : Line in our ~/.profile file telling the system where nvm is located.
Answer: 20160206 : Our 'source line' will be generated by brew install rvm and we will hand install what is generated into our ~/.profile file. Again, we
are not using nvm to install node.

QUESTION: 20160206 : Using brew install nvm where does it install 'source line' ?
Answer : 20160206 : We will hand-install the brew generated 'source line'.

I open a new Terminal and type in:

cd ~/
ls -aux

I see no .nvm in place, and so we do not have nvm installed.

Is there another way to verify we do or do not have nvm installed ?
Yes, there is this, from the creationix/nvm repository:

If you want to see what versions are installed:

nvm ls
If you want to see what versions are available to install:
nvm ls-remote
If these commands do not work, you do not have nvm installed.

Regarding nvm installation, the first thing I came across is this note:
"Homebrew installation is not supported." in the creationix/nvm repository.

Say what ? What does this mean ?
Time to search the net for 'homebrew nvm installation problems'

The Homebrew install command for nvm is: brew install nvm, simple as that.

I trust Homebrew, why should I not use it ? No reason I can see.

Also, three days into installing, uninstalling and wrting this Gist,
I found Homebrew-Cask, and best I understand, Cask is as an "npm" to Homebrew.

I find this StackOverflow page on Homebrew node.js and I see
the same command to install using Homebrew, and the 'source line' to place
in any one of, .profile, .bashrc or .zshrc files. This page covers more
information not mentioned right now; we know what we need to know to continue.

I believe we now know our first command to begin the install process ..
Do not run these commands yet .. consider this a dry run for learning.

TODO: 20160204 : is this correct, are we in the do not run section ? Answer is Yes, we are in the do not run section.

To see these commands without explanation, see : Installation Instructions

To see these commands with results, see : Installation Commands with Results

Do not run these commands yet .. consider this a dry run for learning.

[Installation Instructions]

Open new Terminal:

brew update
brew doctor
brew install nvm

Open the ~/.profile file:

open -e ~/.profile

Enter this 'source line' in ~/.profile file:

Template of 'source line' to add:
source $(brew --prefix nvm)/nvm.sh

TODO: 20160211 : this line is near duplicated elsewhere, are both correct ?
Answer: line 659, 1533: both are correct, one is in Install Commands, one is in the explanations.

After running brew install nvm , Terminal will tell you to add these two
lines into the ~/.profile file:

export NVM_DIR=~/.nvm
. $(brew --prefix nvm)/nvm.sh

Yes, that is a period followed by a space.

What happens if I try to update nvm with brew update nvm ?


brew update nvm
This command updates brew itself, and does not take formula names.
Use `brew upgrade < formula >`.
will-i-am:~ William$ 

So, we now run the brew upgrade nvm command:

brew upgrade nvm
=> Error: nvm 0.30.1 already installed

Now we install node after we find the versions available:

nvm ls-remote

We can install any version .. using nvm to do so, however ..

We will be using brew install node so node will be tracked as a Cask,
and updates and upgrades will be dealt with by Homebrew-Cask.

Template to install Node.js:

brew install version-number

Example to install Node.js:

brew install 5.0

How to switch versions:

brew use 0.12

How to remove a version:

brew uninstall 0.12

What versions of Node.js do we have installed ?

nvm ls

What is the most current stable version of Node.js ?

nvm ls-remote

Install Node.js : We will be installing v5.6.0. Template :

brew install cask-token

How we are installing Node.js:

brew install node


will-i-am:~ William$ brew install node
==> Downloading https://homebrew.bintray.com/bottles/node-5.6.0.el_capitan.bottle.tar.gz
Already downloaded: /Library/Caches/Homebrew/node-5.6.0.el_capitan.bottle.tar.gz
==> Pouring node-5.6.0.el_capitan.bottle.tar.gz
==> Caveats
Please note by default only English locale support is provided. If you need
full locale support you should:
  `brew reinstall node --with-full-icu`

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
🍺  /usr/local/Cellar/node/5.6.0: 3,726 files, 35.3M
will-i-am:~ William$ 

The results of our installation are showing with the info command:


will-i-am:~ William$ brew info node
node: stable 5.6.0 (bottled), HEAD
Platform built on the V8 JavaScript runtime to build network applications
https://nodejs.org/
/usr/local/Cellar/node/5.6.0 (3,726 files, 35.3M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/node.rb
==> Dependencies
Build: pkg-config ✔
Optional: openssl ✔
==> Options
--with-debug
  Build with debugger hooks
--with-full-icu
  Build with full-icu (all locales) instead of small-icu (English only)
--with-openssl
  Build with openssl support
--without-completion
  npm bash completion will not be installed
--without-npm
  npm will not be installed
--HEAD
  Install HEAD version
==> Caveats
Please note by default only English locale support is provided. If you need
full locale support you should:
  `brew reinstall node --with-full-icu`

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

will-i-am:~ William$ brew cask info node
node: 4.3.0
Node.js
https://nodejs.org/
Not installed
https://github.com/caskroom/homebrew-cask/blob/master/Casks/node.rb
==> Contents
  node-v4.3.0.pkg (pkg)
will-i-am:~ William$ 

I see the note 'Not installed' and so run:

brew cask install node

brew cask info node


will-i-am:~ William$ brew cask info node
node: 4.3.0
Node.js
https://nodejs.org/
Not installed
https://github.com/caskroom/homebrew-cask/blob/master/Casks/node.rb
==> Contents
  node-v4.3.0.pkg (pkg)

will-i-am:~ William$ brew cask install node
==> Downloading https://nodejs.org/dist/v4.3.0/node-v4.3.0.pkg
Already downloaded: /Library/Caches/Homebrew/node-4.3.0.pkg
==> Verifying checksum for Cask node
==> Running installer for node; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
==> installer: Package name is Node.js
==> installer: Installing at base path /
==> installer: The install was successful.
🍺  node staged at '/opt/homebrew-cask/Caskroom/node/4.3.0' (12M)

will-i-am:~ William$ brew cask info node
node: 4.3.0
Node.js
https://nodejs.org/
/opt/homebrew-cask/Caskroom/node/4.3.0 (12M)
https://github.com/caskroom/homebrew-cask/blob/master/Casks/node.rb
==> Contents
  node-v4.3.0.pkg (pkg)
will-i-am:~ William$ 

Does Homebrew-Cask know about it ?

brew cask info node

Install the Cask named, node:

brew cask install node

Does Homebrew-Cask now know about it ?

brew cask info node


will-i-am:~ William$ brew cask info node
node: 4.3.1
Node.js
https://nodejs.org/
Not installed
https://github.com/caskroom/homebrew-cask/blob/master/Casks/node.rb
==> Contents
  node-v4.3.1.pkg (pkg)
will-i-am:~ William$ 

brew tap : list the taps

brew tap-info < tap name > : Display information about tap


will-i-am:~ William$ brew tap
caskroom/cask
homebrew/dupes
homebrew/versions

will-i-am:~ William$ brew tap-info caskroom/cask
caskroom/cask: unpinned, 1 formula, 1 command
/usr/local/Library/Taps/caskroom/homebrew-cask (3,609 files, 71.1M)
From: https://github.com/caskroom/homebrew-cask
will-i-am:~ William$ 

Running Node.js:

nvm use version-number : this being a new install, we have one versison.

Run:

nvm use v5.6.0


will-i-am:~ William$ nvm use 5.6
Now using node v5.6.0 (npm v3.7.2)
will-i-am:~ William$ 

Most excellent.

I now set this version as default when opening a new shell:

nvm alias default node


will-i-am:~ William$ nvm --version
0.30.1
will-i-am:~ William$  nvm alias default node
default -> node (-> v5.6.0)
will-i-am:~ William$ 

Per instructions, we install the latest npm:

npm install -g npm@latest


will-i-am:~ William$ npm install -g npm@latest
/Users/William/.nvm/versions/node/v5.6.0/bin/npm -> /Users/William/.nvm/versions/node/v5.6.0/lib/node_modules/npm/bin/npm-cli.js
- assert-plus@0.2.0 node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/node_modules/assert-plus
/Users/William/.nvm/versions/node/v5.6.0/lib
└─┬ npm@3.7.2 
  ├── graceful-fs@4.1.3 
  ├─┬ lodash.clonedeep@4.0.4 
  │ └─┬ lodash._stack@4.0.2 
  │   └── lodash._mapcache@4.0.1 
  ├── lodash.isarguments@3.0.6 
  ├── lodash.keys@4.0.2 
  ├─┬ lodash.union@4.0.2 
  │ ├── lodash._baseflatten@4.0.1 
  │ ├─┬ lodash._setcache@4.0.1
  │ │ └── lodash._mapcache@4.0.1 
  │ └── lodash.rest@4.0.1 
  ├─┬ lodash.uniq@4.0.2 
  │ └─┬ lodash._setcache@4.0.1
  │   └── lodash._mapcache@4.0.1 
  ├─┬ lodash.without@4.0.2 
  │ ├─┬ lodash._setcache@4.0.1
  │ │ └── lodash._mapcache@4.0.1 
  │ └── lodash.rest@4.0.1 
  ├─┬ node-gyp@3.2.1
  │ └─┬ minimatch@1.0.0
  │   └── lru-cache@2.7.3 
  ├─┬ npm-registry-client@7.0.9
  │ └── retry@0.8.0 
  ├─┬ npmlog@2.0.2 
  │ ├─┬ are-we-there-yet@1.0.6 
  │ │ └── delegates@1.0.0 
  │ └─┬ gauge@1.2.5 
  │   ├─┬ lodash.pad@3.2.1 
  │   │ └── lodash.repeat@3.1.1 
  │   ├─┬ lodash.padleft@3.1.1
  │   │ └─┬ lodash._createpadding@3.6.1
  │   │   └── lodash.repeat@3.1.1 
  │   └─┬ lodash.padright@3.1.1
  │     └─┬ lodash._createpadding@3.6.1
  │       └── lodash.repeat@3.1.1 
  ├─┬ request@2.69.0 
  │ ├─┬ aws4@1.2.1 
  │ │ └── lru-cache@2.7.3 
  │ ├── hawk@3.1.3 
  │ ├─┬ http-signature@1.1.1 
  │ │ └── assert-plus@0.2.0 
  │ └── qs@6.0.2 
  ├── retry@0.9.0 
  ├── rimraf@2.5.1 
  └─┬ which@1.2.4 
    └── isexe@1.1.1 

will-i-am:~ William$

What command caused those results ?
will-i-am:~ William$ npm install -g npm@latest

As a note, I ran this same command a while later while
verifying install and uninstall commands, and this is
the result, nothing to update:


will-i-am:~ William$ npm install -g npm@latest
/Users/William/.nvm/versions/node/v5.6.0/bin/npm -> /Users/William/.nvm/versions/node/v5.6.0/lib/node_modules/npm/bin/npm-cli.js
/Users/William/.nvm/versions/node/v5.6.0/lib
└── npm@3.7.2 

will-i-am:~ William$ 

We are good to go.
Homebrew-Cask now keeps its eye on npm with every use of:

brew update

This will update itself and Homebrew-Cask, the Casks, the Taps, the Versions.
Sweet indeed. Node.js is now on automatic with Cask keeping its eye on it.
When Node.js issues a new version, a notice to that fact will appear at the
bottom of any messages given with brew update.

Which npm are we using:


will-i-am:~ William$ which npm
/Users/William/.nvm/versions/node/v5.6.0/bin/npm
will-i-am:~ William$ 

Now we run nvm ls to see what is what:

nvm ls


Last login: Sat Feb 13 21:28:12 on ttys023
will-i-am:~ William$ nvm ls
         v5.5.0
->       v5.6.0
         system
node -> stable (-> v5.6.0) (default)
stable -> 5.6 (-> v5.6.0) (default)
iojs -> N/A (default)
will-i-am:~ William$ 

Commands to find out where we are, versions wise:

nvm ls nvm --version npm --version


will-i-am:~ William$ nvm ls
         v5.5.0
->       v5.6.0
         system
node -> stable (-> v5.6.0) (default)
stable -> 5.6 (-> v5.6.0) (default)
iojs -> N/A (default)

will-i-am:~ William$ nvm --version
0.30.1

will-i-am:~ William$ npm --version
3.7.2

will-i-am:~ William$ 

Perfect.

If your answers are not perfect, run this:

nvm use 5.6.0

Now we can install Yeoman.

npm install -g yo

Now we run the installation of yo:

npm install -g yo

Yeoman answers

TODO: 20160211 : verify the above link does answer the above two questions.

ALSO: we have these warnings ..
npm WARN deprecated URIjs@1.16.1: package renamed to "urijs" (lower-case), please update accordingly
npm WARN prefer global marked@0.3.5 should be installed with -g

There is that -g switch, again, on the global marked@0.3.5 note. npm install with
the -g switch means the packages are installed globally, usually /usr/local/

ALSO: we have this error, showing as repeated ..
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer
directory '/Library/Developer/CommandLineTools' is a command line tools instance

TODO: 20160211 : resolve these two warnings and one error.
Answer: 20160214 : the -g switch : found answer, placed it twice in this material Answer: 2016021? : deprecated URIjs@1.16.1: package renamed to "urijs" : ours reads as:

└── URIjs@1.16.1

TODO: How do we update name to 'urijs' ?


will-i-am:~ William$ npm install -g yo
npm WARN deprecated npmconf@2.1.2: this package has been reintegrated into npm and is now out of date with respect to npm
/usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/bin/yo -> /usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/lib/node_modules/yo/lib/cli.js

> yo@1.6.0 postinstall /usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/lib/node_modules/yo
> yodoctor

Yeoman Doctor
Running sanity checks on your system

✔ Global configuration file is valid
✔ NODE_PATH matches the npm root
✔ Node.js version
✔ No .bowerrc file in home directory
✔ No .yo-rc.json file in home directory
✔ npm version

Everything looks all right!
/usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/lib
└─┬ yo@1.6.0 
  ├── async@1.5.2 
  ├─┬ chalk@1.1.1 
  │ ├── ansi-styles@2.1.0 
  │ ├── escape-string-regexp@1.0.4 
  │ ├── has-ansi@2.0.0 
  │ ├── strip-ansi@3.0.0 
  │ └── supports-color@2.0.0 
  ├─┬ configstore@1.4.0 
  │ ├── graceful-fs@4.1.3 
  │ ├─┬ mkdirp@0.5.1 
  │ │ └── minimist@0.0.8 
  │ ├── object-assign@4.0.1 
  │ ├── os-tmpdir@1.0.1 
  │ ├── osenv@0.1.3 
  │ ├── uuid@2.0.1 
  │ ├─┬ write-file-atomic@1.1.4 
  │ │ ├── imurmurhash@0.1.4 
  │ │ └── slide@1.1.6 
  │ └── xdg-basedir@2.0.0 
  ├─┬ cross-spawn-async@2.1.8 
  │ ├─┬ lru-cache@4.0.0 
  │ │ ├── pseudomap@1.0.2 
  │ │ └── yallist@2.0.0 
  │ └─┬ which@1.2.4 
  │   ├─┬ is-absolute@0.1.7 
  │   │ └── is-relative@0.1.3 
  │   └── isexe@1.1.1 
  ├── figures@1.4.0 
  ├─┬ fullname@2.1.0 
  │ ├─┬ npmconf@2.1.2 
  │ │ ├─┬ config-chain@1.1.10 
  │ │ │ └── proto-list@1.2.4 
  │ │ ├── inherits@2.0.1 
  │ │ ├── ini@1.3.4 
  │ │ ├─┬ nopt@3.0.6 
  │ │ │ └── abbrev@1.0.7 
  │ │ ├─┬ once@1.3.3 
  │ │ │ └── wrappy@1.0.1 
  │ │ ├── semver@4.3.6 
  │ │ └── uid-number@0.0.5 
  │ ├── pify@2.3.0 
  │ └─┬ pinkie-promise@2.0.0 
  │   └── pinkie@2.0.4 
  ├─┬ got@5.4.1 
  │ ├─┬ create-error-class@2.0.1 
  │ │ └── capture-stack-trace@1.0.0 
  │ ├── duplexer2@0.1.4 
  │ ├── is-plain-obj@1.1.0 
  │ ├── is-redirect@1.0.0 
  │ ├── is-retry-allowed@1.0.0 
  │ ├── is-stream@1.0.1 
  │ ├── lowercase-keys@1.0.0 
  │ ├── node-status-codes@1.0.0 
  │ ├─┬ parse-json@2.2.0 
  │ │ └─┬ error-ex@1.3.0 
  │ │   └── is-arrayish@0.2.1 
  │ ├── read-all-stream@3.1.0 
  │ ├─┬ readable-stream@2.0.5 
  │ │ ├── core-util-is@1.0.2 
  │ │ ├── isarray@0.0.1 
  │ │ ├── process-nextick-args@1.0.6 
  │ │ ├── string_decoder@0.10.31 
  │ │ └── util-deprecate@1.0.2 
  │ ├── timed-out@2.0.0 
  │ ├── unzip-response@1.0.0 
  │ └─┬ url-parse-lax@1.0.0 
  │   └── prepend-http@1.0.3 
  ├─┬ humanize-string@1.0.1 
  │ └── decamelize@1.1.2 
  ├─┬ inquirer@0.11.4 
  │ ├── ansi-escapes@1.1.1 
  │ ├── ansi-regex@2.0.0 
  │ ├─┬ cli-cursor@1.0.2 
  │ │ └─┬ restore-cursor@1.0.1 
  │ │   └── exit-hook@1.1.1 
  │ ├── cli-width@1.1.1 
  │ ├─┬ readline2@1.0.1 
  │ │ ├── code-point-at@1.0.0 
  │ │ ├── is-fullwidth-code-point@1.0.0 
  │ │ └── mute-stream@0.0.5 
  │ ├── run-async@0.1.0 
  │ ├── rx-lite@3.1.2 
  │ ├── string-width@1.0.1 
  │ └── through@2.3.8 
  ├─┬ insight@0.7.0 
  │ ├── inquirer@0.10.1 
  │ ├─┬ lodash.debounce@3.1.1 
  │ │ └── lodash._getnative@3.9.1 
  │ ├─┬ os-name@1.0.3 
  │ │ ├─┬ osx-release@1.1.0 
  │ │ │ └── minimist@1.2.0 
  │ │ └─┬ win-release@1.1.1 
  │ │   └── semver@5.1.0 
  │ ├─┬ request@2.69.0 
  │ │ ├── aws-sign2@0.6.0 
  │ │ ├─┬ aws4@1.2.1 
  │ │ │ └── lru-cache@2.7.3 
  │ │ ├── bl@1.0.2 
  │ │ ├── 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-rc3 
  │ │ ├─┬ har-validator@2.0.6 
  │ │ │ ├─┬ commander@2.9.0 
  │ │ │ │ └── graceful-readlink@1.0.1 
  │ │ │ └─┬ is-my-json-valid@2.12.4 
  │ │ │   ├── generate-function@2.0.0 
  │ │ │   ├─┬ generate-object-property@1.2.0 
  │ │ │   │ └── is-property@1.0.2 
  │ │ │   └── jsonpointer@2.0.0 
  │ │ ├─┬ 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.2.2 
  │ │ │ │ ├── extsprintf@1.0.2 
  │ │ │ │ ├── json-schema@0.2.2 
  │ │ │ │ └── verror@1.3.6 
  │ │ │ └─┬ sshpk@1.7.3 
  │ │ │   ├── asn1@0.2.3 
  │ │ │   ├── dashdash@1.12.2 
  │ │ │   ├── ecc-jsbn@0.1.1 
  │ │ │   ├── jodid25519@1.0.2 
  │ │ │   ├── jsbn@0.1.0 
  │ │ │   └── tweetnacl@0.13.3 
  │ │ ├── is-typedarray@1.0.0 
  │ │ ├── isstream@0.1.2 
  │ │ ├── json-stringify-safe@5.0.1 
  │ │ ├─┬ mime-types@2.1.9 
  │ │ │ └── mime-db@1.21.0 
  │ │ ├── node-uuid@1.4.7 
  │ │ ├── oauth-sign@0.8.1 
  │ │ ├── qs@6.0.2 
  │ │ ├── stringstream@0.0.5 
  │ │ └── tunnel-agent@0.4.2 
  │ └── tough-cookie@2.2.1 
  ├── lodash@3.10.1 
  ├─┬ meow@3.7.0 
  │ ├─┬ camelcase-keys@2.0.0 
  │ │ └── camelcase@2.1.0 
  │ ├─┬ loud-rejection@1.2.1 
  │ │ ├── array-find-index@1.0.1 
  │ │ └── signal-exit@2.1.2 
  │ ├── map-obj@1.0.1 
  │ ├── minimist@1.2.0 
  │ ├─┬ normalize-package-data@2.3.5 
  │ │ ├── hosted-git-info@2.1.4 
  │ │ ├─┬ 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.0 
  │ │   └─┬ spdx-expression-parse@1.0.2 
  │ │     └── spdx-exceptions@1.0.4 
  │ ├─┬ redent@1.0.0 
  │ │ ├── indent-string@2.1.0 
  │ │ └── strip-indent@1.0.1 
  │ └── trim-newlines@1.0.0 
  ├─┬ npm-keyword@4.2.0 
  │ └── registry-url@3.0.3 
  ├── opn@3.0.3 
  ├─┬ package-json@2.3.0 
  │ ├─┬ rc@1.1.6 
  │ │ ├── deep-extend@0.4.1 
  │ │ ├── minimist@1.2.0 
  │ │ └── strip-json-comments@1.0.4 
  │ └── semver@5.1.0 
  ├─┬ read-pkg-up@1.0.1 
  │ ├─┬ find-up@1.1.0 
  │ │ └── path-exists@2.1.0 
  │ └─┬ read-pkg@1.1.0 
  │   ├─┬ load-json-file@1.1.0 
  │   │ └─┬ strip-bom@2.0.0 
  │   │   └── is-utf8@0.2.1 
  │   └── path-type@1.1.0 
  ├─┬ repeating@2.0.0 
  │ └─┬ is-finite@1.0.1 
  │   └── number-is-nan@1.0.0 
  ├─┬ root-check@1.0.0 
  │ ├─┬ downgrade-root@1.1.0 
  │ │ ├── default-uid@1.0.0 
  │ │ └── is-root@1.0.0 
  │ └─┬ sudo-block@1.2.0 
  │   └── is-docker@1.0.0 
  ├─┬ sort-on@1.2.2 
  │ ├── arrify@1.0.1 
  │ └── dot-prop@2.2.0 
  ├── string-length@1.0.1 
  ├── titleize@1.0.0 
  ├─┬ update-notifier@0.6.0 
  │ ├── is-npm@1.0.0 
  │ ├── latest-version@2.0.0 
  │ └─┬ semver-diff@2.1.0 
  │   └── semver@5.1.0 
  ├─┬ user-home@2.0.0 
  │ └── os-homedir@1.0.1 
  ├─┬ yeoman-character@1.1.0 
  │ └─┬ supports-color@3.1.2 
  │   └── has-flag@1.0.0 
  ├─┬ yeoman-doctor@2.1.0 
  │ ├─┬ bin-version-check@2.1.0 
  │ │ ├─┬ bin-version@1.0.4 
  │ │ │ └─┬ find-versions@1.2.1 
  │ │ │   └── semver-regex@1.0.0 
  │ │ ├── minimist@1.2.0 
  │ │ └─┬ semver-truncate@1.1.0 
  │ │   └── semver@5.1.0 
  │ ├─┬ each-async@1.1.1 
  │ │ ├── onetime@1.1.0 
  │ │ └── set-immediate-shim@1.0.1 
  │ ├── log-symbols@1.0.2 
  │ ├── object-values@1.0.0 
  │ ├── semver@5.1.0 
  │ └─┬ twig@0.8.7 
  │   ├─┬ minimatch@0.2.14 
  │   │ ├── lru-cache@2.7.3 
  │   │ └── sigmund@1.0.1 
  │   └─┬ walk@2.3.9 
  │     └── foreachasync@3.0.0 
  ├─┬ yeoman-environment@1.5.2 
  │ ├─┬ debug@2.2.0 
  │ │ └── ms@0.7.1 
  │ ├── diff@2.2.1 
  │ ├─┬ globby@4.0.0 
  │ │ ├─┬ array-union@1.0.1 
  │ │ │ └── array-uniq@1.0.2 
  │ │ └─┬ glob@6.0.4 
  │ │   ├── inflight@1.0.4 
  │ │   ├─┬ minimatch@3.0.0 
  │ │   │ └─┬ brace-expansion@1.1.2 
  │ │   │   ├── balanced-match@0.3.0 
  │ │   │   └── concat-map@0.0.1 
  │ │   └── path-is-absolute@1.0.0 
  │ ├── grouped-queue@0.3.2 
  │ ├─┬ mem-fs@1.1.2 
  │ │ ├─┬ through2@2.0.1 
  │ │ │ └── xtend@4.0.1 
  │ │ ├─┬ vinyl@1.1.1 
  │ │ │ ├── clone@1.0.2 
  │ │ │ ├── clone-stats@0.0.1 
  │ │ │ └── replace-ext@0.0.1 
  │ │ └─┬ vinyl-file@1.3.0 
  │ │   └─┬ strip-bom-stream@1.0.0 
  │ │     └── first-chunk-stream@1.0.0 
  │ ├── text-table@0.2.0 
  │ └── untildify@2.1.0 
  └─┬ yosay@1.1.0 
    ├── minimist@1.2.0 
    ├── pad-component@0.0.1 
    ├─┬ taketalk@1.0.0 
    │ ├── get-stdin@4.0.1 
    │ └── minimist@1.2.0 
    └── word-wrap@1.1.0 

will-i-am:~ William$ 

Yo is successfully installed.

There are two notes we will want to research and attend to, possibly:
TODO: 20160211 : No .bowerrc file in home directory
TODO: 20160211 : No .yo-rc.json file in home directory

The first time I installed yo, the response is quite long ..
Then, the second time I installed yo is much shorter:


will-i-am:~ William$ npm install -g yo
npm WARN deprecated npmconf@2.1.2: this package has been reintegrated into npm and is now out of date with respect to npm
/usr/local/Cellar/nvm/0.30.1/versions/node/v5.5.0/bin/yo -> /usr/local/Cellar/nvm/0.30.1/versions/node/v5.5.0/lib/node_modules/yo/lib/cli.js

> yo@1.6.0 postinstall /usr/local/Cellar/nvm/0.30.1/versions/node/v5.5.0/lib/node_modules/yo
> yodoctor

Yeoman Doctor
Running sanity checks on your system

✔ Global configuration file is valid
✔ NODE_PATH matches the npm root
✔ Node.js version
✔ No .yo-rc.json file in home directory
✔ No .bowerrc file in home directory
✔ npm version

Everything looks all right!
/usr/local/Cellar/nvm/0.30.1/versions/node/v5.5.0/lib
└─┬ yo@1.6.0 
  ├── async@1.5.2 
  ├─┬ chalk@1.1.1 
  │ ├── ansi-styles@2.1.0 
  │ ├── escape-string-regexp@1.0.4 
  │ ├── has-ansi@2.0.0 
  │ ├── strip-ansi@3.0.0 
  │ └── supports-color@2.0.0 
  ├─┬ configstore@1.4.0 
  │ ├── graceful-fs@4.1.3 
  │ ├─┬ mkdirp@0.5.1 
  │ │ └── minimist@0.0.8 
  │ ├── object-assign@4.0.1 
  │ ├── os-tmpdir@1.0.1 
  │ ├── osenv@0.1.3 
  │ ├── uuid@2.0.1 
  │ ├─┬ write-file-atomic@1.1.4 
  │ │ ├── imurmurhash@0.1.4 
  │ │ └── slide@1.1.6 
  │ └── xdg-basedir@2.0.0 
  ├─┬ cross-spawn-async@2.1.8 
  │ ├─┬ lru-cache@4.0.0 
  │ │ ├── pseudomap@1.0.2 
  │ │ └── yallist@2.0.0 
  │ └─┬ which@1.2.4 
  │   ├─┬ is-absolute@0.1.7 
  │   │ └── is-relative@0.1.3 
  │   └── isexe@1.1.1 
  ├── figures@1.4.0 
  ├─┬ fullname@2.1.0 
  │ ├─┬ npmconf@2.1.2 
  │ │ ├─┬ config-chain@1.1.10 
  │ │ │ └── proto-list@1.2.4 
  │ │ ├── inherits@2.0.1 
  │ │ ├── ini@1.3.4 
  │ │ ├─┬ nopt@3.0.6 
  │ │ │ └── abbrev@1.0.7 
  │ │ ├─┬ once@1.3.3 
  │ │ │ └── wrappy@1.0.1 
  │ │ ├── semver@4.3.6 
  │ │ └── uid-number@0.0.5 
  │ ├── pify@2.3.0 
  │ └─┬ pinkie-promise@2.0.0 
  │   └── pinkie@2.0.4 
  ├─┬ got@5.4.1 
  │ ├─┬ create-error-class@2.0.1 
  │ │ └── capture-stack-trace@1.0.0 
  │ ├── duplexer2@0.1.4 
  │ ├── is-plain-obj@1.1.0 
  │ ├── is-redirect@1.0.0 
  │ ├── is-retry-allowed@1.0.0 
  │ ├── is-stream@1.0.1 
  │ ├── lowercase-keys@1.0.0 
  │ ├── node-status-codes@1.0.0 
  │ ├─┬ parse-json@2.2.0 
  │ │ └─┬ error-ex@1.3.0 
  │ │   └── is-arrayish@0.2.1 
  │ ├── read-all-stream@3.1.0 
  │ ├─┬ readable-stream@2.0.5 
  │ │ ├── core-util-is@1.0.2 
  │ │ ├── isarray@0.0.1 
  │ │ ├── process-nextick-args@1.0.6 
  │ │ ├── string_decoder@0.10.31 
  │ │ └── util-deprecate@1.0.2 
  │ ├── timed-out@2.0.0 
  │ ├── unzip-response@1.0.0 
  │ └─┬ url-parse-lax@1.0.0 
  │   └── prepend-http@1.0.3 
  ├─┬ humanize-string@1.0.1 
  │ └── decamelize@1.1.2 
  ├─┬ inquirer@0.11.4 
  │ ├── ansi-escapes@1.1.1 
  │ ├── ansi-regex@2.0.0 
  │ ├─┬ cli-cursor@1.0.2 
  │ │ └─┬ restore-cursor@1.0.1 
  │ │   └── exit-hook@1.1.1 
  │ ├── cli-width@1.1.1 
  │ ├─┬ readline2@1.0.1 
  │ │ ├── code-point-at@1.0.0 
  │ │ ├── is-fullwidth-code-point@1.0.0 
  │ │ └── mute-stream@0.0.5 
  │ ├── run-async@0.1.0 
  │ ├── rx-lite@3.1.2 
  │ ├── string-width@1.0.1 
  │ └── through@2.3.8 
  ├─┬ insight@0.7.0 
  │ ├── inquirer@0.10.1 
  │ ├─┬ lodash.debounce@3.1.1 
  │ │ └── lodash._getnative@3.9.1 
  │ ├─┬ os-name@1.0.3 
  │ │ ├─┬ osx-release@1.1.0 
  │ │ │ └── minimist@1.2.0 
  │ │ └─┬ win-release@1.1.1 
  │ │   └── semver@5.1.0 
  │ ├─┬ request@2.69.0 
  │ │ ├── aws-sign2@0.6.0 
  │ │ ├─┬ aws4@1.2.1 
  │ │ │ └── lru-cache@2.7.3 
  │ │ ├── bl@1.0.2 
  │ │ ├── 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-rc3 
  │ │ ├─┬ har-validator@2.0.6 
  │ │ │ ├─┬ commander@2.9.0 
  │ │ │ │ └── graceful-readlink@1.0.1 
  │ │ │ └─┬ is-my-json-valid@2.12.4 
  │ │ │   ├── generate-function@2.0.0 
  │ │ │   ├─┬ generate-object-property@1.2.0 
  │ │ │   │ └── is-property@1.0.2 
  │ │ │   └── jsonpointer@2.0.0 
  │ │ ├─┬ 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.2.2 
  │ │ │ │ ├── extsprintf@1.0.2 
  │ │ │ │ ├── json-schema@0.2.2 
  │ │ │ │ └── verror@1.3.6 
  │ │ │ └─┬ sshpk@1.7.3 
  │ │ │   ├── asn1@0.2.3 
  │ │ │   ├── dashdash@1.12.2 
  │ │ │   ├── ecc-jsbn@0.1.1 
  │ │ │   ├── jodid25519@1.0.2 
  │ │ │   ├── jsbn@0.1.0 
  │ │ │   └── tweetnacl@0.13.3 
  │ │ ├── is-typedarray@1.0.0 
  │ │ ├── isstream@0.1.2 
  │ │ ├── json-stringify-safe@5.0.1 
  │ │ ├─┬ mime-types@2.1.9 
  │ │ │ └── mime-db@1.21.0 
  │ │ ├── node-uuid@1.4.7 
  │ │ ├── oauth-sign@0.8.1 
  │ │ ├── qs@6.0.2 
  │ │ ├── stringstream@0.0.5 
  │ │ └── tunnel-agent@0.4.2 
  │ └── tough-cookie@2.2.1 
  ├── lodash@3.10.1 
  ├─┬ meow@3.7.0 
  │ ├─┬ camelcase-keys@2.0.0 
  │ │ └── camelcase@2.1.0 
  │ ├─┬ loud-rejection@1.2.1 
  │ │ ├── array-find-index@1.0.1 
  │ │ └── signal-exit@2.1.2 
  │ ├── map-obj@1.0.1 
  │ ├── minimist@1.2.0 
  │ ├─┬ normalize-package-data@2.3.5 
  │ │ ├── hosted-git-info@2.1.4 
  │ │ ├─┬ 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.0 
  │ │   └─┬ spdx-expression-parse@1.0.2 
  │ │     └── spdx-exceptions@1.0.4 
  │ ├─┬ redent@1.0.0 
  │ │ ├── indent-string@2.1.0 
  │ │ └── strip-indent@1.0.1 
  │ └── trim-newlines@1.0.0 
  ├─┬ npm-keyword@4.2.0 
  │ └── registry-url@3.0.3 
  ├── opn@3.0.3 
  ├─┬ package-json@2.3.0 
  │ ├─┬ rc@1.1.6 
  │ │ ├── deep-extend@0.4.1 
  │ │ ├── minimist@1.2.0 
  │ │ └── strip-json-comments@1.0.4 
  │ └── semver@5.1.0 
  ├─┬ read-pkg-up@1.0.1 
  │ ├─┬ find-up@1.1.0 
  │ │ └── path-exists@2.1.0 
  │ └─┬ read-pkg@1.1.0 
  │   ├─┬ load-json-file@1.1.0 
  │   │ └─┬ strip-bom@2.0.0 
  │   │   └── is-utf8@0.2.1 
  │   └── path-type@1.1.0 
  ├─┬ repeating@2.0.0 
  │ └─┬ is-finite@1.0.1 
  │   └── number-is-nan@1.0.0 
  ├─┬ root-check@1.0.0 
  │ ├─┬ downgrade-root@1.1.0 
  │ │ ├── default-uid@1.0.0 
  │ │ └── is-root@1.0.0 
  │ └─┬ sudo-block@1.2.0 
  │   └── is-docker@1.0.0 
  ├─┬ sort-on@1.2.2 
  │ ├── arrify@1.0.1 
  │ └── dot-prop@2.2.0 
  ├── string-length@1.0.1 
  ├── titleize@1.0.0 
  ├─┬ update-notifier@0.6.0 
  │ ├── is-npm@1.0.0 
  │ ├── latest-version@2.0.0 
  │ └─┬ semver-diff@2.1.0 
  │   └── semver@5.1.0 
  ├─┬ user-home@2.0.0 
  │ └── os-homedir@1.0.1 
  ├─┬ yeoman-character@1.1.0 
  │ └─┬ supports-color@3.1.2 
  │   └── has-flag@1.0.0 
  ├─┬ yeoman-doctor@2.1.0 
  │ ├─┬ bin-version-check@2.1.0 
  │ │ ├─┬ bin-version@1.0.4 
  │ │ │ └─┬ find-versions@1.2.1 
  │ │ │   └── semver-regex@1.0.0 
  │ │ ├── minimist@1.2.0 
  │ │ └─┬ semver-truncate@1.1.0 
  │ │   └── semver@5.1.0 
  │ ├─┬ each-async@1.1.1 
  │ │ ├── onetime@1.1.0 
  │ │ └── set-immediate-shim@1.0.1 
  │ ├── log-symbols@1.0.2 
  │ ├── object-values@1.0.0 
  │ ├── semver@5.1.0 
  │ └─┬ twig@0.8.7 
  │   ├─┬ minimatch@0.2.14 
  │   │ ├── lru-cache@2.7.3 
  │   │ └── sigmund@1.0.1 
  │   └─┬ walk@2.3.9 
  │     └── foreachasync@3.0.0 
  ├─┬ yeoman-environment@1.5.2 
  │ ├─┬ debug@2.2.0 
  │ │ └── ms@0.7.1 
  │ ├── diff@2.2.1 
  │ ├─┬ globby@4.0.0 
  │ │ ├─┬ array-union@1.0.1 
  │ │ │ └── array-uniq@1.0.2 
  │ │ └─┬ glob@6.0.4 
  │ │   ├── inflight@1.0.4 
  │ │   ├─┬ minimatch@3.0.0 
  │ │   │ └─┬ brace-expansion@1.1.2 
  │ │   │   ├── balanced-match@0.3.0 
  │ │   │   └── concat-map@0.0.1 
  │ │   └── path-is-absolute@1.0.0 
  │ ├── grouped-queue@0.3.2 
  │ ├─┬ mem-fs@1.1.2 
  │ │ ├─┬ through2@2.0.1 
  │ │ │ └── xtend@4.0.1 
  │ │ ├─┬ vinyl@1.1.1 
  │ │ │ ├── clone@1.0.2 
  │ │ │ ├── clone-stats@0.0.1 
  │ │ │ └── replace-ext@0.0.1 
  │ │ └─┬ vinyl-file@1.3.0 
  │ │   └─┬ strip-bom-stream@1.0.0 
  │ │     └── first-chunk-stream@1.0.0 
  │ ├── text-table@0.2.0 
  │ └── untildify@2.1.0 
  └─┬ yosay@1.1.0 
    ├── minimist@1.2.0 
    ├── pad-component@0.0.1 
    ├─┬ taketalk@1.0.0 
    │ ├── get-stdin@4.0.1 
    │ └── minimist@1.2.0 
    └── word-wrap@1.1.0 

will-i-am:~ William$ 

The second time I installed it:


will-i-am:~ William$ npm install yo
npm WARN deprecated npmconf@2.1.2: this package has been reintegrated into npm and is now out of date with respect to npm

> yo@1.6.0 postinstall /Users/William/node_modules/yo
> yodoctor

Yeoman Doctor
Running sanity checks on your system

✔ Global configuration file is valid
✔ NODE_PATH matches the npm root
✔ Node.js version
✔ No .bowerrc file in home directory
✔ No .yo-rc.json file in home directory
✔ npm version

Everything looks all right!
nvm@0.30.2 /Users/William
├── grunt@0.4.5  extraneous
├─┬ stellar-sdk@0.4.1
│ ├── lodash@3.10.1 
│ └─┬ stellar-base@0.5.1
│   └── lodash@3.10.1 
└── yo@1.6.0  extraneous

will-i-am:~ William$ 

End of Installation Commands

NVM Installation Commands

Here we list out the commands we will be using, in order.
We are using Homebrew, so we begin with ..

Open a new Terminal:

brew update
brew doctor

References:
nvm
npm
yo
go : we are using gulp not go
gb. : we are using gulp not gb
grunt : we are using gulp not grunt gulp : we are using gulp gulp faq
gulp js
urchin : testing yeoman : Bower

Choices, choices:
Grunt or Gulp Gulp vs Grunt. Why one? Why the Other?

Our decision is to use gulp with the generator-webapp.

Now, how to begin the Install process ?
Fortunately we have Homebrew installed.

brew install nvm


will-i-am:~ William$ brew install nvm
==> Downloading https://github.com/creationix/nvm/archive/v0.30.1.tar.gz
Already downloaded: /Library/Caches/Homebrew/nvm-0.30.1.tar.gz
==> Caveats
Please note that upstream has asked us to make explicit managing
nvm via Homebrew is unsupported by them and you should check any
problems against the standard nvm install method prior to reporting.

You should create NVM's working directory if it doesn't exist:

  mkdir ~/.nvm

Add the following to ~/.bash_profile or your desired shell
configuration file:

  export NVM_DIR=~/.nvm
  . $(brew --prefix nvm)/nvm.sh

You can set $NVM_DIR to any location, but leaving it unchanged from
/usr/local/Cellar/nvm/0.30.1 will destroy any nvm-installed Node installations
upon upgrade/reinstall.

Type `nvm help` for further information.

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
🍺  /usr/local/Cellar/nvm/0.30.1: 6 files, 82.6K, built in 1 second
will-i-am:~ William$ 

nvm is installed, and gives us instructions in the Terminal:

I check to see if the ~/.nvm exists, it does not.

ls -aux

Following instructions above I make the directory:

mkdir ~/.nvm

I open the ~/.profile file:

open -e ~/.profile

After running brew install nvm , Terminal tells you to install these two lines:

export NVM_DIR=~/.nvm
. $(brew --prefix nvm)/nvm.sh

Done, now how do I determine if our nvm installation working ?

nvm ls

Response:


             N/A
node -> stable (-> N/A) (default)
iojs -> N/A (default)

The above is showing N/A because we have not yet installed node, and
the fact that this is the response shows nvm is up and running.

Find what versions of Node.js are available:

nvm ls-remote

This produces a very long list of versions, ending this day with, v5.6.0

Install the latest version of Node.js, we will use v5.6.0:

We are installing Node.js:

brew install node


will-i-am:~ William$ brew install node
==> Downloading https://homebrew.bintray.com/bottles/node-5.6.0.el_capitan.bottle.tar.gz
Already downloaded: /Library/Caches/Homebrew/node-5.6.0.el_capitan.bottle.tar.gz
==> Pouring node-5.6.0.el_capitan.bottle.tar.gz
==> Caveats
Please note by default only English locale support is provided. If you need
full locale support you should:
  `brew reinstall node --with-full-icu`

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
🍺  /usr/local/Cellar/node/5.6.0: 3,726 files, 35.3M
will-i-am:~ William$ 

The results of our installation are showing with the info command:


will-i-am:~ William$ brew info node
node: stable 5.6.0 (bottled), HEAD
Platform built on the V8 JavaScript runtime to build network applications
https://nodejs.org/
/usr/local/Cellar/node/5.6.0 (3,726 files, 35.3M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/node.rb
==> Dependencies
Build: pkg-config ✔
Optional: openssl ✔
==> Options
--with-debug
  Build with debugger hooks
--with-full-icu
  Build with full-icu (all locales) instead of small-icu (English only)
--with-openssl
  Build with openssl support
--without-completion
  npm bash completion will not be installed
--without-npm
  npm will not be installed
--HEAD
  Install HEAD version
==> Caveats
Please note by default only English locale support is provided. If you need
full locale support you should:
  `brew reinstall node --with-full-icu`

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

will-i-am:~ William$ brew cask info node
node: 4.3.0
Node.js
https://nodejs.org/
Not installed
https://github.com/caskroom/homebrew-cask/blob/master/Casks/node.rb
==> Contents
  node-v4.3.0.pkg (pkg)
will-i-am:~ William$ 

I see the note 'Not installed' and so run:

brew cask install node

==> Downloading https://github.com/creationix/nvm/archive/v0.30.1.tar.gz Already downloaded: /Library/Caches/Homebrew/nvm-0.30.1.tar.gz ==> Caveats Please note that upstream has asked us to make explicit managing nvm via Homebrew is unsupported by them and you should check any problems against the standard nvm install method prior to reporting.

You should create NVM's working directory if it doesn't exist:

mkdir ~/.nvm

Add the following to ~/.bash_profile or your desired shell configuration file:

export NVM_DIR=~/.nvm . $(brew --prefix nvm)/nvm.sh

You can set $NVM_DIR to any location, but leaving it unchanged from /usr/local/Cellar/nvm/0.30.1 will destroy any nvm-installed Node installations upon upgrade/reinstall.

Type nvm help for further information.

Bash completion has been installed to: /usr/local/etc/bash_completion.d ==> Summary 🍺 /usr/local/Cellar/nvm/0.30.1: 6 files, 82.6K, built in 17 seconds will-i-am:.nvm William$

I check the ENV variables to see if NVM_DIR is installed.

env


will-i-am: William$ env
...
NVM_DIR=/Users/William/.nvm
...

I check to see if the ~/.nvm exists, it does not.

ls -aux

Following instructions above I make the directory:

will-i-am:~ William$ mkdir ~/.nvm

I open ~/.profile and install the 'source line':

open -e ~/.profile

Source line:

export NVM_DIR=~/.nvm
. $(brew --prefix nvm)/nvm.sh

Yes, that is a period on the second line.

Running Node.js, now we use it:

nvm use v5.6.0 after install.

Now that nvm is set up, we install Node.js:

brew install node

Is it installed ?

brew info node

Does Homebrew-Cask know about it ?

brew cask info node

Install the Cask named, node:

brew cask install node

Does Homebrew-Cask now know about it ?

brew cask info node

brew tap : list the taps

brew tap-info caskroom/cask : Display information about tap

Okay, we now have nvm and node installed.

I run nvm use 5.6.0 telling the system to now use this version:

nvm use 5.6.0

I now set this versions as default when opening a new shell:

nvm alias default node


will-i-am:~ William$ nvm --version
0.30.1

will-i-am:~ William$  nvm alias default node
default -> node (-> v5.6.0)
will-i-am:~ William$ 

Instructions are to bring npm up to the latest version:

npm install -g npm@latest

Which npm are we now using:

Per instructions from Terminal, we need to unset a prefix:

nvm use --delete-prefix v5.5.0
Now using node v5.6.0 (npm v3.7.2)

Notice npm is installed and showing its version.

which npm 5.6

We now use npm to install others ..

Run:

npm install -g yo


will-i-am:~ William$ npm install yo

. . truncated . .

✔ No .bowerrc file in home directory
✔ No .yo-rc.json file in home directory
✔ npm version

Everything looks all right!

From the above I note:
npm version
.yo-rc.json file in home directory
.bowerrc file in home directory
Bower Configuration

TODO: 20160213 : research those two files to see what is required, if anything.

Install gulp globally:

"If you have previously installed a version of gulp globally, please run npm rm --global gulp to make sure your old version doesn't
collide with gulp-cli.""

npm rm --global gulp

Is gulp gone ?

gulp --version

gulp-cli --version

Now we reinstall:

npm install --global gulp-cli

Is gulp installed ?

gulp --version

gulp-cli --version

If you chose to use and install Grunt:
Run:

npm install -g grunt

Note: In the below response, I had to add spaces here for the formatting
code to work: @ < 3

Questions about lodash ?

https://www.npmjs.com/package/lodash

Now Run:

npm install -g grunt-cli

Need a grunt reference: http://gruntjs.com/getting-started.

Note: In the below response, I had to add spaces here for the formatting
code to work: @ < 3


will-i-am:~ William$ npm install -g grunt-cli
npm WARN deprecated lodash@2.4.2: lodash@< 3 .0.0 is no longer maintained. Upgrade to lodash@^4.0.0.
/Users/William/.nvm/versions/node/v5.6.0/bin/grunt -> /Users/William/.nvm/versions/node/v5.6.0/lib/node_modules/grunt-cli/bin/grunt
/Users/William/.nvm/versions/node/v5.6.0/lib
└─┬ grunt-cli@0.1.13 
  ├─┬ findup-sync@0.1.3 
  │ ├─┬ glob@3.2.11 
  │ │ ├── inherits@2.0.1 
  │ │ └─┬ minimatch@0.3.0 
  │ │   ├── lru-cache@2.7.3 
  │ │   └── sigmund@1.0.1 
  │ └── lodash@2.4.2 
  ├─┬ nopt@1.0.10 
  │ └── abbrev@1.0.7 
  └── resolve@0.3.1 

will-i-am:~ William$ 

QUESTION: How do I prove grunt has been installed
Answer : grunt --version


will-i-am:~ William$ grunt --version
grunt-cli v0.1.13
grunt v0.4.5
will-i-am:~ William$ 

QUESTION: How do I uninstall grunt
Run:

npm uninstall -g grunt-cli

npm uninstall grunt

Okay, let us do a brew cleanup:

brew cleanup

In the results, I notice this Warning line:


will-i-am:~ William$ brew cleanup
Removing: /usr/local/Cellar/automake/1.14... (127 files, 2.5M)
Removing: /usr/local/Cellar/automake/1.14.1... (127 files, 2.5M)
Removing: /usr/local/Cellar/bash/4.2.45... (41 files, 4M)
 . . truncated . . 
**Warning: Skipping postgresql: most recent version 9.5.1 not installed**
 . . truncated . .
Removing: /Library/Caches/Homebrew/openssl-1.0.2e_1.el_capitan.bottle.tar.gz... (3.6M)
Removing: /Library/Caches/Homebrew/postgresql-9.5.0.el_capitan.bottle.1.tar.gz... (9.9M)
Removing: /Users/William/Library/Logs/Homebrew/ack... (77B)
Removing: /Users/William/Library/Logs/Homebrew/postgresql... (1.6K)
==> This operation has freed approximately 1.3G of disk space.
will-i-am:~ William$

So, I upgrade postgres. First, is the Postgres server running ?
If it is, shut it down, we use:

pg_ctl -D /usr/local/var/postgres stop -s -m fast


will-i-am:~ William$ brew upgrade postgres
==> Upgrading 1 outdated package, with result:
postgresql 9.5.1
==> Upgrading postgresql
==> Downloading https://homebrew.bintray.com/bottles/postgresql-9.5.1.el_capitan.bottle.tar.gz
######################################################################## 100.0%
==> Pouring postgresql-9.5.1.el_capitan.bottle.tar.gz
==> Caveats
If builds of PostgreSQL 9 are failing and you have version 8.x installed,
you may need to remove the previous version first. See:
  https://github.com/Homebrew/homebrew/issues/2510

To migrate existing data from a previous major version (pre-9.0) of PostgreSQL, see:
  http://www.postgresql.org/docs/9.5/static/upgrading.html

To migrate existing data from a previous minor version (9.0-9.4) of PosgresSQL, see:
  http://www.postgresql.org/docs/9.5/static/pgupgrade.html

  You will need your previous PostgreSQL installation from brew to perform `pg_upgrade`.
  Do not run `brew cleanup postgresql` until you have performed the migration.

To reload postgresql after an upgrade:
  launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
  launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Or, if you don't want/need launchctl, you can just run:
  (Start:) postgres -D /usr/local/var/postgres
  (Open a new Terminal, issue next command, and watch it shut down in first Terminal.)
  (Stop :) pg_ctl -D /usr/local/var/postgres stop -s -m fast
==> Summary
🍺  /usr/local/Cellar/postgresql/9.5.1: 3,118 files, 35M
will-i-am:~ William$ 

TODO: Answer these
QUESTION : 20160213 : What does "if you don't want/need launchctl" mean, exactly ?
Answer : 2016021? : launchctl is ..
The reason you would need it is ..
The reason you would want it is ..

Now I run:

brew update

and then:

brew cleanup

where we will see postgres 9.5.0 is cleaned out.


will-i-am:~ William$ brew cleanup
Removing: /usr/local/Cellar/postgresql/9.5.0... (3,113 files, 35.0M)
==> This operation has freed approximately 35.0M of disk space.
will-i-am:~ William$ 

Now we install Bower:

npm install -g bower


will-i-am:~ William$ npm install -g bower
/Users/William/.nvm/versions/node/v5.6.0/bin/bower -> /Users/William/.nvm/versions/node/v5.6.0/lib/node_modules/bower/bin/bower
/Users/William/.nvm/versions/node/v5.6.0/lib
└── bower@1.7.7 

We can see bower@1.7.7 is now installed

Sidetracked: I ran the command, `npm search bower' and in the results,
I came across observatory . .
let's install it and see how it looks, with these two:

npm install observatory

npm home observatory


will-i-am:~ William$ npm install observatory

> yo@1.6.0 postinstall /Users/William/node_modules/yo
> yodoctor

Yeoman Doctor
Running sanity checks on your system

✔ Global configuration file is valid
✔ NODE_PATH matches the npm root
✔ Node.js version
✔ No .bowerrc file in home directory
✔ No .yo-rc.json file in home directory
✔ npm version

Everything looks all right!
nvm@0.30.2 /Users/William
├── bower@1.7.7  extraneous
├── grunt@0.4.5  extraneous
├── observatory@1.0.0  extraneous
├─┬ stellar-sdk@0.4.1 (your response will not show this)
│ ├── lodash@3.10.1 
│ └─┬ stellar-base@0.5.1 (nor this)
│   └── lodash@3.10.1 
└── yo@1.6.0  extraneous

will-i-am:~ William$ 

I take a look:

npm home observatory

Okay, not something I need right now.

npm uninstall observatory

Easy peasy lemon squeezey.

Question: 20160213 : To make sure we are using the latest lodash:
Answer : 20160214 : Run npm i --save lodash

npm i --save lodash


will-i-am:~ William$ npm i --save lodash
nvm@0.30.2 /Users/William
├── lodash@4.3.0 
└─┬ stellar-sdk@0.4.1
  ├── lodash@3.10.1 
  └─┬ stellar-base@0.5.1
    └── lodash@3.10.1 

The following section contains the installation commands and their results.

To find the definition, use, and the results of the use of any command,
search the full command on this page to see each.

End of Installation Commands with Results

To see these commands without explanation, see : Installation Instructions

##### [Your First Yeoman Program](#firstyeomanprogram) TODO: 20160224 : this shoud be a link ^^^^^^^^^^^^^

Your First Gulp Program

Now we can install gulp

TODO: I notice something, the -g switch, what is this doing, and ..
QUESTION: Are all npm install commands followed by the -g switch ?
Answer : The -g switch is part of the command, explained by npmjs docs:
"The -g or --global argument will cause npm to install the package globally
rather than locally. See npm-folders."
Also from that reference, this quote:
"Global install (with -g): puts stuff in /usr/local or wherever node is installed."
These two commands are the same to install gulp globally:

npm install -g gulp-cli

The commands above and below are from the gulp Getting Started docs.

Here, the --save-dev switch installs gulp in your project devDependencies:

npm install --save-dev gulp

"Create a gulpfile.js at the root of your project:", enter these lines:

var gulp = require('gulp');

gulp.task('default', function() {
// place code for your default task here
});

Run gulp:

gulp

The default task will run and do nothing.

To run individual tasks, use gulp <task> <othertask>.


will-i-am:yo-stellar William$ touch gulp.js

will-i-am:yo-stellar William$ open -e gulp.js

will-i-am:yo-stellar William$ gulp
[10:58:02] Requiring external module babel-register
[10:58:02] Using gulpfile ~/yo-stellar/gulpfile.babel.js
[10:58:02] Starting 'clean'...
[10:58:02] Finished 'clean' after 9.22 ms
[10:58:02] Starting 'default'...
[10:58:02] Starting 'lint'...
[10:58:06] Starting 'styles'...
[10:58:07] Starting 'scripts'...
[10:58:07] Starting 'images'...
[10:58:10] Starting 'fonts'...
[10:58:10] Starting 'extras'...
[10:58:10] Finished 'default' after 8.07 s
[10:58:10] Finished 'images' after 3.55 s
[10:58:10] Finished 'fonts' after 22 ms
[10:58:10] Finished 'lint' after 8.17 s
[10:58:10] Finished 'styles' after 4.15 s
[10:58:10] Finished 'scripts' after 3.75 s
[10:58:10] Starting 'html'...
[10:58:14] Finished 'extras' after 3.99 s
[10:58:14] Finished 'html' after 3.79 s
[10:58:14] Starting 'build'...
[10:58:15] build all files 9.2 kB (gzipped)
[10:58:15] Finished 'build' after 254 ms
will-i-am:yo-stellar William$ 

Where do I go now?

You have an empty gulpfile and everything is installed.
How do you REALLY get started? Check out the recipes and
the list of articles for more information.

.src, .watch, .dest, CLI args - How do I use these things?

For API specific documentation you can check out the documentation for that.

Now we will add the 'coup de grace' with the yeoman/generator-webapp.

Renamed from generator-gulp-webapp to generator-webapp on 20160215.

Specifically from the Getting Started file:

If you haven't already, install yo and this generator by running:

$ npm install --global yo generator-webapp

Now you can scaffold your very own web app:

$ mkdir my-webapp
$ cd my-webapp
$ yo gulp-webapp : 20160215 : Yo changed this to yo webapp

TODO: MISMATCH : command first shown in the 183 line also shows creating the gulp.js file.
THIS SAME ERROR EXISTS AT LINE 325 : 20160217
Answer: the below info to make a directory, etc., comes from the
yeoman/generator-webapp README.md file.

ALSO: on 20160215, the name of the generator was changed
from generator-gulp-webapp
to generator webapp.
TODO: 20160217 : change all of the from commands to the to command.

Are we ready ? Run:

npm ls -g generator-webapp

To start developing, run:

$ gulp serve

This will fire up a local web server, open http://localhost:9000 in your default
browser and watch files for changes, reloading the browser automatically via LiveReload.

To run the tests in the browser, run:

$ gulp serve:test

You will need to study the yeoman/generator-webappreference before we do the actual install,
and then again before you go into production, for more commands to do so.
For example:

Tasks

To get the list of available tasks, run:

$ gulp --tasks

gulp --tasks : is not the same command as below

gulp tasks : see results below


Last login: Thu Feb 18 09:34:03 on ttys007
will-i-am:~ William$ cd yo-stellar/
will-i-am:yo-stellar William$ gulp tasks
[10:13:07] Requiring external module babel-register
[10:13:10] Using gulpfile ~/yo-stellar/gulpfile.babel.js
[10:13:10] Task 'tasks' is not in your gulpfile
[10:13:10] Please check the documentation for proper gulpfile formatting
will-i-am:yo-stellar William$ 

gulp --tasks : results below


will-i-am:yo-stellar William$ gulp --tasks
[10:37:42] Requiring external module babel-register
[10:37:43] Tasks for ~/yo-stellar/gulpfile.babel.js
[10:37:43] ├─┬ build
[10:37:43] │ ├── lint
[10:37:43] │ ├─┬ html
[10:37:43] │ │ ├── styles
[10:37:43] │ │ └── scripts
[10:37:43] │ ├── images
[10:37:43] │ ├── fonts
[10:37:43] │ └── extras
[10:37:43] ├── clean
[10:37:43] ├─┬ default
[10:37:43] │ └── clean
[10:37:43] ├── extras
[10:37:43] ├── fonts
[10:37:43] ├─┬ html
[10:37:43] │ ├── styles
[10:37:43] │ └── scripts
[10:37:43] ├── images
[10:37:43] ├── lint
[10:37:43] ├── lint:test
[10:37:43] ├── scripts
[10:37:43] ├─┬ serve
[10:37:43] │ ├── styles
[10:37:43] │ ├── scripts
[10:37:43] │ └── fonts
[10:37:43] ├── serve:dist
[10:37:43] ├─┬ serve:test
[10:37:43] │ └── scripts
[10:37:43] ├── styles
[10:37:43] └── wiredep
will-i-am:yo-stellar William$ 

The yeoman/generator-webapp generator uses Bower and keeps
bower_components in the project root. The link explains why.

There is a bit more to know, so make sure you read the
yeoman/generator-webapp Getting Started file.

For example:

While gulp serve is running, installing Bower components will usually be as easy as:

$ bower install --save jquery
The above is not working, search the command to find other notes.

End of Gulp Instructions

Remember this command ?

brew cask alfred


Last login: Thu Feb 18 12:31:03 on ttys009
will-i-am:~ William$ brew search alfred
Caskroom/cask/alfred

will-i-am:~ William$ brew cask search alfred
==> Exact match
alfred

will-i-am:~ William$ brew cask install alfred
==> Downloading https://cachefly.alfredapp.com/Alfred_2.8.2_432.zip
######################################################################## 100.0%
==> Verifying checksum for Cask alfred
==> Symlinking App 'Alfred 2.app' to '/Users/William/Applications/Alfred 2.app'
==> Enabling accessibility access
Password:
🍺  alfred staged at '/opt/homebrew-cask/Caskroom/alfred/2.8.2_432' (285 files, 9.3M)
will-i-am:~ William$ 

Alfred is installed. Let's look at the Alfred info:

brew cask info alfred


will-i-am:~ William$ brew cask info alfred
alfred: 2.8.2_432
Alfred
https://www.alfredapp.com/
/opt/homebrew-cask/Caskroom/alfred/2.8.2_432 (285 files, 9.3M)
https://github.com/caskroom/homebrew-cask/blob/master/Casks/alfred.rb
==> Contents
  Alfred 2.app (app)
will-i-am:~ William$ 

This shows how we first start it ..

$ open "/opt/homebrew-cask/Caskroom/alfred/2.8.2_432/Alfred 2.app"

.. and now it is installed and will be there all the time. Where ? You ask ?
Look for the little Alfred Hat at the top of your screen, up there with the time.
You can also open it with the Alt/Option key and space bar held down at same time.

Install Grunt

We have already installed grunt and we chose to use gulp.
However other packages use grunt, so we shall leave it installed

Run:
npm install -g grunt-cli

TODO: RERUN THIS COMMAND and replace results below, now that we are reconfigured.


will-i-am:~ William$ npm install -g grunt-cli
npm WARN deprecated lodash@2.4.2: lodash@< 3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0
/usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/bin/grunt -> /usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/lib/node_modules/grunt-cli/bin/grunt
/usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/lib
└─┬ grunt-cli@0.1.13 
  ├─┬ findup-sync@0.1.3 
  │ ├─┬ glob@3.2.11 
  │ │ ├── inherits@2.0.1 
  │ │ └─┬ minimatch@0.3.0 
  │ │   ├── lru-cache@2.7.3 
  │ │   └── sigmund@1.0.1 
  │ └── lodash@2.4.2 
  ├─┬ nopt@1.0.10 
  │ └── abbrev@1.0.7 
  └── resolve@0.3.1 

will-i-am:~ William$ 

NOTE: 'npm WARN deprecated lodash@2.4.2: lodash@ < 3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0'

Source Reference : lodash/lodash repository

Run:
{sudo -H} npm i -g npm
Source Reference: https://lodash.com/


will-i-am:/ William$ sudo -H npm i -g npm
Password:
/usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/bin/npm -> /usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/lib/node_modules/npm/bin/npm-cli.js
/usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/lib
└── npm@3.7.1 

will-i-am:/ William$ 

Run:

npm i --save lodash


will-i-am:~ William$ npm i --save lodash
nvm@0.30.2 /Users/William
├── lodash@4.3.0 
└─┬ stellar-sdk@0.4.1
  ├── lodash@3.10.1 
  └─┬ stellar-base@0.5.1
    └── lodash@3.10.1 

will-i-am:~ William$ 

Run:

npm install -g grunt-cli

same as ..

npm install --global grunt-cli


will-i-am:/ William$ npm install -g grunt-cli
npm WARN deprecated lodash@2.4.2: lodash@ < 3 .0.0 is no longer maintained. Upgrade to lodash@^4.0.0
/usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/bin/grunt -> /usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/lib/node_modules/grunt-cli/bin/grunt
/usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/lib
└── grunt-cli@0.1.13 

Our lodash has been updated, we are fine.

Proof of install ?
I found the version command by first using:

npm --help

npm version


will-i-am:~ William$ npm version
{ nvm: '0.30.2',
  npm: '3.7.2',
  ares: '1.10.1-DEV',
  http_parser: '2.6.1',
  icu: '56.1',
  modules: '47',
  node: '5.6.0',
  openssl: '1.0.2f',
  uv: '1.8.0',
  v8: '4.6.85.31',
  zlib: '1.2.8' }
will-i-am:~ William$ 

An npm nuance:
Run npm --help and notice there is a correct, and an incorrect spelling
of version, also showing as verison.

Now we install bower:

npm install -g bower


will-i-am:/ William$ npm install -g bower
/usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/bin/bower -> /usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/lib/node_modules/bower/bin/bower
/usr/local/Cellar/nvm/HEAD/versions/node/v5.5.0/lib
└── bower@1.7.7 

will-i-am:/ William$ 

Building a Project

We now have everything installed so we can get to work.
The next command will be:
npm install -g generator-webapp

We just used the Node Package Manager to install a package of code called
the generator-webapp.

I have installed and uninstalled many a time so, this is the first time running it.


will-i-am:~ William$ npm install -g generator-webapp
npm WARN deprecated lodash@2.4.2: lodash@ < 3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0.

> spawn-sync@1.0.15 postinstall /Users/William/.nvm/versions/node/v5.6.0/lib/node_modules/generator-webapp/node_modules/spawn-sync
> node postinstall

/Users/William/.nvm/versions/node/v5.6.0/lib
└─┬ generator-webapp@1.1.2 
  ├─┬ chalk@1.1.1 
  │ ├── ansi-styles@2.1.0 
  │ ├── escape-string-regexp@1.0.4 
  │ ├── has-ansi@2.0.0 
  │ ├── strip-ansi@3.0.0 
  │ └── supports-color@2.0.0 
  ├── generator-jasmine@0.2.2 
  ├─┬ generator-mocha@0.2.0 
  │ └─┬ yeoman-generator@0.19.2 
  │   ├── async@0.9.2 
  │   ├─┬ cross-spawn@0.2.9 
  │   │ └── lru-cache@2.7.3 
  │   ├── diff@1.4.0 
  │   ├─┬ github-username@1.1.1 
  │   │ ├── get-stdin@1.0.0 
  │   │ └─┬ got@2.9.2 
  │   │   ├── infinity-agent@2.0.3 
  │   │   ├── nested-error-stacks@1.0.2 
  │   │   ├── prepend-http@1.0.3 
  │   │   ├── read-all-stream@2.2.0 
  │   │   └── statuses@1.2.1 
  │   ├─┬ mem-fs-editor@1.2.3 
  │   │ └─┬ vinyl@0.4.6 
  │   │   └── clone@0.2.0 
  │   ├─┬ pretty-bytes@1.0.4 
  │   │ └── get-stdin@4.0.1 
  │   ├── shelljs@0.4.0 
  │   ├─┬ through2@0.6.5 
  │   │ └── readable-stream@1.0.33 
  │   ├── user-home@1.1.1 
  │   ├── xdg-basedir@1.0.1 
  │   └─┬ yeoman-assert@1.0.0 
  │     ├─┬ chalk@0.5.1 
  │     │ ├── ansi-styles@1.1.0 
  │     │ ├─┬ has-ansi@0.1.0 
  │     │ │ └── ansi-regex@0.2.1 
  │     │ ├── strip-ansi@0.3.0 
  │     │ └── supports-color@0.2.0 
  │     └── lodash@2.4.2 
  ├─┬ mkdirp@0.5.1 
  │ └── minimist@0.0.8 
  ├── underscore.string@3.2.3 
  ├─┬ wiredep@2.2.2 
  │ ├─┬ bower-config@0.5.2 
  │ │ ├── graceful-fs@2.0.3 
  │ │ ├── mout@0.9.1 
  │ │ ├─┬ optimist@0.6.1 
  │ │ │ ├── minimist@0.0.10 
  │ │ │ └── wordwrap@0.0.3 
  │ │ └── osenv@0.0.3 
  │ ├─┬ chalk@0.5.1 
  │ │ ├── ansi-styles@1.1.0 
  │ │ ├─┬ has-ansi@0.1.0 
  │ │ │ └── ansi-regex@0.2.1 
  │ │ ├── strip-ansi@0.3.0 
  │ │ └── supports-color@0.2.0 
  │ ├─┬ glob@4.5.3 
  │ │ ├─┬ inflight@1.0.4 
  │ │ │ └── wrappy@1.0.1 
  │ │ ├── inherits@2.0.1 
  │ │ ├─┬ minimatch@2.0.10 
  │ │ │ └─┬ brace-expansion@1.1.3 
  │ │ │   ├── balanced-match@0.3.0 
  │ │ │   └── concat-map@0.0.1 
  │ │ └── once@1.3.3 
  │ ├── lodash@2.4.2 
  │ ├── minimist@1.2.0 
  │ ├── propprop@0.3.0 
  │ └─┬ through2@0.6.5 
  │   ├─┬ readable-stream@1.0.33 
  │   │ ├── core-util-is@1.0.2 
  │   │ ├── isarray@0.0.1 
  │   │ └── string_decoder@0.10.31 
  │   └── xtend@4.0.1 
  ├─┬ yeoman-generator@0.20.3 
  │ ├── async@1.5.2 
  │ ├─┬ class-extend@0.1.2 
  │ │ └── object-assign@2.1.1 
  │ ├─┬ cli-table@0.3.1 
  │ │ └── colors@1.0.3 
  │ ├─┬ cross-spawn@2.1.5 
  │ │ ├─┬ cross-spawn-async@2.1.8 
  │ │ │ ├─┬ lru-cache@4.0.0 
  │ │ │ │ ├── pseudomap@1.0.2 
  │ │ │ │ └── yallist@2.0.0 
  │ │ │ └─┬ which@1.2.4 
  │ │ │   ├─┬ is-absolute@0.1.7 
  │ │ │   │ └── is-relative@0.1.3 
  │ │ │   └── isexe@1.1.2 
  │ │ └─┬ spawn-sync@1.0.15 
  │ │   └── os-shim@0.1.3 
  │ ├─┬ dargs@4.1.0 
  │ │ └── number-is-nan@1.0.0 
  │ ├─┬ dateformat@1.0.12 
  │ │ ├── get-stdin@4.0.1 
  │ │ └─┬ meow@3.7.0 
  │ │   ├─┬ camelcase-keys@2.0.0 
  │ │   │ └── camelcase@2.1.0 
  │ │   ├── decamelize@1.1.2 
  │ │   ├─┬ loud-rejection@1.2.1 
  │ │   │ ├── array-find-index@1.0.1 
  │ │   │ └── signal-exit@2.1.2 
  │ │   ├── map-obj@1.0.1 
  │ │   ├─┬ normalize-package-data@2.3.5 
  │ │   │ ├── hosted-git-info@2.1.4 
  │ │   │ ├─┬ is-builtin-module@1.0.0 
  │ │   │ │ └── builtin-modules@1.1.1 
  │ │   │ ├── semver@5.1.0 
  │ │   │ └─┬ validate-npm-package-license@3.0.1 
  │ │   │   ├─┬ spdx-correct@1.0.2 
  │ │   │   │ └── spdx-license-ids@1.2.0 
  │ │   │   └─┬ spdx-expression-parse@1.0.2 
  │ │   │     └── spdx-exceptions@1.0.4 
  │ │   ├── object-assign@4.0.1 
  │ │   ├─┬ read-pkg-up@1.0.1 
  │ │   │ ├─┬ find-up@1.1.0 
  │ │   │ │ └── path-exists@2.1.0 
  │ │   │ └─┬ read-pkg@1.1.0 
  │ │   │   ├── load-json-file@1.1.0 
  │ │   │   └── path-type@1.1.0 
  │ │   ├─┬ redent@1.0.0 
  │ │   │ ├── indent-string@2.1.0 
  │ │   │ └── strip-indent@1.0.1 
  │ │   └── trim-newlines@1.0.0 
  │ ├─┬ debug@2.2.0 
  │ │ └── ms@0.7.1 
  │ ├── detect-conflict@1.0.0 
  │ ├── diff@2.2.1 
  │ ├─┬ download@4.4.3 
  │ │ ├─┬ caw@1.2.0 
  │ │ │ ├─┬ get-proxy@1.0.1 
  │ │ │ │ └─┬ rc@0.5.5 
  │ │ │ │   ├── deep-extend@0.2.11 
  │ │ │ │   ├── ini@1.3.4 
  │ │ │ │   ├── minimist@0.0.10 
  │ │ │ │   └── strip-json-comments@0.1.3 
  │ │ │ ├── is-obj@1.0.0 
  │ │ │ ├── object-assign@3.0.0 
  │ │ │ └── tunnel-agent@0.4.2 
  │ │ ├─┬ concat-stream@1.5.1 
  │ │ │ └── typedarray@0.0.6 
  │ │ ├─┬ each-async@1.1.1 
  │ │ │ ├── onetime@1.1.0 
  │ │ │ └── set-immediate-shim@1.0.1 
  │ │ ├─┬ filenamify@1.2.0 
  │ │ │ ├── filename-reserved-regex@1.0.0 
  │ │ │ ├── strip-outer@1.0.0 
  │ │ │ └── trim-repeated@1.0.0 
  │ │ ├─┬ got@5.4.1 
  │ │ │ ├─┬ create-error-class@2.0.1 
  │ │ │ │ └── capture-stack-trace@1.0.0 
  │ │ │ ├── duplexer2@0.1.4 
  │ │ │ ├── is-plain-obj@1.1.0 
  │ │ │ ├── is-redirect@1.0.0 
  │ │ │ ├── is-retry-allowed@1.0.0 
  │ │ │ ├── is-stream@1.0.1 
  │ │ │ ├── lowercase-keys@1.0.0 
  │ │ │ ├── node-status-codes@1.0.0 
  │ │ │ ├── object-assign@4.0.1 
  │ │ │ ├─┬ parse-json@2.2.0 
  │ │ │ │ └─┬ error-ex@1.3.0 
  │ │ │ │   └── is-arrayish@0.2.1 
  │ │ │ ├─┬ pinkie-promise@2.0.0 
  │ │ │ │ └── pinkie@2.0.4 
  │ │ │ ├── timed-out@2.0.0 
  │ │ │ ├── unzip-response@1.0.0 
  │ │ │ └── url-parse-lax@1.0.0 
  │ │ ├─┬ gulp-decompress@1.2.0 
  │ │ │ ├─┬ archive-type@3.2.0 
  │ │ │ │ └── file-type@3.7.0 
  │ │ │ ├─┬ decompress@3.0.0 
  │ │ │ │ ├─┬ buffer-to-vinyl@1.1.0 
  │ │ │ │ │ └── uuid@2.0.1 
  │ │ │ │ ├─┬ decompress-tar@3.1.0 
  │ │ │ │ │ ├── is-tar@1.0.0 
  │ │ │ │ │ ├─┬ strip-dirs@1.1.1 
  │ │ │ │ │ │ ├── is-natural-number@2.0.0 
  │ │ │ │ │ │ └── sum-up@1.0.2 
  │ │ │ │ │ ├─┬ tar-stream@1.3.1 
  │ │ │ │ │ │ ├── bl@1.1.2 
  │ │ │ │ │ │ └── end-of-stream@1.1.0 
  │ │ │ │ │ ├─┬ through2@0.6.5 
  │ │ │ │ │ │ └── readable-stream@1.0.33 
  │ │ │ │ │ └─┬ vinyl@0.4.6 
  │ │ │ │ │   └── clone@0.2.0 
  │ │ │ │ ├─┬ decompress-tarbz2@3.1.0 
  │ │ │ │ │ ├── is-bzip2@1.0.0 
  │ │ │ │ │ ├─┬ seek-bzip@1.0.5 
  │ │ │ │ │ │ └─┬ commander@2.8.1 
  │ │ │ │ │ │   └── graceful-readlink@1.0.1 
  │ │ │ │ │ ├─┬ through2@0.6.5 
  │ │ │ │ │ │ └── readable-stream@1.0.33 
  │ │ │ │ │ └─┬ vinyl@0.4.6 
  │ │ │ │ │   └── clone@0.2.0 
  │ │ │ │ ├─┬ decompress-targz@3.1.0 
  │ │ │ │ │ ├── is-gzip@1.0.0 
  │ │ │ │ │ ├─┬ through2@0.6.5 
  │ │ │ │ │ │ └── readable-stream@1.0.33 
  │ │ │ │ │ └─┬ vinyl@0.4.6 
  │ │ │ │ │   └── clone@0.2.0 
  │ │ │ │ ├─┬ decompress-unzip@3.4.0 
  │ │ │ │ │ ├── is-zip@1.0.0 
  │ │ │ │ │ ├── stat-mode@0.2.1 
  │ │ │ │ │ └─┬ yauzl@2.4.1 
  │ │ │ │ │   └─┬ fd-slicer@1.0.1 
  │ │ │ │ │     └── pend@1.2.0 
  │ │ │ │ └─┬ vinyl-assign@1.2.1 
  │ │ │ │   └── object-assign@4.0.1 
  │ │ │ └─┬ gulp-util@3.0.7 
  │ │ │   ├── array-uniq@1.0.2 
  │ │ │   ├── beeper@1.1.0 
  │ │ │   ├─┬ fancy-log@1.2.0 
  │ │ │   │ └── time-stamp@1.0.0 
  │ │ │   ├─┬ gulplog@1.0.0 
  │ │ │   │ └── glogg@1.0.0 
  │ │ │   ├─┬ has-gulplog@0.1.0 
  │ │ │   │ └── sparkles@1.0.0 
  │ │ │   ├── lodash._reescape@3.0.0 
  │ │ │   ├── lodash._reevaluate@3.0.0 
  │ │ │   ├── lodash._reinterpolate@3.0.0 
  │ │ │   ├─┬ lodash.template@3.6.2 
  │ │ │   │ ├── lodash._basecopy@3.0.1 
  │ │ │   │ ├── lodash._basetostring@3.0.1 
  │ │ │   │ ├── lodash._basevalues@3.0.0 
  │ │ │   │ ├── lodash._isiterateecall@3.0.9 
  │ │ │   │ ├─┬ lodash.escape@3.2.0 
  │ │ │   │ │ └── lodash._root@3.0.0 
  │ │ │   │ ├─┬ lodash.keys@3.1.2 
  │ │ │   │ │ ├── lodash._getnative@3.9.1 
  │ │ │   │ │ ├── lodash.isarguments@3.0.6 
  │ │ │   │ │ └── lodash.isarray@3.0.4 
  │ │ │   │ ├── lodash.restparam@3.6.1 
  │ │ │   │ └── lodash.templatesettings@3.1.1 
  │ │ │   ├─┬ multipipe@0.1.2 
  │ │ │   │ └─┬ duplexer2@0.0.2 
  │ │ │   │   └── readable-stream@1.1.13 
  │ │ │   ├── object-assign@3.0.0 
  │ │ │   └── vinyl@0.5.3 
  │ │ ├── gulp-rename@1.2.2 
  │ │ ├── is-url@1.2.1 
  │ │ ├── object-assign@4.0.1 
  │ │ ├── read-all-stream@3.1.0 
  │ │ ├─┬ readable-stream@2.0.5 
  │ │ │ ├── process-nextick-args@1.0.6 
  │ │ │ └── util-deprecate@1.0.2 
  │ │ ├── stream-combiner2@1.1.1 
  │ │ ├─┬ vinyl@1.1.1 
  │ │ │ ├── clone@1.0.2 
  │ │ │ ├── clone-stats@0.0.1 
  │ │ │ └── replace-ext@0.0.1 
  │ │ ├─┬ vinyl-fs@2.3.1 
  │ │ │ ├─┬ duplexify@3.4.2 
  │ │ │ │ └── end-of-stream@1.0.0 
  │ │ │ ├─┬ glob-stream@5.3.1 
  │ │ │ │ ├── extend@3.0.0 
  │ │ │ │ ├─┬ glob-parent@2.0.0 
  │ │ │ │ │ └── is-glob@2.0.1 
  │ │ │ │ ├─┬ micromatch@2.3.7 
  │ │ │ │ │ ├─┬ arr-diff@2.0.0 
  │ │ │ │ │ │ └── arr-flatten@1.0.1 
  │ │ │ │ │ ├── array-unique@0.2.1 
  │ │ │ │ │ ├─┬ braces@1.8.3 
  │ │ │ │ │ │ ├─┬ expand-range@1.8.1 
  │ │ │ │ │ │ │ └─┬ fill-range@2.2.3 
  │ │ │ │ │ │ │   ├── is-number@2.1.0 
  │ │ │ │ │ │ │   ├── isobject@2.0.0 
  │ │ │ │ │ │ │   ├── randomatic@1.1.5 
  │ │ │ │ │ │ │   └── repeat-string@1.5.2 
  │ │ │ │ │ │ ├── preserve@0.2.0 
  │ │ │ │ │ │ └── repeat-element@1.1.2 
  │ │ │ │ │ ├── expand-brackets@0.1.4 
  │ │ │ │ │ ├── extglob@0.3.2 
  │ │ │ │ │ ├── filename-regex@2.0.0 
  │ │ │ │ │ ├── is-extglob@1.0.0 
  │ │ │ │ │ ├─┬ kind-of@3.0.2 
  │ │ │ │ │ │ └── is-buffer@1.1.2 
  │ │ │ │ │ ├── normalize-path@2.0.1 
  │ │ │ │ │ ├─┬ object.omit@2.0.0 
  │ │ │ │ │ │ ├─┬ for-own@0.1.3 
  │ │ │ │ │ │ │ └── for-in@0.1.4 
  │ │ │ │ │ │ └── is-extendable@0.1.1 
  │ │ │ │ │ ├─┬ parse-glob@3.0.4 
  │ │ │ │ │ │ ├── glob-base@0.3.0 
  │ │ │ │ │ │ └── is-dotfile@1.0.2 
  │ │ │ │ │ └─┬ regex-cache@0.4.2 
  │ │ │ │ │   ├── is-equal-shallow@0.1.3 
  │ │ │ │ │   └── is-primitive@2.0.0 
  │ │ │ │ ├── ordered-read-streams@0.3.0 
  │ │ │ │ ├─┬ through2@0.6.5 
  │ │ │ │ │ └── readable-stream@1.0.33 
  │ │ │ │ ├─┬ to-absolute-glob@0.1.1 
  │ │ │ │ │ └── extend-shallow@2.0.1 
  │ │ │ │ └── unique-stream@2.2.0 
  │ │ │ ├── graceful-fs@4.1.3 
  │ │ │ ├─┬ gulp-sourcemaps@1.6.0 
  │ │ │ │ └── convert-source-map@1.1.3 
  │ │ │ ├── is-valid-glob@0.3.0 
  │ │ │ ├── lazystream@1.0.0 
  │ │ │ ├── merge-stream@1.0.0 
  │ │ │ ├── object-assign@4.0.1 
  │ │ │ ├─┬ strip-bom@2.0.0 
  │ │ │ │ └── is-utf8@0.2.1 
  │ │ │ ├─┬ strip-bom-stream@1.0.0 
  │ │ │ │ └── first-chunk-stream@1.0.0 
  │ │ │ └── through2-filter@2.0.0 
  │ │ └─┬ ware@1.3.0 
  │ │   └─┬ wrap-fn@0.1.5 
  │ │     └── co@3.1.0 
  │ ├─┬ findup-sync@0.2.1 
  │ │ └─┬ glob@4.3.5 
  │ │   └── minimatch@2.0.10 
  │ ├─┬ github-username@2.1.0 
  │ │ └─┬ gh-got@2.4.0 
  │ │   └── object-assign@4.0.1 
  │ ├─┬ glob@5.0.15 
  │ │ └── minimatch@3.0.0 
  │ ├─┬ gruntfile-editor@1.1.0 
  │ │ └─┬ ast-query@1.1.0 
  │ │   ├─┬ escodegen@1.8.0 
  │ │   │ ├── estraverse@1.9.3 
  │ │   │ ├── esutils@2.0.2 
  │ │   │ ├─┬ optionator@0.8.1 
  │ │   │ │ ├── deep-is@0.1.3 
  │ │   │ │ ├── fast-levenshtein@1.1.3 
  │ │   │ │ ├── levn@0.3.0 
  │ │   │ │ ├── prelude-ls@1.1.2 
  │ │   │ │ ├── type-check@0.3.2 
  │ │   │ │ └── wordwrap@1.0.0 
  │ │   │ └─┬ source-map@0.2.0 
  │ │   │   └── amdefine@1.0.0 
  │ │   ├── esprima@2.7.2 
  │ │   └── traverse@0.6.6 
  │ ├─┬ html-wiring@1.2.0 
  │ │ ├─┬ cheerio@0.19.0 
  │ │ │ ├─┬ css-select@1.0.0 
  │ │ │ │ ├── boolbase@1.0.0 
  │ │ │ │ ├── css-what@1.0.0 
  │ │ │ │ ├── domutils@1.4.3 
  │ │ │ │ └── nth-check@1.0.1 
  │ │ │ ├─┬ dom-serializer@0.1.0 
  │ │ │ │ └── domelementtype@1.1.3 
  │ │ │ ├── entities@1.1.1 
  │ │ │ └─┬ htmlparser2@3.8.3 
  │ │ │   ├── domelementtype@1.3.0 
  │ │ │   ├── domhandler@2.3.0 
  │ │ │   ├── domutils@1.5.1 
  │ │ │   ├── entities@1.0.0 
  │ │ │   └── readable-stream@1.1.13 
  │ │ └── detect-newline@1.0.3 
  │ ├─┬ inquirer@0.8.5 
  │ │ ├── ansi-regex@1.1.1 
  │ │ ├── cli-width@1.1.1 
  │ │ ├── figures@1.4.0 
  │ │ ├─┬ readline2@0.1.1 
  │ │ │ ├── mute-stream@0.0.4 
  │ │ │ └─┬ strip-ansi@2.0.1 
  │ │ │   └── ansi-regex@1.1.1 
  │ │ ├── rx@2.5.3 
  │ │ └── through@2.3.8 
  │ ├─┬ istextorbinary@1.0.2 
  │ │ ├── binaryextensions@1.0.0 
  │ │ └── textextensions@1.0.1 
  │ ├── lodash@3.10.1 
  │ ├─┬ mem-fs-editor@2.1.0 
  │ │ ├── commondir@1.0.1 
  │ │ ├── deep-extend@0.4.1 
  │ │ ├── ejs@2.4.1 
  │ │ ├── glob@6.0.4 
  │ │ ├─┬ globby@4.0.0 
  │ │ │ ├── array-union@1.0.1 
  │ │ │ ├── arrify@1.0.1 
  │ │ │ ├── glob@6.0.4 
  │ │ │ ├── object-assign@4.0.1 
  │ │ │ └── pify@2.3.0 
  │ │ └─┬ multimatch@2.1.0 
  │ │   └── array-differ@1.0.0 
  │ ├── mime@1.3.4 
  │ ├─┬ nopt@3.0.6 
  │ │ └── abbrev@1.0.7 
  │ ├── path-exists@1.0.0 
  │ ├── path-is-absolute@1.0.0 
  │ ├── pretty-bytes@2.0.1 
  │ ├── read-chunk@1.0.1 
  │ ├─┬ rimraf@2.5.2 
  │ │ └── glob@7.0.0 
  │ ├── run-async@0.1.0 
  │ ├── shelljs@0.5.3 
  │ ├─┬ sinon@1.17.3 
  │ │ ├── formatio@1.1.1 
  │ │ ├── lolex@1.3.2 
  │ │ ├── samsam@1.1.2 
  │ │ └── util@0.10.3 
  │ ├── text-table@0.2.0 
  │ ├── through2@2.0.1 
  │ ├─┬ user-home@2.0.0 
  │ │ └── os-homedir@1.0.1 
  │ ├── xdg-basedir@2.0.0 
  │ ├── yeoman-assert@2.1.1 
  │ ├─┬ yeoman-environment@1.5.2 
  │ │ ├── grouped-queue@0.3.2 
  │ │ ├─┬ inquirer@0.11.4 
  │ │ │ ├── ansi-escapes@1.1.1 
  │ │ │ ├─┬ cli-cursor@1.0.2 
  │ │ │ │ └─┬ restore-cursor@1.0.1 
  │ │ │ │   └── exit-hook@1.1.1 
  │ │ │ ├─┬ readline2@1.0.1 
  │ │ │ │ └── mute-stream@0.0.5 
  │ │ │ └── rx-lite@3.1.2 
  │ │ ├── log-symbols@1.0.2 
  │ │ ├─┬ mem-fs@1.1.2 
  │ │ │ └── vinyl-file@1.3.0 
  │ │ └── untildify@2.1.0 
  │ └── yeoman-welcome@1.0.1 
  └─┬ yosay@1.1.0 
    ├── ansi-regex@2.0.0 
    ├── pad-component@0.0.1 
    ├─┬ repeating@2.0.0 
    │ └── is-finite@1.0.1 
    ├─┬ string-width@1.0.1 
    │ ├── code-point-at@1.0.0 
    │ └── is-fullwidth-code-point@1.0.0 
    ├── taketalk@1.0.0 
    └── word-wrap@1.1.0 

will-i-am:~ William$ 

This command caused the above response : npm install -g generator-webapp

Question : Where will you find this code ?
Answer : Mine is here : /Users/William/.nvm/versions/node/v5.6.0/lib/node_modules/

The last time I ran the install command, it looks like this:


will-i-am:~ William$ npm install -g generator-webapp
npm WARN deprecated lodash@2.4.2: lodash@ < 3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0.
/Users/William/.nvm/versions/node/v5.6.0/lib
└── generator-webapp@1.1.2 

will-i-am:~ William$ 

Now that you have your project installed ..
Start it with:
yo webapp

TODO: 20160214 : THIS IS NOW NOT WORKING, IT WAS BEFORE, WHAT CHANGED ?
Answer to why it was not working: while I was writing these instructions,
gulp changed their generator name and commands to run it, as explained
from generator-gulp-webapp
to generator-webapp.

Proof it was working :


will-i-am:~ William$ yo webapp
? ==========================================================================
We're constantly looking for ways to make yo better! 
May we anonymously report usage statistics to improve the tool over time? 
More info: https://github.com/yeoman/insight & http://yeoman.io
========================================================================== Yes

     _-----_
    |       |    .--------------------------.
    |--(o)--|    |  'Allo 'allo! Out of the |
   `---------´   |    box I include HTML5   |
    ( _´U`_ )    |    Boilerplate, and a    |
    /___A___\    |  Gruntfile to build your |
     |  ~  |     |           app.           |
   __'.___.'__   '--------------------------'
 ´   `  |° ´ Y ` 

? What more would you like? (Press < space > to select)
❯◉ Sass
 ◉ Bootstrap
 ◉ Modernizr

Sass
Boostrap
Modernizer

We choose all three, them pressed Return.

Resulting in this showing:


? Would you like to include jQuery? (Y/n)

? Would you like to include jQuery? Yes
   create bower.json
 conflict package.json
? Overwrite package.json? (Ynaxdh)

Answering with the letter d will show you the differences.
Seeing the addition to be made, I chose Y, for Yes.

Now, let's update brew:


will-i-am:~ William$ brew update
Checking out files: 100% (220/220), done.
Updated Homebrew from 468f0d9 to 6322c47.
Updated 2 taps (homebrew/dupes, homebrew/versions).
==> New Formulae
assh                                     homebrew/versions/elasticsearch21      
datetime-fortran                         homebrew/versions/kibana43             
dlite                                    homebrew/versions/logstash21           
gitg                                     homebrew/versions/subversion18         
hledger                                  hyperscan                              
homebrew/versions/cassandra21            nuxeo                                  
==> Updated Formulae
ammonite-repl                            libwebsockets                          
atk                                      libzip                                 
botan                                    logstash                               
carthage                                 macvim                                 
chromaprint                              mercurial                              
chromedriver                             mesos                                  
cpanminus                                mm-common                              
cromwell                                 monit                                  
cvs                                      msmtp                                  
darcs                                    mysql ✔                                
darkhttpd                                nettle                                 
dependency-check                         node-build                             
dmd                                      nspr                                   
dnscrypt-proxy                           nss                                    
dnstwist                                 ntl                                    
docker                                   passenger                              
docker-compose                           passpie                                
docker-machine                           pdns                                   
docker-swarm                             platypus                               
dropbear                                 pod2man                                
dyld-headers                             proftpd                                
elasticsearch                            puddletag                              
elixir                                   purescript                             
etcd                                     pyenv                                  
ffmpeg                                   pyenv-virtualenv                       
flow                                     rakudo-star                            
fontconfig                               rbenv-aliases                          
freetype                                 redpen                                 
fstar                                    reposurgeon                            
fwup                                     rethinkdb                              
fzf                                      saltstack                              
gd                                       sbcl                                   
git ✔                                    shadowsocks-libev                      
git-credential-manager                   simple-tiles                           
git-lfs                                  skinny                                 
gnuradio                                 snort                                  
gnutls                                   socat                                  
goffice                                  sonar-runner                           
h2o                                      sourcekitten                           
hadoop                                   src                                    
homebrew/dupes/rsync                     swiftlint                              
homebrew/versions/elasticsearch17        sysdig                                 
htmlcleaner                              tailor                                 
icmake                                   tbb                                    
imagemagick                              telegraf                               
influxdb                                 terraform                              
jenkins                                  tippecanoe                             
jetty                                    unrar                                  
kapacitor                                vala                                   
kibana                                   valabind                               
kotlin                                   vert.x                                 
ldc                                      vim                                    
leiningen                                watchman                               
libbluray                                wavpack                                
libgit2-glib                             wildfly-as                             
libgraphqlparser                         wires                                  
libgsf                                   x265                                   
libtermkey                               yaml-cpp                               
libtins                                  youtube-dl                             
libuv                                    zimg                                   
libvoikko                              
==> Deleted Formulae
homebrew/versions/elasticsearch20        homebrew/versions/kibana42             

Now we run:

brew doctor


will-i-am:~ William$ brew doctor
Your system is ready to brew.

Now that we have our work suite installed,
where do we do the work of building the apps ?

For USING gulp's generator-webapp, we created the yo-stellar/ directory.
/Users/William
/Users/William/yo-stellar

TODO: 2016021 : where are the gulp steps, bring them in here

Tests and Testings

I have not begun tests yet.


will-i-am:~ William$ npm list
nvm@0.30.2 /Users/William
├── bower@1.7.7 extraneous
├── grunt@0.4.5 extraneous
├── lodash@4.3.0
├── observatory@1.0.0 extraneous
├─┬ stellar-sdk@0.4.1
│ ├── axios@0.7.0
│ ├── bluebird@2.10.2
│ ├── es6-promise@3.0.2
│ ├── event-source-polyfill@0.0.6
│ ├─┬ eventsource@0.1.6
│ │ └─┬ original@1.0.0
│ │   └─┬ url-parse@1.0.5
│ │     ├── querystringify@0.0.3
│ │     └── requires-port@1.0.0
│ ├─┬ jsdoc@3.5.0-dev (git://github.com/jsdoc3/jsdoc.git#3dbb94f157290e8a0cbc79cb3580130e8e2c4534)
│ │ ├── async@1.4.2
│ │ ├── bluebird@2.9.34
│ │ ├─┬ catharsis@0.8.7
│ │ │ └─┬ underscore-contrib@0.3.0
│ │ │   └── underscore@1.6.0
│ │ ├── escape-string-regexp@1.0.4
│ │ ├── espree@2.2.5
│ │ ├── js2xmlparser@1.0.0
│ │ ├── marked@0.3.5
│ │ ├─┬ requizzle@0.2.1
│ │ │ └── underscore@1.6.0
│ │ ├── strip-json-comments@1.0.4
│ │ ├── taffydb@2.6.2
│ │ ├── underscore@1.8.3
│ │ └── wrench@1.5.8
│ ├── lodash@3.10.1
│ ├─┬ stellar-base@0.5.1
│ │ ├─┬ babel-runtime@5.8.24
│ │ │ └── core-js@1.1.4
│ │ ├── base32.js@0.1.0
│ │ ├── bignumber.js@2.0.7
│ │ ├── crc@3.3.0
│ │ ├─┬ ed25519@0.0.4
│ │ │ ├── bindings@1.2.1
│ │ │ └── nan@2.0.9
│ │ ├─┬ js-xdr@0.0.12
│ │ │ ├─┬ babel-runtime@4.7.16
│ │ │ │ └── core-js@0.6.1
│ │ │ ├── cursor@0.1.5
│ │ │ ├── long@2.4.0
│ │ │ └── sequencify@0.0.7
│ │ ├── lodash@3.10.1
│ │ ├─┬ sha.js@2.4.4
│ │ │ └── inherits@2.0.1
│ │ └── tweetnacl@0.13.2
│ ├─┬ superagent@1.7.2
│ │ ├── component-emitter@1.2.0
│ │ ├── cookiejar@2.0.6
│ │ ├─┬ debug@2.2.0
│ │ │ └── ms@0.7.1
│ │ ├── extend@3.0.0
│ │ ├─┬ form-data@0.2.0
│ │ │ ├── async@0.9.2
│ │ │ ├─┬ combined-stream@0.0.7
│ │ │ │ └── delayed-stream@0.0.5
│ │ │ └─┬ mime-types@2.0.14
│ │ │   └── mime-db@1.12.0
│ │ ├── formidable@1.0.17
│ │ ├── methods@1.1.2
│ │ ├── mime@1.3.4
│ │ ├── qs@2.3.3
│ │ ├─┬ readable-stream@1.0.27-1
│ │ │ ├── core-util-is@1.0.2
│ │ │ ├── inherits@2.0.1
│ │ │ ├── isarray@0.0.1
│ │ │ └── string_decoder@0.10.31
│ │ └── reduce-component@1.0.1
│ ├── toml@2.3.0
│ └── URIjs@1.16.1
└── yo@1.6.0 extraneous

npm ERR! extraneous: bower@1.7.7 /Users/William/node_modules/bower
npm ERR! extraneous: grunt@0.4.5 /Users/William/node_modules/grunt
npm ERR! extraneous: observatory@1.0.0 /Users/William/node_modules/observatory
npm ERR! extraneous: yo@1.6.0 /Users/William/node_modules/yo
will-i-am:~ William$ 

end of npm list

TODO: Two things to further research and resolve:

  1. URIjs@1.16.1 is deprecated and we need to change it to urijs@1.16.1
    QUESTION: 20160213 : How do we change this ?
    Answer : 2016021? :

  2. What do these, npm ERR! extraneous: errors mean ?
    QUESTION: 20160213 : stated above
    Answer : 2016021? :

a JSON to CSS Resource
JSON to StyleSheet compiler :
JSS is a higher level abstraction over CSS.
It allows you to describe styles in JSON and leverage the power
of JavaScript. It generates style sheets at runtime or server-side
and solves a number of CSS issues. You can use JSS with React,
or with any other js library. It is small, modular and extensible via
plugins API.

JSS Documentation
Index:

Solved CSS issues
JSS vs. ... ?
JSON API
JavaScript API
Plugins
Server-side rendering
Performance

Now that I have this system installed, and am nearly done with these
instructions of how to do these installations, as I learn how to work
with it, I will add resources below the JSS above.

  1. Further research on these two commands, begin with nvm help:

nvm deactivate : Undo effects of nvm on current shell
nvm unload : Unload nvm from shell : what is difference

First problem is we have two definings of nvm deactivate:

From nvm help I see this:

nvm deactivate : To restore your PATH, you can deactivate it.
and .. from https://github.com/creationix/nvm nvm deactivate : Undo effects of nvm on current shell

CAUTION : While visiting the above link, do not forget we install with brew not nvm.

You can see what the nvm deactivate command does by running echo $path BEFORE
and AFTER you run nvm deactivate. nvm is indeed removed from the PATH, and so
all nvm commands become useless. Only solution is to open a new Terminal. We have
our ~/.nvmrc set with 5.6.0 and so opening a new Terminal sets nvm usage.
Otherwise, simply type nvm use 5.6.

Second problem is nvm unload makes your Terminal nvm commands useless.

nvm unload : Unload nvm from shell

So I dived in to see what happened on both commands:


will-i-am:nvm William$ nvm deactivate
/Users/William/.nvm/*/bin removed from $PATH
/Users/William/.nvm/*/share/man removed from $MANPATH
will-i-am:nvm William$ nvm --version
0.30.1
will-i-am:nvm William$ nvm version
none

will-i-am:nvm William$ nvm use 5
Now using node v5.6.0 (npm v3.7.2)
will-i-am:nvm William$ nvm --version
0.30.1
will-i-am:nvm William$ nvm version
v5.6.0
will-i-am:nvm William$ 

So, we can see nvm deactivate is a harmless command and
easily reactivated with the nvm use <version> command.

Not so for nvm unload:


will-i-am:nvm William$ nvm unload
will-i-am:nvm William$ nvm --version
-bash: nvm: command not found
will-i-am:nvm William$ nvm version
-bash: nvm: command not found
will-i-am:nvm William$ nvm use 5
-bash: nvm: command not found
will-i-am:nvm William$ 

Uh oh. Let's see .. nvm unload unloads nvm from shell.
Okay .. do we have an nvm reload command, or .. do I open new Terminal ?
Time for nvm --help, which of course does not work, but I ran the command
prior, and sure enough, my Terminal shows the results and there is no reload.
Okay .. I open a new Terminal.

This has been fun, now the real study / work begins..

Authored by This Gister

Address of Rails-app-steps-to-establish-ruby-stellar-sdk.md is:
https://gist.github.com/kathyonu/c53943026d3e1ef0b129

unplacedtoday


will-i-am:~ William$ npm install --global yo generator-gulp-webapp
npm WARN deprecated generator-gulp-webapp@1.1.1: Renamed generator-gulp-webapp to generator-webapp. Install the new version by running: npm install generator-webapp@^2.0.0
npm WARN deprecated graceful-fs@2.0.3: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN deprecated npmconf@2.1.2: this package has been reintegrated into npm and is now out of date with respect to npm
npm WARN deprecated lodash@2.4.2: lodash@ < 3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0
/Users/William/.nvm/versions/node/v5.6.0/bin/yo -> /Users/William/.nvm/versions/node/v5.6.0/lib/node_modules/yo/lib/cli.js

> spawn-sync@1.0.15 postinstall /Users/William/.nvm/versions/node/v5.6.0/lib/node_modules/generator-gulp-webapp/node_modules/spawn-sync
> node postinstall


> yo@1.6.0 postinstall /Users/William/.nvm/versions/node/v5.6.0/lib/node_modules/yo
> yodoctor


Yeoman Doctor
Running sanity checks on your system

✔ Global configuration file is valid
✔ NODE_PATH matches the npm root
✔ Node.js version
✔ No .bowerrc file in home directory
✔ No .yo-rc.json file in home directory
✔ npm version

Everything looks all right!
/Users/William/.nvm/versions/node/v5.6.0/lib
├─┬ generator-gulp-webapp@1.1.1 
│ ├─┬ chalk@1.1.1 

* * SEVERELY TRUNCATED * *

  └─┬ yosay@1.1.0 
    ├── minimist@1.2.0 
    ├── pad-component@0.0.1 
    ├─┬ taketalk@1.0.0 
    │ ├── get-stdin@4.0.1 
    │ └── minimist@1.2.0 
    └── word-wrap@1.1.0 

will-i-am:~ William$ npm upgrade lodash@^4.0.0

Answer is to run: npm rm --global yo generator-gulp-webapp and
then run the new command, npm install --global yo generator-webapp .

npm rm --global yo generator-gulp-webapp

npm install --global yo generator-webapp

The instructions now continue with:

https://www.npmjs.com/package/yeoman-assert http://yeoman.io/generator/assert.html broken Also, helpers assertions methods are now exposed on the yeoman.assert namespace.

Questions ? Run:

npm home yeoman-assert


Now you can scaffold your very own web app:

$ mkdir my-webapp
$ cd my-webapp
$ yo webapp

To start developing, run:

$ gulp serve

RESULTS OF THE ABOVE COMMANDS:


will-i-am:~ William$ npm rm --global yo generator-gulp-webapp
- abbrev@1.0.7 node_modules/generator-gulp-webapp/node_modules/abbrev
- amdefine@1.0.0 node_modules/generator-gulp-webapp/node_modules/amdefine
- ansi-escapes@1.1.1 node_modules/generator-gulp-webapp/node_modules/ansi-escapes
 * * severely truncated * *
- yo@1.6.0 node_modules/yo
will-i-am:~ William$ 

The npm rm --global yo generator-gulp-webapp just removed the old named material.

Now we install the newly named material:

npm install --global yo generator-webapp npm install --save --save-exact cool-ascii-faces


will-i-am:~ William$ npm install --global yo generator-webapp
npm WARN deprecated graceful-fs@2.0.3: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN deprecated npmconf@2.1.2: this package has been reintegrated into npm and is now out of date with respect to npm
/Users/William/.nvm/versions/node/v5.6.0/bin/yo -> /Users/William/.nvm/versions/node/v5.6.0/lib/node_modules/yo/lib/cli.js

> yo@1.6.0 postinstall /Users/William/.nvm/versions/node/v5.6.0/lib/node_modules/yo
> yodoctor


Yeoman Doctor
Running sanity checks on your system

✔ Global configuration file is valid
✔ NODE_PATH matches the npm root
✔ Node.js version
✔ No .bowerrc file in home directory
✔ No .yo-rc.json file in home directory
✔ npm version

Everything looks all right!
/Users/William/.nvm/versions/node/v5.6.0/lib
├─┬ generator-webapp@2.0.0 
│ ├─┬ chalk@1.1.1 
│ │ ├── ansi-styles@2.1.0 
  * * truncated * * 
  │ │ └─┬ yeoman-environment@1.5.2 
  * * truncated * * 
  │ │   │ └── vinyl-file@1.3.0 
│ │   └── untildify@2.1.0 
│ └─┬ yosay@1.1.0 
  * * truncated * * 
│   └── word-wrap@1.1.0 
└─┬ yo@1.6.0 
  ├── async@1.5.2 
  * * severely truncated * *
  │ └── untildify@2.1.0 
  └─┬ yosay@1.1.0 
    ├── minimist@1.2.0 
    ├── pad-component@0.0.1 
    ├─┬ taketalk@1.0.0 
    │ ├── get-stdin@4.0.1 
    │ └── minimist@1.2.0 
    └── word-wrap@1.1.0 

will-i-am:~ William$ 

The npm install --global yo generator-webapp command just installed the above tools.
Instructions continue with:


Now you can scaffold your very own web app:

$ mkdir my-webapp
$ cd my-webapp
$ yo webapp

To start developing, run:

$ gulp serve

There is more to know to Getting Started with the newly named yeoman/generator-webapp.

End of name change from generator gulp webapp to generator-webapp.

So, we are ready to scaffold our very own web app ..
Here we go .. I run the three commands:

mkdir yo-stellar

cd yo-stellar

yo webapp

And, voila ..


 Last login: Tue Feb 16 20:57:38 on ttys024
will-i-am:~ William$  nvm version
v5.6.0
will-i-am:~ William$ mkdir yo-stellar
will-i-am:~ William$ cd yo-stellar/
will-i-am:yo-stellar William$ yo webapp

     _-----_
    |       |    .--------------------------.
    |--(o)--|    |  'Allo 'allo! Out of the |
   `---------´   |    box I include HTML5   |
    ( _´U`_ )    | Boilerplate, jQuery, and |
    /___A___\    | a gulpfile to build your |
     |  ~  |     |           app.           |
   __'.___.'__   '--------------------------'
 ´   `  |° ´ Y ` 

? What more would you like? (Press < space > to select)
❯◉ Sass
 ◉ Bootstrap
 ◉ Modernizr

The instructions do not tell you, if you do not want Sass,
use your down arrow to arrive at Bootstrap, etc.

What or which of the three do I choose ?
I chose to choose all three. I press my Return button.

As I was the build taking place, I see we are in for a slew of deprecated notices,
and other notices. Okay, this is serious ,the install is continuing and continuing and
many notices, and many error notice lines and, it has installed, and is done.

This result is something that should not be truncated by me, so you too can see:


 Last login: Tue Feb 16 20:57:38 on ttys024
will-i-am:~ William$  nvm version
v5.6.0
will-i-am:~ William$ mkdir yo-stellar
will-i-am:~ William$ cd yo-stellar/
will-i-am:yo-stellar William$ yo webapp

     _-----_
    |       |    .--------------------------.
    |--(o)--|    |  'Allo 'allo! Out of the |
   `---------´   |    box I include HTML5   |
    ( _´U`_ )    | Boilerplate, jQuery, and |
    /___A___\    | a gulpfile to build your |
     |  ~  |     |           app.           |
   __'.___.'__   '--------------------------'
 ´   `  |° ´ Y ` 

? What more would you like? (Press < space > to select)
❯◉ Sass
 ◉ Bootstrap
 ◉ Modernizr

I press return button, and off it goes after it shows my choices:


? What more would you like? Sass, Bootstrap, Modernizr
   create bower.json
   create package.json
   create gulpfile.babel.js
   create .babelrc
   create .gitignore
   create .gitattributes
   create .bowerrc
   create .editorconfig
   create app/favicon.ico
   create app/apple-touch-icon.png
   create app/robots.txt
   create app/styles/main.scss
   create app/scripts/main.js
   create app/index.html
   create test/spec/test.js
   create test/index.html

I'm all done. Running npm install & bower install for you to install the required dependencies. If this fails, try running the command yourself.

npm WARN deprecated graceful-fs@3.0.8: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN deprecated lodash@1.0.2: lodash@ < 3 .0.0 is no longer maintained. Upgrade to lodash@^4.0.0.
npm WARN deprecated graceful-fs@1.2.3: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN deprecated npmconf@2.1.2: this package has been reintegrated into npm and is now out of date with respect to npm
npm WARN deprecated lodash.padleft@3.1.1: This package has been renamed. Use lodash.padstart@^4.0.0.
npm WARN deprecated lodash.padright@3.1.1: This package has been renamed. Use lodash.padend@^4.0.0.
npm WARN deprecated graceful-fs@2.0.3: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN deprecated lodash@2.4.2: lodash@ < 3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0
npm WARN prefer global node-gyp@3.3.0 should be installed with -g

> fsevents@1.0.7 install /Users/William/yo-stellar/node_modules/fsevents
> node-pre-gyp install --fallback-to-build

[fsevents] Success: "/Users/William/yo-stellar/node_modules/fsevents/lib/binding/Release/node-v47-darwin-x64/fse.node" is installed via remote

> bufferutil@1.2.1 install /Users/William/yo-stellar/node_modules/bufferutil
> node-gyp rebuild

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/bufferutil.node

> utf-8-validate@1.2.1 install /Users/William/yo-stellar/node_modules/utf-8-validate
> node-gyp rebuild

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/validation.node

> node-sass@3.4.2 install /Users/William/yo-stellar/node_modules/node-sass
> node scripts/install.js

Binary downloaded and installed at /Users/William/yo-stellar/node_modules/node-sass/vendor/darwin-x64-47/binding.node

> spawn-sync@1.0.15 postinstall /Users/William/yo-stellar/node_modules/spawn-sync
> node postinstall


> node-sass@3.4.2 postinstall /Users/William/yo-stellar/node_modules/node-sass
> node scripts/build.js

` /Users/William/yo-stellar/node_modules/node-sass/vendor/darwin-x64-47/binding.node ` exists. 
 testing binary.
Binary is fine; exiting.

> optipng-bin@3.1.0 postinstall /Users/William/yo-stellar/node_modules/optipng-bin
> node lib/install.js

  ✔ optipng pre-build test passed successfully

> jpegtran-bin@3.0.6 postinstall /Users/William/yo-stellar/node_modules/jpegtran-bin
> node lib/install.js

  ✔ jpegtran pre-build test passed successfully

> gifsicle@3.0.3 postinstall /Users/William/yo-stellar/node_modules/gifsicle
> node lib/install.js

  ✔ gifsicle pre-build test passed successfully
/Users/William/yo-stellar
├─┬ babel-core@6.5.2 
│ ├─┬ babel-code-frame@6.5.0 
│ │ ├── esutils@2.0.2 
│ │ ├── js-tokens@1.0.2 
│ │ ├─┬ line-numbers@0.2.0 
│ │ │ └── left-pad@0.0.3 
│ │ └─┬ repeating@1.1.3 
│ │   └── is-finite@1.0.1 
│ ├─┬ babel-generator@6.5.0 
│ │ ├── detect-indent@3.0.1 
│ │ ├── is-integer@1.0.6 
│ │ └── trim-right@1.0.1 
│ ├── babel-helpers@6.5.0 
│ ├── babel-messages@6.5.0 
│ ├─┬ babel-register@6.5.2 
│ │ ├── core-js@1.2.6 
│ │ ├─┬ home-or-tmp@1.0.0 
│ │ │ └── os-tmpdir@1.0.1 
│ │ ├─┬ mkdirp@0.5.1 
│ │ │ └── minimist@0.0.8 
│ │ └─┬ source-map-support@0.2.10 
│ │   └─┬ source-map@0.1.32 
│ │     └── amdefine@1.0.0 
│ ├── babel-runtime@5.8.35 
│ ├── babel-template@6.5.0 
│ ├─┬ babel-traverse@6.5.0 
│ │ ├── globals@8.18.0 
│ │ └─┬ invariant@2.2.0 
│ │   └── loose-envify@1.1.0 
│ ├─┬ babel-types@6.5.2 
│ │ └── to-fast-properties@1.0.1 
│ ├── babylon@6.5.2 
│ ├── convert-source-map@1.1.3 
│ ├─┬ debug@2.2.0 
│ │ └── ms@0.7.1 
│ ├── json5@0.4.0 
│ ├── lodash@3.10.1 
│ ├─┬ minimatch@2.0.10 
│ │ └─┬ brace-expansion@1.1.3 
│ │   ├── balanced-match@0.3.0 
│ │   └── concat-map@0.0.1 
│ ├── path-exists@1.0.0 
│ ├── path-is-absolute@1.0.0 
│ ├── private@0.1.6 
│ ├── shebang-regex@1.0.0 
│ ├── slash@1.0.0 
│ └── source-map@0.5.3 
├─┬ babel-preset-es2015@6.5.0 
│ ├── babel-plugin-check-es2015-constants@6.5.0 
│ ├── babel-plugin-transform-es2015-arrow-functions@6.5.2 
│ ├── babel-plugin-transform-es2015-block-scoped-functions@6.5.0 
│ ├── babel-plugin-transform-es2015-block-scoping@6.5.0 
│ ├─┬ babel-plugin-transform-es2015-classes@6.5.2 
│ │ ├── babel-helper-define-map@6.5.0 
│ │ ├── babel-helper-function-name@6.5.0 
│ │ ├── babel-helper-optimise-call-expression@6.5.0 
│ │ └── babel-helper-replace-supers@6.5.0 
│ ├── babel-plugin-transform-es2015-computed-properties@6.5.2 
│ ├── babel-plugin-transform-es2015-destructuring@6.5.0 
│ ├── babel-plugin-transform-es2015-for-of@6.5.2 
│ ├── babel-plugin-transform-es2015-function-name@6.5.0 
│ ├── babel-plugin-transform-es2015-literals@6.5.0 
│ ├─┬ babel-plugin-transform-es2015-modules-commonjs@6.5.2 
│ │ └── babel-plugin-transform-strict-mode@6.5.2 
│ ├── babel-plugin-transform-es2015-object-super@6.5.0 
│ ├─┬ babel-plugin-transform-es2015-parameters@6.5.0 
│ │ ├─┬ babel-helper-call-delegate@6.5.0 
│ │ │ └── babel-helper-hoist-variables@6.5.0 
│ │ └── babel-helper-get-function-arity@6.5.0 
│ ├── babel-plugin-transform-es2015-shorthand-properties@6.5.0 
│ ├── babel-plugin-transform-es2015-spread@6.5.2 
│ ├─┬ babel-plugin-transform-es2015-sticky-regex@6.5.0 
│ │ └── babel-helper-regex@6.5.0 
│ ├── babel-plugin-transform-es2015-template-literals@6.5.2 
│ ├── babel-plugin-transform-es2015-typeof-symbol@6.5.0 
│ ├─┬ babel-plugin-transform-es2015-unicode-regex@6.5.0 
│ │ └─┬ regexpu-core@1.0.0 
│ │   ├── regenerate@1.2.1 
│ │   ├── regjsgen@0.2.0 
│ │   └─┬ regjsparser@0.1.5 
│ │     └── jsesc@0.5.0 
│ └─┬ babel-plugin-transform-regenerator@6.5.2 
│   └── babel-plugin-syntax-async-functions@6.5.0 
├─┬ browser-sync@2.11.1 
│ ├── async-each-series@0.1.1 
│ ├─┬ browser-sync-client@2.4.1 
│ │ ├── etag@1.7.0 
│ │ └── fresh@0.3.0 
│ ├─┬ browser-sync-ui@0.5.18 
│ │ ├── connect-history-api-fallback@1.1.0 
│ │ ├─┬ stream-throttle@0.1.3 
│ │ │ ├─┬ commander@2.9.0 
│ │ │ │ └── graceful-readlink@1.0.1 
│ │ │ └── limiter@1.1.0 
│ │ └─┬ weinre@2.0.0-pre-I0Z7U9OV 
│ │   ├─┬ express@2.5.11 
│ │   │ ├─┬ connect@1.9.2 
│ │   │ │ └── formidable@1.0.17 
│ │   │ ├── mime@1.2.4 
│ │   │ ├── mkdirp@0.3.0 
│ │   │ └── qs@0.4.2 
│ │   ├─┬ nopt@3.0.6 
│ │   │ └── abbrev@1.0.7 
│ │   └── underscore@1.7.0 
│ ├── bs-recipes@1.1.0 
│ ├─┬ chokidar@1.4.1 
│ │ ├─┬ anymatch@1.3.0 
│ │ │ └── arrify@1.0.1 
│ │ ├── async-each@0.1.6 
│ │ ├─┬ fsevents@1.0.7 
│ │ │ └─┬ node-pre-gyp@0.6.19 
│ │ │   ├─┬ mkdirp@0.5.1 
│ │ │   │ └── minimist@0.0.8 
│ │ │   ├─┬ nopt@3.0.6 
│ │ │   │ └── abbrev@1.0.7 
│ │ │   ├─┬ npmlog@2.0.0 
│ │ │   │ ├── ansi@0.3.0 
│ │ │   │ ├─┬ are-we-there-yet@1.0.5 
│ │ │   │ │ └── delegates@0.1.0 
│ │ │   │ └─┬ gauge@1.2.2 
│ │ │   │   ├── has-unicode@1.0.1 
│ │ │   │   ├─┬ lodash.pad@3.1.1 
│ │ │   │   │ ├── lodash._basetostring@3.0.1 
│ │ │   │   │ └─┬ lodash._createpadding@3.6.1 
│ │ │   │   │   └── lodash.repeat@3.0.1 
│ │ │   │   ├── lodash.padleft@3.1.1 
│ │ │   │   └── lodash.padright@3.1.1 
│ │ │   ├─┬ rc@1.1.6 
│ │ │   │ ├── deep-extend@0.4.0 
│ │ │   │ ├── ini@1.3.4 
│ │ │   │ ├── minimist@1.2.0 
│ │ │   │ └── strip-json-comments@1.0.4 
│ │ │   ├─┬ request@2.67.0 
│ │ │   │ ├── aws-sign2@0.6.0 
│ │ │   │ ├── bl@1.0.0 
│ │ │   │ ├── 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-rc3 
│ │ │   │ │ └── async@1.5.1 
│ │ │   │ ├─┬ har-validator@2.0.3 
│ │ │   │ │ ├─┬ chalk@1.1.1 
│ │ │   │ │ │ ├── ansi-styles@2.1.0 
│ │ │   │ │ │ ├── escape-string-regexp@1.0.4 
│ │ │   │ │ │ ├─┬ has-ansi@2.0.0 
│ │ │   │ │ │ │ └── ansi-regex@2.0.0 
│ │ │   │ │ │ ├── strip-ansi@3.0.0 
│ │ │   │ │ │ └── supports-color@2.0.0 
│ │ │   │ │ ├─┬ commander@2.9.0 
│ │ │   │ │ │ └── graceful-readlink@1.0.1 
│ │ │   │ │ ├─┬ is-my-json-valid@2.12.3 
│ │ │   │ │ │ ├── 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.0 
│ │ │   │ │   └── pinkie@2.0.1 
│ │ │   │ ├─┬ hawk@3.1.2 
│ │ │   │ │ ├── boom@2.10.1 
│ │ │   │ │ ├── cryptiles@2.0.5 
│ │ │   │ │ ├── hoek@2.16.3 
│ │ │   │ │ └── sntp@1.0.9 
│ │ │   │ ├─┬ http-signature@1.1.0 
│ │ │   │ │ ├── assert-plus@0.1.5 
│ │ │   │ │ ├─┬ jsprim@1.2.2 
│ │ │   │ │ │ ├── extsprintf@1.0.2 
│ │ │   │ │ │ ├── json-schema@0.2.2 
│ │ │   │ │ │ └── verror@1.3.6 
│ │ │   │ │ └─┬ sshpk@1.7.2 
│ │ │   │ │   ├── asn1@0.2.3 
│ │ │   │ │   ├── assert-plus@0.2.0 
│ │ │   │ │   ├── dashdash@1.11.0 
│ │ │   │ │   ├── ecc-jsbn@0.1.1 
│ │ │   │ │   ├── jodid25519@1.0.2 
│ │ │   │ │   ├── jsbn@0.1.0 
│ │ │   │ │   └── tweetnacl@0.13.2 
│ │ │   │ ├── is-typedarray@1.0.0 
│ │ │   │ ├── isstream@0.1.2 
│ │ │   │ ├── json-stringify-safe@5.0.1 
│ │ │   │ ├─┬ mime-types@2.1.9 
│ │ │   │ │ └── mime-db@1.21.0 
│ │ │   │ ├── node-uuid@1.4.7 
│ │ │   │ ├── oauth-sign@0.8.0 
│ │ │   │ ├── qs@5.2.0 
│ │ │   │ ├── stringstream@0.0.5 
│ │ │   │ ├── tough-cookie@2.2.1 
│ │ │   │ └── tunnel-agent@0.4.2 
│ │ │   ├─┬ rimraf@2.5.0 
│ │ │   │ └─┬ glob@6.0.3 
│ │ │   │   ├─┬ inflight@1.0.4 
│ │ │   │   │ └── wrappy@1.0.1 
│ │ │   │   ├── inherits@2.0.1 
│ │ │   │   ├─┬ minimatch@3.0.0 
│ │ │   │   │ └─┬ brace-expansion@1.1.2 
│ │ │   │   │   ├── balanced-match@0.3.0 
│ │ │   │   │   └── concat-map@0.0.1 
│ │ │   │   ├─┬ once@1.3.3 
│ │ │   │   │ └── wrappy@1.0.1 
│ │ │   │   └── path-is-absolute@1.0.0 
│ │ │   ├── semver@5.1.0 
│ │ │   ├─┬ tar@2.2.1 
│ │ │   │ ├── block-stream@0.0.8 
│ │ │   │ ├─┬ fstream@1.0.8 
│ │ │   │ │ └── graceful-fs@4.1.2 
│ │ │   │ └── inherits@2.0.1 
│ │ │   └─┬ tar-pack@3.1.2 
│ │ │     ├── debug@0.7.4 
│ │ │     ├─┬ fstream-ignore@1.0.3 
│ │ │     │ └─┬ minimatch@3.0.0 
│ │ │     │   └─┬ brace-expansion@1.1.2 
│ │ │     │     ├── balanced-match@0.3.0 
│ │ │     │     └── concat-map@0.0.1 
│ │ │     ├── once@1.1.1 
│ │ │     ├─┬ readable-stream@2.0.5 
│ │ │     │ ├── core-util-is@1.0.2 
│ │ │     │ ├── isarray@0.0.1 
│ │ │     │ ├── process-nextick-args@1.0.6 
│ │ │     │ ├── string_decoder@0.10.31 
│ │ │     │ └── util-deprecate@1.0.2 
│ │ │     ├─┬ rimraf@2.4.5 
│ │ │     │ └─┬ glob@6.0.3 
│ │ │     │   ├─┬ inflight@1.0.4 
│ │ │     │   │ └── wrappy@1.0.1 
│ │ │     │   ├── inherits@2.0.1 
│ │ │     │   ├─┬ minimatch@3.0.0 
│ │ │     │   │ └─┬ brace-expansion@1.1.2 
│ │ │     │   │   ├── balanced-match@0.3.0 
│ │ │     │   │   └── concat-map@0.0.1 
│ │ │     │   ├─┬ once@1.3.3 
│ │ │     │   │ └── wrappy@1.0.1 
│ │ │     │   └── path-is-absolute@1.0.0 
│ │ │     └── uid-number@0.0.3 
│ │ ├── glob-parent@2.0.0 
│ │ ├── inherits@2.0.1 
│ │ ├─┬ is-binary-path@1.0.1 
│ │ │ └── binary-extensions@1.4.0 
│ │ ├── is-glob@2.0.1 
│ │ └── readdirp@2.0.0 
│ ├─┬ connect@3.4.1 
│ │ ├─┬ finalhandler@0.4.1 
│ │ │ ├─┬ on-finished@2.3.0 
│ │ │ │ └── ee-first@1.1.1 
│ │ │ └── unpipe@1.0.0 
│ │ ├── parseurl@1.3.1 
│ │ └── utils-merge@1.0.0 
│ ├── dev-ip@1.0.1 
│ ├── easy-extender@2.3.2 
│ ├─┬ eazy-logger@2.1.2 
│ │ ├── opt-merger@1.1.1 
│ │ └─┬ tfunk@3.0.1 
│ │   ├─┬ chalk@0.5.1 
│ │   │ ├── ansi-styles@1.1.0 
│ │   │ ├─┬ has-ansi@0.1.0 
│ │   │ │ └── ansi-regex@0.2.1 
│ │   │ ├── strip-ansi@0.3.0 
│ │   │ └── supports-color@0.2.0 
│ │   └── object-path@0.9.2 
│ ├── emitter-steward@1.0.0 
│ ├─┬ foxy@11.1.4 
│ │ ├─┬ http-proxy@1.13.2 
│ │ │ ├── eventemitter3@1.1.1 
│ │ │ └── requires-port@1.0.0 
│ │ ├─┬ lodash.merge@3.3.2 
│ │ │ ├── lodash._arraycopy@3.0.0 
│ │ │ ├── lodash._arrayeach@3.0.0 
│ │ │ ├─┬ lodash._createassigner@3.1.1 
│ │ │ │ └── lodash._bindcallback@3.0.1 
│ │ │ ├── lodash._getnative@3.9.1 
│ │ │ ├── lodash.isarguments@3.0.7 
│ │ │ ├── lodash.isarray@3.0.4 
│ │ │ ├─┬ lodash.isplainobject@3.2.0 
│ │ │ │ └── lodash._basefor@3.0.3 
│ │ │ ├── lodash.istypedarray@3.0.5 
│ │ │ ├── lodash.keys@3.1.2 
│ │ │ ├── lodash.keysin@3.0.8 
│ │ │ └── lodash.toplainobject@3.0.0 
│ │ └── resp-modifier@4.0.4 
│ ├─┬ fs-extra@0.26.5 
│ │ ├── jsonfile@2.2.3 
│ │ └── klaw@1.1.3 
│ ├── immutable@3.7.6 
│ ├─┬ localtunnel@1.8.1 
│ │ ├── openurl@1.1.0 
│ │ ├─┬ request@2.65.0 
│ │ │ ├── aws-sign2@0.6.0 
│ │ │ ├── bl@1.0.3 
│ │ │ ├── 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-rc3 
│ │ │ ├─┬ har-validator@2.0.6 
│ │ │ │ └─┬ pinkie-promise@2.0.0 
│ │ │ │   └── 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@0.11.0 
│ │ │ │ ├── asn1@0.1.11 
│ │ │ │ ├── assert-plus@0.1.5 
│ │ │ │ └── ctype@0.5.3 
│ │ │ ├── isstream@0.1.2 
│ │ │ ├── json-stringify-safe@5.0.1 
│ │ │ ├── node-uuid@1.4.7 
│ │ │ ├── oauth-sign@0.8.1 
│ │ │ ├── qs@5.2.0 
│ │ │ ├── stringstream@0.0.5 
│ │ │ ├── tough-cookie@2.2.1 
│ │ │ └── tunnel-agent@0.4.2 
│ │ └─┬ yargs@3.29.0 
│ │   ├── camelcase@1.2.1 
│ │   ├─┬ cliui@3.1.0 
│ │   │ ├─┬ string-width@1.0.1 
│ │   │ │ ├── code-point-at@1.0.0 
│ │   │ │ └── is-fullwidth-code-point@1.0.0 
│ │   │ └── wrap-ansi@1.0.0 
│ │   ├─┬ os-locale@1.4.0 
│ │   │ └─┬ lcid@1.0.0 
│ │   │   └── invert-kv@1.0.0 
│ │   ├── window-size@0.1.4 
│ │   └── y18n@3.2.0 
│ ├── longest@1.0.1 
│ ├─┬ meow@3.3.0 
│ │ ├─┬ camelcase-keys@1.0.0 
│ │ │ └── map-obj@1.0.1 
│ │ └── indent-string@1.2.2 
│ ├─┬ micromatch@2.3.5 
│ │ ├─┬ arr-diff@2.0.0 
│ │ │ └── arr-flatten@1.0.1 
│ │ ├── array-unique@0.2.1 
│ │ ├─┬ braces@1.8.3 
│ │ │ ├─┬ expand-range@1.8.1 
│ │ │ │ └─┬ fill-range@2.2.3 
│ │ │ │   ├── is-number@2.1.0 
│ │ │ │   ├── randomatic@1.1.5 
│ │ │ │   └── repeat-string@1.5.2 
│ │ │ ├── preserve@0.2.0 
│ │ │ └── repeat-element@1.1.2 
│ │ ├── expand-brackets@0.1.4 
│ │ ├── extglob@0.3.2 
│ │ ├── filename-regex@2.0.0 
│ │ ├── is-extglob@1.0.0 
│ │ ├─┬ kind-of@3.0.2 
│ │ │ └── is-buffer@1.1.2 
│ │ ├── lazy-cache@0.2.7 
│ │ ├── normalize-path@2.0.1 
│ │ ├─┬ parse-glob@3.0.4 
│ │ │ ├── glob-base@0.3.0 
│ │ │ └── is-dotfile@1.0.2 
│ │ └─┬ regex-cache@0.4.2 
│ │   ├── is-equal-shallow@0.1.3 
│ │   └── is-primitive@2.0.0 
│ ├─┬ opn@3.0.3 
│ │ └── object-assign@4.0.1 
│ ├─┬ portscanner@1.0.0 
│ │ └── async@0.1.15 
│ ├─┬ query-string@2.4.2 
│ │ └── strict-uri-encode@1.1.0 
│ ├── resp-modifier@5.0.2 
│ ├─┬ serve-index@1.7.3 
│ │ ├─┬ accepts@1.2.13 
│ │ │ └── negotiator@0.5.3 
│ │ ├── batch@0.5.3 
│ │ ├── escape-html@1.0.3 
│ │ ├─┬ http-errors@1.3.1 
│ │ │ └── statuses@1.2.1 
│ │ └─┬ mime-types@2.1.10 
│ │   └── mime-db@1.22.0 
│ ├─┬ serve-static@1.10.2 
│ │ └─┬ send@0.13.1 
│ │   ├── depd@1.1.0 
│ │   ├── destroy@1.0.4 
│ │   ├── mime@1.3.4 
│ │   └── range-parser@1.0.3 
│ ├─┬ socket.io@1.3.7 
│ │ ├─┬ debug@2.1.0 
│ │ │ └── ms@0.6.2 
│ │ ├─┬ engine.io@1.5.4 
│ │ │ ├── base64id@0.1.0 
│ │ │ ├─┬ debug@1.0.3 
│ │ │ │ └── ms@0.6.2 
│ │ │ ├─┬ engine.io-parser@1.2.2 
│ │ │ │ ├── after@0.8.1 
│ │ │ │ ├── arraybuffer.slice@0.0.6 
│ │ │ │ ├── base64-arraybuffer@0.1.2 
│ │ │ │ ├── blob@0.0.4 
│ │ │ │ └── utf8@2.1.0 
│ │ │ └─┬ ws@0.8.0 
│ │ │   ├─┬ bufferutil@1.2.1 
│ │ │   │ └── bindings@1.2.1 
│ │ │   ├── options@0.0.6 
│ │ │   ├── ultron@1.0.2 
│ │ │   └── utf-8-validate@1.2.1 
│ │ ├── has-binary-data@0.1.3 
│ │ ├─┬ socket.io-adapter@0.3.1 
│ │ │ ├─┬ debug@1.0.2 
│ │ │ │ └── ms@0.6.2 
│ │ │ ├── object-keys@1.0.1 
│ │ │ └─┬ socket.io-parser@2.2.2 
│ │ │   └── debug@0.7.4 
│ │ ├─┬ socket.io-client@1.3.7 
│ │ │ ├── backo2@1.0.2 
│ │ │ ├── component-bind@1.0.0 
│ │ │ ├── component-emitter@1.1.2 
│ │ │ ├── debug@0.7.4 
│ │ │ ├─┬ engine.io-client@1.5.4 
│ │ │ │ ├── component-inherit@0.0.3 
│ │ │ │ ├─┬ debug@1.0.4 
│ │ │ │ │ └── ms@0.6.2 
│ │ │ │ ├─┬ has-cors@1.0.3 
│ │ │ │ │ └── global@2.0.1 
│ │ │ │ ├── parsejson@0.0.1 
│ │ │ │ ├── parseqs@0.0.2 
│ │ │ │ ├── parseuri@0.0.4 
│ │ │ │ └── xmlhttprequest@1.5.0 
│ │ │ ├── has-binary@0.1.6 
│ │ │ ├── indexof@0.0.1 
│ │ │ ├── object-component@0.0.3 
│ │ │ ├─┬ parseuri@0.0.2 
│ │ │ │ └─┬ better-assert@1.0.2 
│ │ │ │   └── callsite@1.0.0 
│ │ │ └── to-array@0.1.3 
│ │ └─┬ socket.io-parser@2.2.4 
│ │   ├── benchmark@1.0.0 
│ │   ├── debug@0.7.4 
│ │   └── json3@3.2.6 
│ ├── ua-parser-js@0.7.10 
│ └── ucfirst@1.0.0 
├─┬ del@1.2.1 
│ ├─┬ each-async@1.1.1 
│ │ ├── onetime@1.1.0 
│ │ └── set-immediate-shim@1.0.1 
│ ├─┬ globby@2.1.0 
│ │ ├── array-union@1.0.1 
│ │ ├── async@1.5.2 
│ │ └── glob@5.0.15 
│ ├── is-path-cwd@1.0.0 
│ ├─┬ is-path-in-cwd@1.0.0 
│ │ └─┬ is-path-inside@1.0.0 
│ │   └── path-is-inside@1.0.1 
│ ├── object-assign@3.0.0 
│ └─┬ rimraf@2.5.2 
│   └── glob@7.0.0 
├─┬ gulp@3.9.1 
│ ├── archy@1.0.0 
│ ├─┬ chalk@1.1.1 
│ │ ├── ansi-styles@2.1.0 
│ │ ├── escape-string-regexp@1.0.4 
│ │ ├─┬ has-ansi@2.0.0 
│ │ │ └── ansi-regex@2.0.0 
│ │ ├── strip-ansi@3.0.0 
│ │ └── supports-color@2.0.0 
│ ├── deprecated@0.0.1 
│ ├─┬ gulp-util@3.0.7 
│ │ ├── array-differ@1.0.0 
│ │ ├── array-uniq@1.0.2 
│ │ ├── beeper@1.1.0 
│ │ ├── dateformat@1.0.12 
│ │ ├─┬ gulplog@1.0.0 
│ │ │ └── glogg@1.0.0 
│ │ ├─┬ has-gulplog@0.1.0 
│ │ │ └── sparkles@1.0.0 
│ │ ├── lodash._reescape@3.0.0 
│ │ ├── lodash._reevaluate@3.0.0 
│ │ ├── lodash._reinterpolate@3.0.0 
│ │ ├─┬ lodash.template@3.6.2 
│ │ │ ├── lodash._basecopy@3.0.1 
│ │ │ ├── lodash._basetostring@3.0.1 
│ │ │ ├── lodash._basevalues@3.0.0 
│ │ │ ├── lodash._isiterateecall@3.0.9 
│ │ │ ├─┬ lodash.escape@3.2.0 
│ │ │ │ └── lodash._root@3.0.1 
│ │ │ ├── lodash.restparam@3.6.1 
│ │ │ └── lodash.templatesettings@3.1.1 
│ │ ├── multipipe@0.1.2 
│ │ └── vinyl@0.5.3 
│ ├── interpret@1.0.0 
│ ├─┬ liftoff@2.2.0 
│ │ ├── extend@2.0.1 
│ │ ├─┬ findup-sync@0.3.0 
│ │ │ └── glob@5.0.15 
│ │ ├── flagged-respawn@0.3.1 
│ │ ├── rechoir@0.6.2 
│ │ └── resolve@1.1.7 
│ ├── minimist@1.2.0 
│ ├─┬ orchestrator@0.3.7 
│ │ ├── end-of-stream@0.1.5 
│ │ ├── sequencify@0.0.7 
│ │ └── stream-consume@0.1.0 
│ ├── pretty-hrtime@1.0.1 
│ ├── semver@4.3.6 
│ ├─┬ tildify@1.1.2 
│ │ └── os-homedir@1.0.1 
│ ├─┬ v8flags@2.0.11 
│ │ └── user-home@1.1.1 
│ └─┬ vinyl-fs@0.3.14 
│   ├── defaults@1.0.3 
│   ├─┬ glob-stream@3.1.18 
│   │ ├── glob@4.5.3 
│   │ ├─┬ glob2base@0.0.12 
│   │ │ └── find-index@0.1.1 
│   │ ├── ordered-read-streams@0.1.0 
│   │ ├─┬ through2@0.6.5 
│   │ │ └── readable-stream@1.0.33 
│   │ └── unique-stream@1.0.0 
│   ├── glob-watcher@0.0.6 
│   ├── graceful-fs@3.0.8 
│   ├─┬ strip-bom@1.0.0 
│   │ └── first-chunk-stream@1.0.0 
│   ├─┬ through2@0.6.5 
│   │ └── readable-stream@1.0.33 
│   └─┬ vinyl@0.4.6 
│     └── clone@0.2.0 
├─┬ gulp-autoprefixer@3.1.0 
│ ├─┬ autoprefixer@6.3.3 
│ │ ├── browserslist@1.1.3 
│ │ ├── caniuse-db@1.0.30000409 
│ │ ├── normalize-range@0.1.2 
│ │ ├── num2fraction@1.2.2 
│ │ └── postcss-value-parser@3.2.3 
│ ├─┬ postcss@5.0.16 
│ │ ├── js-base64@2.1.9 
│ │ └─┬ supports-color@3.1.2 
│ │   └── has-flag@1.0.0 
│ ├─┬ through2@2.0.1 
│ │ └── xtend@4.0.1 
│ └── vinyl-sourcemaps-apply@0.2.1 
├─┬ gulp-babel@6.1.2 
│ ├── object-assign@4.0.1 
│ └── replace-ext@0.0.1 
├─┬ gulp-cache@0.4.2 
│ ├── bluebird@3.3.1 
│ ├─┬ cache-swap@0.2.3 
│ │ └── object-assign@4.0.1 
│ ├── object-assign@4.0.1 
│ ├─┬ object.omit@2.0.0 
│ │ ├─┬ for-own@0.1.3 
│ │ │ └── for-in@0.1.4 
│ │ └── is-extendable@0.1.1 
│ ├── object.pick@1.1.1 
│ ├─┬ readable-stream@2.0.5 
│ │ ├── core-util-is@1.0.2 
│ │ ├── isarray@0.0.1 
│ │ ├── process-nextick-args@1.0.6 
│ │ ├── string_decoder@0.10.31 
│ │ └── util-deprecate@1.0.2 
│ ├── try-json-parse@0.1.1 
│ └─┬ vinyl@1.1.1 
│   ├── clone@1.0.2 
│   └── clone-stats@0.0.1 
├─┬ gulp-cssnano@2.1.1 
│ ├─┬ cssnano@3.5.2 
│ │ ├── decamelize@1.1.2 
│ │ ├── defined@1.0.0 
│ │ ├── indexes-of@1.0.1 
│ │ ├── object-assign@4.0.1 
│ │ ├─┬ postcss-calc@5.2.0 
│ │ │ ├── postcss-message-helpers@2.0.0 
│ │ │ └─┬ reduce-css-calc@1.2.0 
│ │ │   ├── balanced-match@0.1.0 
│ │ │   └─┬ reduce-function-call@1.0.1 
│ │ │     └── balanced-match@0.1.0 
│ │ ├─┬ postcss-colormin@2.1.8 
│ │ │ └─┬ colormin@1.0.7 
│ │ │   ├─┬ color@0.11.1 
│ │ │   │ ├── color-convert@0.5.3 
│ │ │   │ └─┬ color-string@0.3.0 
│ │ │   │   └── color-name@1.1.1 
│ │ │   └── css-color-names@0.0.3 
│ │ ├── postcss-convert-values@2.3.4 
│ │ ├── postcss-discard-comments@2.0.4 
│ │ ├── postcss-discard-duplicates@2.0.1 
│ │ ├── postcss-discard-empty@2.0.1 
│ │ ├─┬ postcss-discard-unused@2.2.1 
│ │ │ ├── flatten@1.0.2 
│ │ │ └── uniqs@2.0.0 
│ │ ├─┬ postcss-filter-plugins@2.0.0 
│ │ │ └── uniqid@1.0.0 
│ │ ├─┬ postcss-merge-idents@2.1.5 
│ │ │ └── has-own@1.0.0 
│ │ ├── postcss-merge-longhand@2.0.1 
│ │ ├── postcss-merge-rules@2.0.5 
│ │ ├─┬ postcss-minify-font-values@1.0.2 
│ │ │ └── object-assign@4.0.1 
│ │ ├── postcss-minify-gradients@1.0.1 
│ │ ├─┬ postcss-minify-params@1.0.4 
│ │ │ └── alphanum-sort@1.0.2 
│ │ ├─┬ postcss-minify-selectors@2.0.4 
│ │ │ └─┬ postcss-selector-parser@1.3.1 
│ │ │   └── uniq@1.0.1 
│ │ ├── postcss-normalize-charset@1.1.0 
│ │ ├─┬ postcss-normalize-url@3.0.7 
│ │ │ ├── is-absolute-url@2.0.0 
│ │ │ └─┬ normalize-url@1.4.0 
│ │ │   ├── object-assign@4.0.1 
│ │ │   ├── prepend-http@1.0.3 
│ │ │   ├── query-string@3.0.0 
│ │ │   └─┬ sort-keys@1.1.1 
│ │ │     └── is-plain-obj@1.1.0 
│ │ ├── postcss-ordered-values@2.1.0 
│ │ ├── postcss-reduce-idents@2.3.0 
│ │ ├── postcss-reduce-transforms@1.0.3 
│ │ ├─┬ postcss-svgo@2.1.2 
│ │ │ ├── is-svg@1.1.1 
│ │ │ └─┬ svgo@0.6.1 
│ │ │   ├─┬ coa@1.0.1 
│ │ │   │ └── q@1.4.1 
│ │ │   ├── colors@1.1.2 
│ │ │   ├─┬ csso@1.4.4 
│ │ │   │ └── clap@1.0.10 
│ │ │   ├── sax@1.1.5 
│ │ │   └── whet.extend@0.9.9 
│ │ ├── postcss-unique-selectors@2.0.2 
│ │ └── postcss-zindex@2.0.1 
│ └── object-assign@4.0.1 
├─┬ gulp-eslint@0.13.2 
│ ├─┬ bufferstreams@1.0.1 
│ │ └── readable-stream@1.1.13 
│ └─┬ eslint@0.22.1 
│   ├─┬ concat-stream@1.5.1 
│   │ └── typedarray@0.0.6 
│   ├─┬ doctrine@0.6.4 
│   │ └── esutils@1.1.6 
│   ├─┬ escope@3.4.0 
│   │ ├─┬ es6-map@0.1.3 
│   │ │ ├── d@0.1.1 
│   │ │ ├── es5-ext@0.10.11 
│   │ │ ├── es6-iterator@2.0.0 
│   │ │ ├── es6-set@0.1.4 
│   │ │ ├── es6-symbol@3.0.2 
│   │ │ └── event-emitter@0.3.4 
│   │ ├── es6-weak-map@2.0.1 
│   │ ├─┬ esrecurse@3.1.1 
│   │ │ └── estraverse@3.1.0 
│   │ └── estraverse@4.1.1 
│   ├── espree@2.2.5 
│   ├── estraverse@2.0.0 
│   ├── estraverse-fb@1.3.1 
│   ├── globals@6.4.1 
│   ├─┬ inquirer@0.8.5 
│   │ ├── ansi-regex@1.1.1 
│   │ ├── cli-width@1.1.1 
│   │ ├── figures@1.4.0 
│   │ ├─┬ readline2@0.1.1 
│   │ │ ├── mute-stream@0.0.4 
│   │ │ └─┬ strip-ansi@2.0.1 
│   │ │   └── ansi-regex@1.1.1 
│   │ └── rx@2.5.3 
│   ├─┬ is-my-json-valid@2.12.4 
│   │ ├── generate-function@2.0.0 
│   │ ├─┬ generate-object-property@1.2.0 
│   │ │ └── is-property@1.0.2 
│   │ └── jsonpointer@2.0.0 
│   ├─┬ js-yaml@3.4.6 
│   │ ├─┬ argparse@1.0.6 
│   │ │ └── sprintf-js@1.0.3 
│   │ ├── esprima@2.7.2 
│   │ └── inherit@2.2.3 
│   ├── object-assign@2.1.1 
│   ├─┬ optionator@0.5.0 
│   │ ├── deep-is@0.1.3 
│   │ ├── fast-levenshtein@1.0.7 
│   │ ├── levn@0.2.5 
│   │ ├── prelude-ls@1.1.2 
│   │ ├── type-check@0.3.2 
│   │ └── wordwrap@0.0.3 
│   ├── text-table@0.2.0 
│   └── xml-escape@1.0.0 
├─┬ gulp-htmlmin@1.3.0 
│ ├── bufferstreams@1.1.0 
│ ├─┬ html-minifier@1.1.1 
│ │ ├─┬ change-case@2.3.1 
│ │ │ ├── camel-case@1.2.2 
│ │ │ ├── constant-case@1.1.2 
│ │ │ ├── dot-case@1.1.2 
│ │ │ ├── is-lower-case@1.1.3 
│ │ │ ├── is-upper-case@1.1.2 
│ │ │ ├── lower-case@1.1.3 
│ │ │ ├── lower-case-first@1.0.2 
│ │ │ ├── param-case@1.1.2 
│ │ │ ├── pascal-case@1.1.2 
│ │ │ ├── path-case@1.1.2 
│ │ │ ├── sentence-case@1.1.3 
│ │ │ ├── snake-case@1.1.2 
│ │ │ ├── swap-case@1.1.2 
│ │ │ ├── title-case@1.1.2 
│ │ │ ├── upper-case@1.1.3 
│ │ │ └── upper-case-first@1.1.2 
│ │ ├─┬ clean-css@3.4.9 
│ │ │ ├── commander@2.8.1 
│ │ │ └── source-map@0.4.4 
│ │ ├─┬ cli@0.11.1 
│ │ │ ├── exit@0.1.2 
│ │ │ └── glob@5.0.15 
│ │ └── relateurl@0.2.6 
│ ├── object-assign@4.0.1 
│ └── tryit@1.0.2 
├─┬ gulp-if@1.2.5 
│ ├─┬ gulp-match@0.2.1 
│ │ └─┬ minimatch@1.0.0 
│ │   ├── lru-cache@2.7.3 
│ │   └── sigmund@1.0.1 
│ ├─┬ ternary-stream@1.2.3 
│ │ ├─┬ duplexer2@0.0.2 
│ │ │ └── readable-stream@1.1.13 
│ │ ├── fork-stream@0.0.4 
│ │ ├─┬ merge-stream@0.1.8 
│ │ │ └─┬ through2@0.6.5 
│ │ │   └── readable-stream@1.0.33 
│ │ └─┬ through2@0.6.5 
│ │   └── readable-stream@1.0.33 
│ └─┬ through2@0.6.5 
│   └── readable-stream@1.0.33 
├─┬ gulp-imagemin@2.4.0 
│ ├─┬ imagemin@4.0.0 
│ │ ├─┬ buffer-to-vinyl@1.1.0 
│ │ │ ├── file-type@3.7.0 
│ │ │ ├── uuid@2.0.1 
│ │ │ └── vinyl@1.1.1 
│ │ ├─┬ imagemin-gifsicle@4.2.0 
│ │ │ ├─┬ gifsicle@3.0.3 
│ │ │ │ ├─┬ bin-build@2.2.0 
│ │ │ │ │ ├── archive-type@3.2.0 
│ │ │ │ │ ├─┬ decompress@3.0.0 
│ │ │ │ │ │ ├─┬ decompress-tar@3.1.0 
│ │ │ │ │ │ │ ├── is-tar@1.0.0 
│ │ │ │ │ │ │ ├── object-assign@2.1.1 
│ │ │ │ │ │ │ ├─┬ strip-dirs@1.1.1 
│ │ │ │ │ │ │ │ ├── is-natural-number@2.0.0 
│ │ │ │ │ │ │ │ └── sum-up@1.0.2 
│ │ │ │ │ │ │ ├─┬ tar-stream@1.3.2 
│ │ │ │ │ │ │ │ └── end-of-stream@1.1.0 
│ │ │ │ │ │ │ ├─┬ through2@0.6.5 
│ │ │ │ │ │ │ │ └── readable-stream@1.0.33 
│ │ │ │ │ │ │ └─┬ vinyl@0.4.6 
│ │ │ │ │ │ │   └── clone@0.2.0 
│ │ │ │ │ │ ├─┬ decompress-tarbz2@3.1.0 
│ │ │ │ │ │ │ ├── is-bzip2@1.0.0 
│ │ │ │ │ │ │ ├── object-assign@2.1.1 
│ │ │ │ │ │ │ ├─┬ seek-bzip@1.0.5 
│ │ │ │ │ │ │ │ └── commander@2.8.1 
│ │ │ │ │ │ │ ├─┬ through2@0.6.5 
│ │ │ │ │ │ │ │ └── readable-stream@1.0.33 
│ │ │ │ │ │ │ └─┬ vinyl@0.4.6 
│ │ │ │ │ │ │   └── clone@0.2.0 
│ │ │ │ │ │ ├─┬ decompress-targz@3.1.0 
│ │ │ │ │ │ │ ├── is-gzip@1.0.0 
│ │ │ │ │ │ │ ├── object-assign@2.1.1 
│ │ │ │ │ │ │ ├─┬ through2@0.6.5 
│ │ │ │ │ │ │ │ └── readable-stream@1.0.33 
│ │ │ │ │ │ │ └─┬ vinyl@0.4.6 
│ │ │ │ │ │ │   └── clone@0.2.0 
│ │ │ │ │ │ ├─┬ decompress-unzip@3.4.0 
│ │ │ │ │ │ │ ├── is-zip@1.0.0 
│ │ │ │ │ │ │ ├── stat-mode@0.2.1 
│ │ │ │ │ │ │ ├── vinyl@1.1.1 
│ │ │ │ │ │ │ └─┬ yauzl@2.4.1 
│ │ │ │ │ │ │   └─┬ fd-slicer@1.0.1 
│ │ │ │ │ │ │     └── pend@1.2.0 
│ │ │ │ │ │ ├─┬ vinyl-assign@1.2.1 
│ │ │ │ │ │ │ └── object-assign@4.0.1 
│ │ │ │ │ │ └─┬ vinyl-fs@2.3.1 
│ │ │ │ │ │   ├─┬ glob-stream@5.3.1 
│ │ │ │ │ │   │ ├── glob@5.0.15 
│ │ │ │ │ │   │ ├── micromatch@2.3.7 
│ │ │ │ │ │   │ ├── ordered-read-streams@0.3.0 
│ │ │ │ │ │   │ ├─┬ through2@0.6.5 
│ │ │ │ │ │   │ │ └── readable-stream@1.0.33 
│ │ │ │ │ │   │ └── unique-stream@2.2.1 
│ │ │ │ │ │   ├── merge-stream@1.0.0 
│ │ │ │ │ │   ├── object-assign@4.0.1 
│ │ │ │ │ │   ├── strip-bom@2.0.0 
│ │ │ │ │ │   └── vinyl@1.1.1 
│ │ │ │ │ ├─┬ download@4.4.3 
│ │ │ │ │ │ ├─┬ caw@1.2.0 
│ │ │ │ │ │ │ ├─┬ get-proxy@1.0.1 
│ │ │ │ │ │ │ │ └─┬ rc@0.5.5 
│ │ │ │ │ │ │ │   ├── deep-extend@0.2.11 
│ │ │ │ │ │ │ │   ├── minimist@0.0.10 
│ │ │ │ │ │ │ │   └── strip-json-comments@0.1.3 
│ │ │ │ │ │ │ └── is-obj@1.0.0 
│ │ │ │ │ │ ├─┬ filenamify@1.2.0 
│ │ │ │ │ │ │ ├── filename-reserved-regex@1.0.0 
│ │ │ │ │ │ │ ├── strip-outer@1.0.0 
│ │ │ │ │ │ │ └── trim-repeated@1.0.0 
│ │ │ │ │ │ ├─┬ got@5.4.1 
│ │ │ │ │ │ │ ├─┬ create-error-class@2.0.1 
│ │ │ │ │ │ │ │ └── capture-stack-trace@1.0.0 
│ │ │ │ │ │ │ ├── duplexer2@0.1.4 
│ │ │ │ │ │ │ ├── is-redirect@1.0.0 
│ │ │ │ │ │ │ ├── is-retry-allowed@1.0.0 
│ │ │ │ │ │ │ ├── lowercase-keys@1.0.0 
│ │ │ │ │ │ │ ├── node-status-codes@1.0.0 
│ │ │ │ │ │ │ ├── object-assign@4.0.1 
│ │ │ │ │ │ │ ├─┬ parse-json@2.2.0 
│ │ │ │ │ │ │ │ └─┬ error-ex@1.3.0 
│ │ │ │ │ │ │ │   └── is-arrayish@0.2.1 
│ │ │ │ │ │ │ ├── timed-out@2.0.0 
│ │ │ │ │ │ │ ├── unzip-response@1.0.0 
│ │ │ │ │ │ │ └── url-parse-lax@1.0.0 
│ │ │ │ │ │ ├── gulp-decompress@1.2.0 
│ │ │ │ │ │ ├── gulp-rename@1.2.2 
│ │ │ │ │ │ ├── is-url@1.2.1 
│ │ │ │ │ │ ├── object-assign@4.0.1 
│ │ │ │ │ │ ├── read-all-stream@3.1.0 
│ │ │ │ │ │ ├── vinyl@1.1.1 
│ │ │ │ │ │ ├─┬ vinyl-fs@2.3.1 
│ │ │ │ │ │ │ ├─┬ glob-stream@5.3.1 
│ │ │ │ │ │ │ │ ├── glob@5.0.15 
│ │ │ │ │ │ │ │ ├── micromatch@2.3.7 
│ │ │ │ │ │ │ │ ├── ordered-read-streams@0.3.0 
│ │ │ │ │ │ │ │ ├─┬ through2@0.6.5 
│ │ │ │ │ │ │ │ │ └── readable-stream@1.0.33 
│ │ │ │ │ │ │ │ └── unique-stream@2.2.1 
│ │ │ │ │ │ │ ├── merge-stream@1.0.0 
│ │ │ │ │ │ │ └── strip-bom@2.0.0 
│ │ │ │ │ │ └─┬ ware@1.3.0 
│ │ │ │ │ │   └─┬ wrap-fn@0.1.5 
│ │ │ │ │ │     └── co@3.1.0 
│ │ │ │ │ ├─┬ exec-series@1.0.2 
│ │ │ │ │ │ └── async-each-series@1.1.0 
│ │ │ │ │ └─┬ url-regex@3.1.0 
│ │ │ │ │   └── ip-regex@1.0.3 
│ │ │ │ ├─┬ bin-wrapper@3.0.2 
│ │ │ │ │ ├─┬ bin-check@2.0.0 
│ │ │ │ │ │ └── executable@1.1.0 
│ │ │ │ │ ├─┬ bin-version-check@2.1.0 
│ │ │ │ │ │ ├─┬ bin-version@1.0.4 
│ │ │ │ │ │ │ └─┬ find-versions@1.2.1 
│ │ │ │ │ │ │   ├─┬ meow@3.7.0 
│ │ │ │ │ │ │   │ ├─┬ camelcase-keys@2.0.0 
│ │ │ │ │ │ │   │ │ └── camelcase@2.1.0 
│ │ │ │ │ │ │   │ ├─┬ loud-rejection@1.2.1 
│ │ │ │ │ │ │   │ │ ├── array-find-index@1.0.1 
│ │ │ │ │ │ │   │ │ └── signal-exit@2.1.2 
│ │ │ │ │ │ │   │ ├─┬ normalize-package-data@2.3.5 
│ │ │ │ │ │ │   │ │ ├── hosted-git-info@2.1.4 
│ │ │ │ │ │ │   │ │ ├─┬ 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.0 
│ │ │ │ │ │ │   │ │   └─┬ spdx-expression-parse@1.0.2 
│ │ │ │ │ │ │   │ │     └── spdx-exceptions@1.0.4 
│ │ │ │ │ │ │   │ ├── object-assign@4.0.1 
│ │ │ │ │ │ │   │ ├─┬ read-pkg-up@1.0.1 
│ │ │ │ │ │ │   │ │ ├─┬ find-up@1.1.0 
│ │ │ │ │ │ │   │ │ │ └── path-exists@2.1.0 
│ │ │ │ │ │ │   │ │ └─┬ read-pkg@1.1.0 
│ │ │ │ │ │ │   │ │   ├─┬ load-json-file@1.1.0 
│ │ │ │ │ │ │   │ │   │ ├── pify@2.3.0 
│ │ │ │ │ │ │   │ │   │ └── strip-bom@2.0.0 
│ │ │ │ │ │ │   │ │   └── path-type@1.1.0 
│ │ │ │ │ │ │   │ ├─┬ redent@1.0.0 
│ │ │ │ │ │ │   │ │ ├─┬ indent-string@2.1.0 
│ │ │ │ │ │ │   │ │ │ └── repeating@2.0.0 
│ │ │ │ │ │ │   │ │ └── strip-indent@1.0.1 
│ │ │ │ │ │ │   │ └── trim-newlines@1.0.0 
│ │ │ │ │ │ │   └── semver-regex@1.0.0 
│ │ │ │ │ │ └─┬ semver-truncate@1.1.0 
│ │ │ │ │ │   └── semver@5.1.0 
│ │ │ │ │ ├── lazy-req@1.1.0 
│ │ │ │ │ └── os-filter-obj@1.0.3 
│ │ │ │ └─┬ logalot@2.1.0 
│ │ │ │   └─┬ squeak@1.3.0 
│ │ │ │     ├── console-stream@0.1.1 
│ │ │ │     └─┬ lpad-align@1.1.0 
│ │ │ │       └── lpad@2.0.1 
│ │ │ ├── is-gif@1.0.0 
│ │ │ └─┬ through2@0.6.5 
│ │ │   └── readable-stream@1.0.33 
│ │ ├─┬ imagemin-jpegtran@4.3.2 
│ │ │ ├── is-jpg@1.0.0 
│ │ │ └── jpegtran-bin@3.0.6 
│ │ ├─┬ imagemin-optipng@4.3.0 
│ │ │ ├─┬ exec-buffer@2.0.1 
│ │ │ │ └── tempfile@1.1.1 
│ │ │ ├── is-png@1.0.0 
│ │ │ ├── optipng-bin@3.1.0 
│ │ │ └─┬ through2@0.6.5 
│ │ │   └── readable-stream@1.0.33 
│ │ ├── imagemin-svgo@4.2.1 
│ │ ├── optional@0.1.3 
│ │ ├─┬ stream-combiner2@1.1.1 
│ │ │ └── duplexer2@0.1.4 
│ │ └─┬ vinyl-fs@2.3.1 
│ │   ├─┬ glob-stream@5.3.1 
│ │   │ ├── glob@5.0.15 
│ │   │ ├── micromatch@2.3.7 
│ │   │ ├── ordered-read-streams@0.3.0 
│ │   │ ├─┬ through2@0.6.5 
│ │   │ │ └── readable-stream@1.0.33 
│ │   │ └── unique-stream@2.2.1 
│ │   ├── merge-stream@1.0.0 
│ │   ├── object-assign@4.0.1 
│ │   ├── strip-bom@2.0.0 
│ │   └── vinyl@1.1.1 
│ ├── object-assign@4.0.1 
│ ├─┬ plur@2.1.2 
│ │ └── irregular-plurals@1.1.0 
│ ├─┬ pretty-bytes@2.0.1 
│ │ ├── get-stdin@4.0.1 
│ │ └── number-is-nan@1.0.0 
│ └── through2-concurrent@1.1.0 
├─┬ gulp-load-plugins@0.10.0 
│ ├─┬ findup-sync@0.2.1 
│ │ └── glob@4.3.5 
│ └── multimatch@2.0.0 
├── gulp-plumber@1.1.0 
├─┬ gulp-sass@2.2.0 
│ ├─┬ node-sass@3.4.2 
│ │ ├── async-foreach@0.1.3 
│ │ ├─┬ cross-spawn@2.1.5 
│ │ │ ├─┬ cross-spawn-async@2.1.8 
│ │ │ │ └─┬ lru-cache@4.0.0 
│ │ │ │   ├── pseudomap@1.0.2 
│ │ │ │   └── yallist@2.0.0 
│ │ │ └─┬ spawn-sync@1.0.15 
│ │ │   └── os-shim@0.1.3 
│ │ ├─┬ gaze@0.5.2 
│ │ │ └─┬ globule@0.1.0 
│ │ │   ├─┬ glob@3.1.21 
│ │ │   │ ├── graceful-fs@1.2.3 
│ │ │   │ └── inherits@1.0.2 
│ │ │   ├── lodash@1.0.2 
│ │ │   └── minimatch@0.2.14 
│ │ ├── glob@5.0.15 
│ │ ├── nan@2.2.0 
│ │ ├─┬ node-gyp@3.3.0 
│ │ │ ├── fstream@1.0.8 
│ │ │ ├─┬ glob@4.5.3 
│ │ │ │ └── minimatch@2.0.10 
│ │ │ ├── minimatch@1.0.0 
│ │ │ ├─┬ npmlog@2.0.2 
│ │ │ │ ├── ansi@0.3.1 
│ │ │ │ ├─┬ are-we-there-yet@1.0.6 
│ │ │ │ │ └── delegates@1.0.0 
│ │ │ │ └─┬ gauge@1.2.5 
│ │ │ │   ├── has-unicode@2.0.0 
│ │ │ │   ├─┬ lodash.pad@3.3.0 
│ │ │ │   │ └── lodash.repeat@3.2.0 
│ │ │ │   ├─┬ lodash.padleft@3.1.1 
│ │ │ │   │ └── lodash._createpadding@3.6.1 
│ │ │ │   └── lodash.padright@3.1.1 
│ │ │ ├── osenv@0.1.3 
│ │ │ ├─┬ path-array@1.0.1 
│ │ │ │ └── array-index@1.0.0 
│ │ │ ├─┬ tar@2.2.1 
│ │ │ │ └── block-stream@0.0.8 
│ │ │ └─┬ which@1.2.4 
│ │ │   ├─┬ is-absolute@0.1.7 
│ │ │   │ └── is-relative@0.1.3 
│ │ │   └── isexe@1.1.2 
│ │ ├─┬ npmconf@2.1.2 
│ │ │ ├─┬ config-chain@1.1.10 
│ │ │ │ └── proto-list@1.2.4 
│ │ │ ├── ini@1.3.4 
│ │ │ └── uid-number@0.0.5 
│ │ └─┬ sass-graph@2.1.1 
│ │   ├── glob@6.0.4 
│ │   └── lodash@4.5.0 
│ └── object-assign@4.0.1 
├─┬ gulp-size@1.3.0 
│ └─┬ gzip-size@1.0.0 
│   └─┬ browserify-zlib@0.1.4 
│     └── pako@0.2.8 
├─┬ gulp-sourcemaps@1.6.0 
│ ├── graceful-fs@4.1.3 
│ ├─┬ strip-bom@2.0.0 
│ │ └── is-utf8@0.2.1 
│ └── vinyl@1.1.1 
├─┬ gulp-uglify@1.5.2 
│ ├── deap@1.0.0 
│ ├─┬ fancy-log@1.2.0 
│ │ └── time-stamp@1.0.0 
│ ├── isobject@2.0.0 
│ ├─┬ uglify-js@2.6.1 
│ │ ├── async@0.2.10 
│ │ ├── uglify-to-browserify@1.0.2 
│ │ └─┬ yargs@3.10.0 
│ │   ├─┬ cliui@2.1.0 
│ │   │ ├─┬ center-align@0.1.3 
│ │   │ │ ├── align-text@0.1.4 
│ │   │ │ └── lazy-cache@1.0.3 
│ │   │ ├── right-align@0.1.3 
│ │   │ └── wordwrap@0.0.2 
│ │   └── window-size@0.1.0 
│ └── uglify-save-license@0.4.1 
├─┬ gulp-useref@3.0.5 
│ ├─┬ event-stream@3.3.2 
│ │ ├── 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 
│ ├─┬ glob@6.0.4 
│ │ ├─┬ inflight@1.0.4 
│ │ │ └── wrappy@1.0.1 
│ │ └── once@1.3.3 
│ ├─┬ gulp-concat@2.6.0 
│ │ ├── concat-with-sourcemaps@1.0.4 
│ │ └─┬ through2@0.6.5 
│ │   └── readable-stream@1.0.33 
│ ├─┬ gulp-if@2.0.0 
│ │ ├─┬ gulp-match@1.0.0 
│ │ │ └── minimatch@3.0.0 
│ │ ├─┬ ternary-stream@2.0.0 
│ │ │ └── through2@2.0.1 
│ │ └── through2@2.0.1 
│ ├─┬ is-relative-url@1.0.0 
│ │ └── is-absolute-url@1.0.0 
│ ├─┬ through2@0.6.5 
│ │ └── readable-stream@1.0.33 
│ ├── useref@1.1.2 
│ └─┬ vinyl-fs@2.3.1 
│   ├─┬ duplexify@3.4.2 
│   │ └── end-of-stream@1.0.0 
│   ├─┬ glob-stream@5.3.1 
│   │ ├── glob@5.0.15 
│   │ ├── micromatch@2.3.7 
│   │ ├─┬ ordered-read-streams@0.3.0 
│   │ │ └── is-stream@1.0.1 
│   │ ├─┬ to-absolute-glob@0.1.1 
│   │ │ └── extend-shallow@2.0.1 
│   │ └─┬ unique-stream@2.2.1 
│   │   └─┬ json-stable-stringify@1.0.1 
│   │     └── jsonify@0.0.0 
│   ├── is-valid-glob@0.3.0 
│   ├── lazystream@1.0.0 
│   ├── merge-stream@1.0.0 
│   ├── object-assign@4.0.1 
│   ├── strip-bom@2.0.0 
│   ├─┬ strip-bom-stream@1.0.0 
│   │ └── strip-bom@2.0.0 
│   ├── through2@2.0.1 
│   ├── through2-filter@2.0.0 
│   └── vinyl@1.1.1 
├─┬ main-bower-files@2.11.1 
│ ├── extend@2.0.1 
│ ├── strip-json-comments@1.0.4 
│ └─┬ vinyl-fs@1.0.0 
│   ├─┬ glob-stream@4.1.1 
│   │ ├── glob@4.5.3 
│   │ └── unique-stream@2.2.1 
│   ├── glob-watcher@0.0.8 
│   ├── graceful-fs@3.0.8 
│   ├── object-assign@2.1.1 
│   ├─┬ through2@0.6.5 
│   │ └── readable-stream@1.0.33 
│   └─┬ vinyl@0.4.6 
│     └── clone@0.2.0 
└─┬ wiredep@2.2.2 
  ├─┬ bower-config@0.5.2 
  │ ├── graceful-fs@2.0.3 
  │ ├── mout@0.9.1 
  │ ├─┬ optimist@0.6.1 
  │ │ └── minimist@0.0.10 
  │ └── osenv@0.0.3 
  ├─┬ chalk@0.5.1 
  │ ├── ansi-styles@1.1.0 
  │ ├─┬ has-ansi@0.1.0 
  │ │ └── ansi-regex@0.2.1 
  │ ├── strip-ansi@0.3.0 
  │ └── supports-color@0.2.0 
  ├── glob@4.5.3 
  ├── lodash@2.4.2 
  ├── propprop@0.3.0 
  └─┬ through2@0.6.5 
    └── readable-stream@1.0.33 

will-i-am:yo-stellar William$

What command just caused all of the above response ? These two:

will-i-am:~ William$ cd yo-stellar/ will-i-am:yo-stellar William$ yo webapp

What are the deprecateds and the errors and notices ?
What are the pre-build test passed successfully showing !

First, the successes, then the others:


> node-sass@3.4.2 install /Users/William/yo-stellar/node_modules/node-sass
> node scripts/install.js

Binary downloaded and installed at /Users/William/yo-stellar/node_modules/node-sass/vendor/darwin-x64-47/binding.node

> spawn-sync@1.0.15 postinstall /Users/William/yo-stellar/node_modules/spawn-sync
> node postinstall


> node-sass@3.4.2 postinstall /Users/William/yo-stellar/node_modules/node-sass
> node scripts/build.js

` /Users/William/yo-stellar/node_modules/node-sass/vendor/darwin-x64-47/binding.node ` exists. 
 testing binary.
Binary is fine; exiting.

> optipng-bin@3.1.0 postinstall /Users/William/yo-stellar/node_modules/optipng-bin
> node lib/install.js

  ✔ optipng pre-build test passed successfully

> jpegtran-bin@3.0.6 postinstall /Users/William/yo-stellar/node_modules/jpegtran-bin
> node lib/install.js

  ✔ jpegtran pre-build test passed successfully

> gifsicle@3.0.3 postinstall /Users/William/yo-stellar/node_modules/gifsicle
> node lib/install.js

  ✔ gifsicle pre-build test passed successfully

Now the others:


I'm all done. Running npm install & bower install for you to install the required dependencies. If this fails, try running the command yourself.


npm WARN deprecated graceful-fs@3.0.8: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN deprecated lodash@1.0.2: lodash@ < 3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0.
npm WARN deprecated graceful-fs@1.2.3: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN deprecated npmconf@2.1.2: this package has been reintegrated into npm and is now out of date with respect to npm
npm WARN deprecated lodash.padleft@3.1.1: This package has been renamed. Use lodash.padstart@^4.0.0.
npm WARN deprecated lodash.padright@3.1.1: This package has been renamed. Use lodash.padend@^4.0.0.
npm WARN deprecated graceful-fs@2.0.3: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN deprecated lodash@2.4.2: lodash@< 3 .0.0 is no longer maintained. Upgrade to lodash@^4.0.0
npm WARN prefer global node-gyp@3.3.0 should be installed with -g

> fsevents@1.0.7 install /Users/William/yo-stellar/node_modules/fsevents
> node-pre-gyp install --fallback-to-build

[fsevents] Success: "/Users/William/yo-stellar/node_modules/fsevents/lib/binding/Release/node-v47-darwin-x64/fse.node" is installed via remote

> bufferutil@1.2.1 install /Users/William/yo-stellar/node_modules/bufferutil
> node-gyp rebuild

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/bufferutil.node

> utf-8-validate@1.2.1 install /Users/William/yo-stellar/node_modules/utf-8-validate
> node-gyp rebuild

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/validation.node

> node-sass@3.4.2 install /Users/William/yo-stellar/node_modules/node-sass
> node scripts/install.js

Binary downloaded and installed at /Users/William/yo-stellar/node_modules/node-sass/vendor/darwin-x64-47/binding.node

My response to above so far is, I haven't see anything not work so far.
If there is a problem, it will show up with next command:

gulp serve

Let us see what happens:


will-i-am:yo-stellar William$ gulp serve
-bash: gulp: command not found
will-i-am:yo-stellar William$ 

Our gulp server command is not working on 20162017.
We take it from the top : Somehow, I need to get a clue on
why gulp server returns nothing of value. What is causing this ?
From the top again, first with the Configuration and Ignore Files.
Immediately I see I did not redo the commands at Getting Started.

I did install gulp using these exact commands:

npm install --global gulp-cli
npm install --save-dev gulp : Install gulp in the project devDependencies.

Then, after all is installed and working ..
I am studying how to host my new creation on Heroku ..
I read the Heroku way on this matter of installing such a tool as node,
from Getting Started with Node.js on Heroku, and I found they recommend a better way at
Heroku's Best Practices for Node.js Development
under the Use a smart .npmrc section.
Read this page now, if you plan on hosting with Heroku. This is what Heroku recommends:

Use a smart .npmrc

By default, npm doesn’t save installed dependencies to package.json
(and you should always track your dependencies!).

If you use the --save flag to auto-update package.json, npm installs
the packages with a leading carat (^), putting your modules at risk
of drifting to different versions. This is fine for module development,
but not good for apps, where you want to keep consistent dependencies
between all your environments.

One solution is installing packages like this:

npm install foobar --save --save-exact

Even better, you can set these options in ~/.npmrc to update your defaults:

$ npm config set save=true

$ npm config set save-exact=true

cat ~/.npmrc

Now, npm install foobar will automatically add foobar to package.json and
your dependencies won’t drift between installs!
Use a smart .npmrc

Do we have the ~/.npmrc file ?

ls -aux

We do not and so we run:

touch ~/.npmrc

Now we run the commands given by Heroku:

npm config set save=true

npm config set save-exact=true

To see your npm configuration settings, run:

cat ~/.npmrc

To see the file contents, run:

open -e ~/.npmrc

Your First Heroku Node Program !

Heroku is not kidding when they say, "This tutorial will have you deploying a Node.js app in minutes."
I recommend you open that page and follow their steps;
Here is how I followed the steps:

heroku login

Now prepare a simple application that can be deployed.
Execute the following commands to clone the sample application:

git clone https://github.com/heroku/node-js-getting-started.git

cd node-js-getting-started

You now have a functioning git repository that contains a simple application
as well as a package.json file, which is used by Node’s dependency manager.

Create an app on Heroku, which prepares Heroku to receive your source code.
I am choosing to name our app, so we give that name to the heroku create command:

heroku create stellarworks

Notice well your results, they will be similar to this Heroku example:

$ heroku create
Creating sharp-rain-871... done, stack is cedar-14
http://sharp-rain-871.herokuapp.com/ | https://git.heroku.com/sharp-rain-871.git
Git remote heroku added

When you create an app, a git remote (called heroku) is also created and associated
with your local git repository.

Heroku generates a random name (in this case sharp-rain-871) for your app, or you can
pass a parameter to specify your own app name.

Your generated Procfile looks like this:

web: node index.js

Now deploy your code:

git push heroku master

The application is now deployed. Ensure that at least one instance of the app is running:

heroku ps:scale web=1

Now open your new Node app:

heroku open

If you have many apps on Heroku, you will be asked to identify the app.
We named our app, stellarworks so we run:

heroku open --app stellarworks

Our new app's address is https://stellarworks.herokuapp.com/.

Unbelieveably simple, Thank You, Heroku.

Tail your logs on your app:

heroku logs --tail

Scale your number of dynos running to zero:

heroku ps:scale web=0

Access your site, and you will see an error message:

heroku open

Scale it up again:

heroku ps:scale web=1

From Heroku ..

Declare app dependencies
Heroku recognizes an app as Node.js by the existence of
a package.json file in the root directory. For your own
apps, you can create one by running npm init --yes.

The demo app you deployed already has a package.json.

Our does have this file and it currently looks like this:


{
  "name": "node-js-getting-started",
  "version": "0.1.5",
  "description": "A sample Node.js app using Express 4",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "ejs": "2.3.3",
    "express": "4.13.3"
  },
  "engines": {
    "node": "0.12.7"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/heroku/node-js-getting-started"
  },
  "keywords": [
    "node",
    "heroku",
    "express"
  ],
  "license": "MIT"
}

The Heroku instructions continue:

The package.json file determines both the version of Node.js that will
be used to run your application on Heroku, as well as the dependencies
that should be installed with your application. When an app is deployed,
Heroku reads this file and installs the appropriate node version together
with the dependencies using the npm install command.

Run this command in your local directory to install the dependencies,
preparing your system for running the app locally:

npm install


will-i-am:node-js-getting-started William$ npm install
node-js-getting-started@0.1.5 /Users/William/heroku-node-starter/node-js-getting-started
├── ejs@2.3.3 
└─┬ express@4.13.3 
  ├─┬ accepts@1.2.13 
  │ ├─┬ mime-types@2.1.10 
  │ │ └── mime-db@1.22.0 
  │ └── negotiator@0.5.3 
  ├── array-flatten@1.1.1 
  ├── content-disposition@0.5.0 
  ├── content-type@1.0.1 
  ├── cookie@0.1.3 
  ├── cookie-signature@1.0.6 
  ├─┬ debug@2.2.0 
  │ └── ms@0.7.1 
  ├── depd@1.0.1 
  ├── escape-html@1.0.2 
  ├── etag@1.7.0 
  ├─┬ finalhandler@0.4.0 
  │ └── unpipe@1.0.0 
  ├── fresh@0.3.0 
  ├── merge-descriptors@1.0.0 
  ├── methods@1.1.2 
  ├─┬ on-finished@2.3.0 
  │ └── ee-first@1.1.1 
  ├── parseurl@1.3.1 
  ├── path-to-regexp@0.1.7 
  ├─┬ proxy-addr@1.0.10 
  │ ├── forwarded@0.1.0 
  │ └── ipaddr.js@1.0.5 
  ├── qs@4.0.0 
  ├── range-parser@1.0.3 
  ├─┬ send@0.13.0 
  │ ├── destroy@1.0.3 
  │ ├─┬ http-errors@1.3.1 
  │ │ └── inherits@2.0.1 
  │ ├── mime@1.3.4 
  │ └── statuses@1.2.1 
  ├─┬ serve-static@1.10.2 
  │ ├── escape-html@1.0.3 
  │ └─┬ send@0.13.1 
  │   ├── depd@1.1.0 
  │   └── destroy@1.0.4 
  ├─┬ type-is@1.6.11 
  │ └── media-typer@0.3.0 
  ├── utils-merge@1.0.0 
  └── vary@1.0.1 

will-i-am:node-js-getting-started William$ 

Heroku again ..

Once dependencies are installed, you will be ready to run your app locally.

Start your application locally using the heroku local command,
which was installed as part of the Toolbelt:

heroku local web


will-i-am:node-js-getting-started William$ heroku local web
Downloading forego-0.16.1 to /Users/William/.heroku... done
forego | starting web.1 on port 5000
web.1  | Node app is running on port 5000

Just like Heroku, heroku local examines the Procfile to determine what to run.

Open http://localhost:5000 with your web browser.
You should see your app running locally.

To stop the app from running locally, in the CLI, press Ctrl+C to exit.

Heroku has done well, putting these instructions together for the beginner,
such as myself. Are you ready to add something to your app and then push
your local changes ?

Go to Heroku's next step, Push Local Changes, and follow through to the end.

Remaining steps in the Heroku tutorial:

Push local changes
Provision add-ons
Start a console
Define config vars
Provision a database
**Next steps

TODO: place this somewhere appropriate
when you see the term, semver, think Semantic Versioning Specification semver

Do we need a gulp.js file ?
From the commands section, we have this:

Dated info: 20160217 : This file addition is no longer in the instructions of 20160214 !
old TODO: Create file : undone as yet 20160216

Create a gulpfile.js at the root of your project: var gulp = require('gulp');

gulp.task('default', function() {
// place code for your default task here
});

Now you can scaffold your very own web app:

mkdir my-webapp
cd my-webapp
yo gulp-webapp : on 20160215 this becamse yo webapp

To start developing, run:

gulp serve : fires up a local web server, opens http://localhost:9000

On a hunch, I run:

npm info


will-i-am:~ William$ npm info
 
{ name: 'nvm',
  description: 'Install and managing different versions of node and installing local versions into repos.',
  'dist-tags': { latest: '0.0.3' },
  versions: [ '0.0.3' ],
  maintainers: [ 'brianloveswords < brian@nyhacker.org >' ],
  time: 
   { modified: '2015-08-27T01:01:34.085Z',
     created: '2012-07-16T16:35:20.586Z',
     '0.0.0': '2012-07-16T16:35:21.056Z',
     '0.0.1': '2012-07-16T18:14:33.941Z',
     '0.0.2': '2013-11-22T15:08:01.851Z',
     '0.0.3': '2014-02-25T15:15:45.587Z' },
  author: 'Brian J. Brennan (@brianloveswords)',
  repository: { type: 'git', url: 'git://github.com/brianloveswords/nvm.git' },
  users: 
   { pgte: true,
     netroy: true,
     msoliva: true,
     lukeatdesignworks: true,
     trycatch9264: true,
     guidoschmidt: true,
     waded: true,
     yeahoffline: true,
     sericaia: true,
     jota: true,
     nickleefly: true,
     'cjr--': true,
     tchcxp: true,
     guananddu: true,
     alexkval: true,
     runningtalus: true,
     jakemiller: true,
     maninbucket: true,
     joanmi: true,
     'klap-webdevelopment': true,
     ridermansb: true,
     stany: true,
     ericwbailey: true,
     mihaii: true,
     kruemelo: true,
     oleang: true,
     ubi: true,
     sternelee: true,
     yupmin: true,
     dosevader: true,
     aaalsubaie: true,
     diroru: true },
  homepage: 'https://github.com/brianloveswords/nvm',
  keywords: [ 'local', 'node' ],
  bugs: { url: 'https://github.com/brianloveswords/nvm/issues' },
  license: 'http://wtfpl.org/',
  readmeFilename: 'README.md',
  version: '0.0.3',
  dependencies: { mkdirp: '~0.3.3' },
  devDependencies: {},
  bin: { nvm: './bin/nvm' },
  scripts: { test: 'echo "Error: no test specified" && exit 1' },
  dist: 
   { shasum: '1f39d2dfd16bf661534a3f7145134f4bbbef6da4',
     tarball: 'http://registry.npmjs.org/nvm/-/nvm-0.0.3.tgz' },
  deprecated: 'This is NOT the correct nvm. Visit http://nvm.sh and use the curl command to install it.',
  directories: {} }

will-i-am:~ William$ npm info

The npm info command caused the above results.
I notice the deprecated message:

deprecated: 'This is NOT the correct nvm.
Visit http://nvm.sh and use the curl command to install it.',

So, I make sure I am in the $HOME directory, I run:

nvm use 5.6

cd ~/

ls -aux

mkdir yo-stellar

cd yo-stellar

gulp serve

Success, in beautiful living color not shown here:


will-i-am: William$ cd yo-stellar

will-i-am:yo-stellar William$ gulp serve
[15:58:18] Requiring external module babel-register
[15:58:19] Using gulpfile ~/yo-stellar/gulpfile.babel.js
[15:58:19] Starting 'styles'...
[15:58:19] Starting 'scripts'...
[15:58:19] Starting 'fonts'...
[15:58:19] Finished 'fonts' after 13 ms
[15:58:19] Finished 'styles' after 299 ms
[15:58:19] Finished 'scripts' after 121 ms
[15:58:19] Starting 'serve'...
[15:58:19] Finished 'serve' after 43 ms
[BS] Access URLs:
 ------------------------------------
       Local: http://localhost:9000
    External: http://192.168.0.2:9000
 ------------------------------------
          UI: http://localhost:3001
 UI External: http://192.168.0.2:3001
 ------------------------------------
[BS] Serving files from: .tmp
[BS] Serving files from: app

I open four browsers, all addresses work:


------------------------------------
       Local: http://localhost:9000
    External: http://192.168.0.2:9000
 ------------------------------------
          UI: http://localhost:3001
 UI External: http://192.168.0.2:3001

We are again up and running, and now ..
I begin developing and because I am new to this ..
I will be using the scaffolded app to begin learning.

First thing I will be doing is changing the links in the code so they work.

We are done, I am done, you are done, good webapp building to all.

This is now our new start key: gulp serve per the yeoman/generator-webapp reference.

LATE NOTE: We have built different apps now, using different tools.
DO NOT MISS THIS TOOL: Your First Heroku Node Program !
The beauty of this Heroku tool is it gives you everything you need, and
it is crystal clear. When you are done, your app is set up and in sync
with git and Heroku.

Miscellaneous:

TODO: 20160211 : Is this link of any value in this Gist creationix/nvm/nvm.sh ?

TODO: 20160224 : answer the below and then replace it back between the two - - - commands

gulp serve:dist : to preview the production-ready build to check if everything is ok

      • currently line 245 ^^

Need to open another Terminal, and this didn't work.
While gulp serve is running:

bower install --save jquery

TODO: 20160218 : Why did it not work and ..
QUESTION: Can jQuery be installed into this project by brew, brew-cask or npm ?
Answer : 2016021? :


gulp tasks : search this command without backticks to see our first result of running it

The work continues this day.

20160310 : fixed broken link
20160226 : continue editing so clarity and simplicity shine
20160225 : still removing unneeded material, still simplifying and removing duplicates
20150224 : moving all stellar-sdk material to its own Gist, not yet released
20150224 : continuing the removal of go, grunt and gb material as not needed
20160221 : Created our app on Heroku. We are done here.
: When the building an app gist is ready, I will post it here.
20160220 : Learning to build, configure, change and host an app with the Heroku Node Tutorial.
20160219 : Writing the gist about building the app with Node.js and friends.
20160219 : Learning to build an app with my own code changes here and there.
20160219 : Learning to build an app with gulp and their materials.
20160218 : Assembling all remove / uninstall directions to completely remove configs and packages.
20160218 : Instructions complete, now cleaning up presentation, removing duplications, notes, etc.
20160217 : Caught the fact generator-gulp-webapp was changed to generator-webapp 2 days ago.
20160216 : Pushed to respository for editing, verifying of First Programs
20160215 : A final run through of installs and uninstalls in order, with descriptions.
20160214 : Sorting it all out, moving stellar-sdk and beyond into its own Gist.
20160213 : Putting it all in order, adding go tools : removed 20160224
20160212 : Adding Go-Stripe and Stripe-Go references : removed 20160224
20160211 : Adjusting the flow and verifying the veracity of all commands and instructions.
20160210 : Began adjusting Install Instructions to include Homebrew-Cask.
20160209 : Homebrew updated, upgraded and Homebrew-Cask installed.
20160209 : Discovered Homebrew Cask, keeps all binaries/systems current.
20160209 : Adding to collection of daily use commands, Tests and Testings.
20160209 : Added go instructions.
20160209 : Finish the [Installation Commands]*#commands) and do a clean up.
20160208 : We run the Installation Commands.
20160207 : nvm Installation Instructions are complete.
20160207 : Installation Commands distilled from Instructions, placed at top of page.
20160207 : Adding and Distilling out commands to run, noting comparisons with ruby-stellar-sdk
20160206 : This Gist established this day by This Gister

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment