ng: command not found – when install angular-cli on OSX

Angular2 requires a bunch of files to setup and things to configure. To avoid unnecessary typing and copying of files the angular guys created angular-cli which allows bootstrapping a new Angular2 application with just one line:

ng new my-fancy-app

When installing the angular-cli package using:

npm install -g angular-cli

I encountered a strange error message that stated:

ng: command not found

There is this discussion on Github but all comments there did not solve the issue for me. Finally I noticed that the ng-command is not linked in /usr/local/bin. The fix for my problem was to add it via:

ln -s /usr/local/Cellar/node/6.3.1/lib/node_modules/angular-cli/bin/ng /usr/local/bin/ng

gulp-nodemon: Object # has no method ‘spawnSync’

gulp-nodemon is a nice tool if you want to restart your node process when your source code changes. It is very easy to use. Just take this snippet from their sample code and modify the script to your needs.

gulp.task('develop', function () {
  nodemon({ script: 'server.js'
          , ext: 'html js'
          , ignore: ['ignored.js']
          , tasks: ['lint'] })
    .on('restart', function () {
      console.log('restarted!')
    })
})

Just fire up “gulp develop” and the server will start.

You might receive the following error: Object #<Object> has no method ‘spawnSync’

In this case check your node version (e.g. mine was 0.10.26). As stated in the release notes (here) you need to use Node.js version 0.12 in order to use it. You either use an older version of gulp-nodemon or upgrade your Node.js installation to the correct version.

Object # has no method ‘flash’ undefined TypeError: Object # has no method ‘flash’ at allFailed

Recently I was playing around with Passport.js in an Express application. I created a login route that logged like that:

passport.authenticate('local', {
    successRedirect: '/app',
    failureRedirect: '/login',
    failureFlash: false
});

Everything worked fine and I could login to my application but I also wanted to show a message when the login fails. So I changed my route to:

passport.authenticate('local', {
    successRedirect: '/app',
    failureRedirect: '/login',
    failureFlash: true
});

Instead of redirect back to the login page I got this exception:

Object #<IncomingMessage> has no method 'flash' undefined TypeError: Object #<IncomingMessage> has no method 'flash' at allFailed

The solution for this is simple. I forgot to include the connect-flash module that provides the flash method. So I changed my startup code:

var flash = require('connect-flash');
app.use(cookieParser());
app.use(flash());

Even so the solution is quite simple and somehow obvious. It doesn’t seem right that changing a property to true introduces the need for a new middleware.