Grunt fails on initial run after npm install

That folder isn’t there.

In roots I have:

assets
lang
lib
node_modules
templates

npm install should be grabbing Bootstrap and placing it in that directory. Please paste the output from npm install.

npm http GET https://registry.npmjs.org/grunt
npm http GET https://registry.npmjs.org/grunt-contrib-jshint
npm http GET https://registry.npmjs.org/grunt-autoprefixer
npm http GET https://registry.npmjs.org/grunt-contrib-less
npm http GET https://registry.npmjs.org/grunt-contrib-concat
npm http GET https://registry.npmjs.org/grunt-contrib-uglify
npm http GET https://registry.npmjs.org/grunt-contrib-watch
npm http GET https://registry.npmjs.org/grunt-modernizr
npm http GET https://registry.npmjs.org/grunt-wp-assets
npm http GET https://registry.npmjs.org/load-grunt-tasks
npm http GET https://registry.npmjs.org/time-grunt
npm http GET https://registry.npmjs.org/bower
npm http 304 https://registry.npmjs.org/grunt-contrib-concat
npm http 304 https://registry.npmjs.org/grunt-contrib-uglify
npm http 304 https://registry.npmjs.org/grunt-contrib-watch
npm http 304 https://registry.npmjs.org/grunt-contrib-less
npm http 304 https://registry.npmjs.org/grunt-modernizr
npm http 304 https://registry.npmjs.org/load-grunt-tasks
npm http 304 https://registry.npmjs.org/time-grunt
npm http 304 https://registry.npmjs.org/bower
npm http 304 https://registry.npmjs.org/grunt
npm http 304 https://registry.npmjs.org/grunt-wp-assets
npm http 304 https://registry.npmjs.org/grunt-autoprefixer
npm http 304 https://registry.npmjs.org/grunt-contrib-jshint
npm http GET https://registry.npmjs.org/findup-sync
npm http GET https://registry.npmjs.org/multimatch
npm http GET https://registry.npmjs.org/chalk
npm http GET https://registry.npmjs.org/text-table
npm http GET https://registry.npmjs.org/hooker
npm http GET https://registry.npmjs.org/pretty-ms
npm http GET https://registry.npmjs.org/date-time
npm http 304 https://registry.npmjs.org/findup-sync
npm http 304 https://registry.npmjs.org/pretty-ms
npm http 304 https://registry.npmjs.org/chalk
npm http 304 https://registry.npmjs.org/date-time
npm http 304 https://registry.npmjs.org/text-table
npm http 304 https://registry.npmjs.org/hooker
npm http GET https://registry.npmjs.org/maxmin
npm http GET https://registry.npmjs.org/lodash
npm http GET https://registry.npmjs.org/async
npm http GET https://registry.npmjs.org/less
npm http GET https://registry.npmjs.org/autoprefixer
npm http GET https://registry.npmjs.org/diff
npm http 304 https://registry.npmjs.org/multimatch
npm http 304 https://registry.npmjs.org/lodash
npm http GET https://registry.npmjs.org/jshint
npm http 304 https://registry.npmjs.org/diff
npm http 304 https://registry.npmjs.org/less
npm http 304 https://registry.npmjs.org/async
npm http GET https://registry.npmjs.org/uglify-js
npm http 304 https://registry.npmjs.org/maxmin
npm http 304 https://registry.npmjs.org/autoprefixer
npm http 304 https://registry.npmjs.org/uglify-js
npm http GET https://registry.npmjs.org/gaze
npm http GET https://registry.npmjs.org/tiny-lr-fork
npm http 304 https://registry.npmjs.org/jshint
npm http 304 https://registry.npmjs.org/gaze
npm http 304 https://registry.npmjs.org/tiny-lr-fork
npm http GET https://registry.npmjs.org/strip-ansi
npm http GET https://registry.npmjs.org/has-color
npm http GET https://registry.npmjs.org/ansi-styles
npm http GET https://registry.npmjs.org/minimatch
npm http GET https://registry.npmjs.org/array-differ
npm http GET https://registry.npmjs.org/array-union
npm http 304 https://registry.npmjs.org/strip-ansi
npm http 304 https://registry.npmjs.org/minimatch
npm http 304 https://registry.npmjs.org/has-color
npm http 304 https://registry.npmjs.org/ansi-styles
npm http 304 https://registry.npmjs.org/array-union
npm http GET https://registry.npmjs.org/gzip-size
npm http GET https://registry.npmjs.org/pretty-bytes
npm http 304 https://registry.npmjs.org/array-differ
npm http 304 https://registry.npmjs.org/pretty-bytes
npm http 304 https://registry.npmjs.org/gzip-size
npm http GET https://registry.npmjs.org/glob
npm http 304 https://registry.npmjs.org/glob
npm http GET https://registry.npmjs.org/array-uniq
npm http GET https://registry.npmjs.org/eventemitter2
npm http GET https://registry.npmjs.org/iconv-lite
npm http GET https://registry.npmjs.org/nopt
npm http GET https://registry.npmjs.org/rimraf
npm http GET https://registry.npmjs.org/underscore.string
npm http GET https://registry.npmjs.org/which
npm http GET https://registry.npmjs.org/js-yaml
npm http GET https://registry.npmjs.org/exit
npm http GET https://registry.npmjs.org/getobject
npm http GET https://registry.npmjs.org/grunt-legacy-util
npm http GET https://registry.npmjs.org/grunt-legacy-log
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/colors
npm http GET https://registry.npmjs.org/dateformat
npm http GET https://registry.npmjs.org/concat-stream
npm http GET https://registry.npmjs.org/zlib-browserify
npm http 304 https://registry.npmjs.org/array-uniq
npm http 304 https://registry.npmjs.org/nopt
npm http 304 https://registry.npmjs.org/underscore.string
npm http 304 https://registry.npmjs.org/which
npm http 304 https://registry.npmjs.org/eventemitter2
npm http 304 https://registry.npmjs.org/exit
npm http 304 https://registry.npmjs.org/js-yaml
npm http 304 https://registry.npmjs.org/rimraf
npm http 304 https://registry.npmjs.org/grunt-legacy-util
npm http 304 https://registry.npmjs.org/getobject
npm http 304 https://registry.npmjs.org/grunt-legacy-log
npm http 304 https://registry.npmjs.org/colors
npm http 304 https://registry.npmjs.org/coffee-script
npm http 304 https://registry.npmjs.org/iconv-lite
npm http 304 https://registry.npmjs.org/dateformat
npm http 304 https://registry.npmjs.org/concat-stream
npm http 304 https://registry.npmjs.org/zlib-browserify
npm http GET https://registry.npmjs.org/globule
npm http 304 https://registry.npmjs.org/globule
npm http GET https://registry.npmjs.org/lru-cache
npm http GET https://registry.npmjs.org/sigmund
npm http GET https://registry.npmjs.org/abbrev
npm http 304 https://registry.npmjs.org/sigmund
npm http 304 https://registry.npmjs.org/abbrev
npm http GET https://registry.npmjs.org/noptify
npm http GET https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/faye-websocket
npm http GET https://registry.npmjs.org/tape
npm http GET https://registry.npmjs.org/inherits
npm http GET https://registry.npmjs.org/typedarray
npm http GET https://registry.npmjs.org/readable-stream
npm http 304 https://registry.npmjs.org/lru-cache
npm http 304 https://registry.npmjs.org/qs
npm http 304 https://registry.npmjs.org/inherits
npm http 304 https://registry.npmjs.org/tape
npm http 304 https://registry.npmjs.org/typedarray
npm http 304 https://registry.npmjs.org/readable-stream
npm http 304 https://registry.npmjs.org/debug
npm http 304 https://registry.npmjs.org/faye-websocket
npm http 304 https://registry.npmjs.org/noptify
npm http GET https://registry.npmjs.org/promised-io
npm http GET https://registry.npmjs.org/request
npm http GET https://registry.npmjs.org/graceful-fs
npm http 304 https://registry.npmjs.org/graceful-fs
npm http 304 https://registry.npmjs.org/promised-io
npm http 304 https://registry.npmjs.org/request
npm http GET https://registry.npmjs.org/postcss
npm http GET https://registry.npmjs.org/caniuse-db
npm http GET https://registry.npmjs.org/fs-extra
npm http 304 https://registry.npmjs.org/fs-extra
npm http 304 https://registry.npmjs.org/postcss
npm http GET https://registry.npmjs.org/core-util-is
npm http GET https://registry.npmjs.org/isarray
npm http 304 https://registry.npmjs.org/caniuse-db
npm http GET https://registry.npmjs.org/string_decoder
npm http 304 https://registry.npmjs.org/isarray
npm http 304 https://registry.npmjs.org/string_decoder
npm http 304 https://registry.npmjs.org/core-util-is
npm http GET https://registry.npmjs.org/argparse
npm http GET https://registry.npmjs.org/esprima
npm http 304 https://registry.npmjs.org/argparse
npm http 304 https://registry.npmjs.org/esprima
npm http GET https://registry.npmjs.org/defined
npm http GET https://registry.npmjs.org/jsonify
npm http GET https://registry.npmjs.org/deep-equal
npm http 304 https://registry.npmjs.org/defined
npm http 304 https://registry.npmjs.org/deep-equal
npm http 304 https://registry.npmjs.org/jsonify
npm http GET https://registry.npmjs.org/jsonfile
npm http GET https://registry.npmjs.org/ncp
npm http GET https://registry.npmjs.org/mkdirp
npm http 304 https://registry.npmjs.org/ncp
npm http 304 https://registry.npmjs.org/mkdirp
npm http 304 https://registry.npmjs.org/jsonfile
npm http GET https://registry.npmjs.org/optimist
npm http GET https://registry.npmjs.org/uglify-to-browserify
npm http GET https://registry.npmjs.org/source-map
npm http 304 https://registry.npmjs.org/uglify-to-browserify
npm http 304 https://registry.npmjs.org/optimist
npm http GET https://registry.npmjs.org/source-map
npm http GET https://registry.npmjs.org/base64-js
npm http 304 https://registry.npmjs.org/source-map
npm http 304 https://registry.npmjs.org/base64-js
npm http 304 https://registry.npmjs.org/source-map
npm http GET https://registry.npmjs.org/minimist
npm http 304 https://registry.npmjs.org/minimist
npm http GET https://registry.npmjs.org/underscore
npm http 304 https://registry.npmjs.org/underscore
npm http GET https://registry.npmjs.org/forever-agent
npm http GET https://registry.npmjs.org/tunnel-agent
npm http GET https://registry.npmjs.org/http-signature
npm http GET https://registry.npmjs.org/hawk
npm http GET https://registry.npmjs.org/aws-sign
npm http GET https://registry.npmjs.org/oauth-sign
npm http GET https://registry.npmjs.org/cookie-jar
npm http GET https://registry.npmjs.org/node-uuid
npm http GET https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/form-data
npm http GET https://registry.npmjs.org/json-stringify-safe
npm http 304 https://registry.npmjs.org/http-signature
npm http 304 https://registry.npmjs.org/forever-agent
npm http 304 https://registry.npmjs.org/oauth-sign
npm http GET https://registry.npmjs.org/wordwrap
npm http 304 https://registry.npmjs.org/tunnel-agent
npm http 304 https://registry.npmjs.org/node-uuid
npm http 304 https://registry.npmjs.org/mime
npm http 304 https://registry.npmjs.org/form-data
npm http 304 https://registry.npmjs.org/json-stringify-safe
npm http 304 https://registry.npmjs.org/wordwrap
npm http 304 https://registry.npmjs.org/hawk
npm http 304 https://registry.npmjs.org/cookie-jar
npm http 304 https://registry.npmjs.org/aws-sign
npm http GET https://registry.npmjs.org/combined-stream
npm http 304 https://registry.npmjs.org/combined-stream
npm http GET https://registry.npmjs.org/assert-plus
npm http GET https://registry.npmjs.org/asn1
npm http GET https://registry.npmjs.org/ctype
npm http 304 https://registry.npmjs.org/ctype
npm http 304 https://registry.npmjs.org/assert-plus
npm http 304 https://registry.npmjs.org/asn1
npm http GET https://registry.npmjs.org/amdefine
npm http 304 https://registry.npmjs.org/amdefine
npm http GET https://registry.npmjs.org/delayed-stream
npm http 304 https://registry.npmjs.org/delayed-stream
npm http GET https://registry.npmjs.org/archy
npm http GET https://registry.npmjs.org/bower-config
npm http GET https://registry.npmjs.org/bower-endpoint-parser
npm http GET https://registry.npmjs.org/bower-json
npm http GET https://registry.npmjs.org/bower-logger
npm http GET https://registry.npmjs.org/bower-registry-client
npm http GET https://registry.npmjs.org/cardinal
npm http GET https://registry.npmjs.org/chmodr
npm http GET https://registry.npmjs.org/decompress-zip
npm http GET https://registry.npmjs.org/fstream
npm http GET https://registry.npmjs.org/fstream-ignore
npm http GET https://registry.npmjs.org/handlebars
npm http GET https://registry.npmjs.org/inquirer
npm http GET https://registry.npmjs.org/insight
npm http GET https://registry.npmjs.org/is-root
npm http GET https://registry.npmjs.org/junk
npm http GET https://registry.npmjs.org/lockfile
npm http GET https://registry.npmjs.org/mout
npm http 304 https://registry.npmjs.org/bower-config
npm http 304 https://registry.npmjs.org/archy
npm http GET https://registry.npmjs.org/opn
npm http GET https://registry.npmjs.org/osenv
npm http GET https://registry.npmjs.org/p-throttler
npm http GET https://registry.npmjs.org/promptly
npm http GET https://registry.npmjs.org/q
npm http 304 https://registry.npmjs.org/bower-logger
npm http 304 https://registry.npmjs.org/bower-json
npm http 304 https://registry.npmjs.org/bower-registry-client
npm http GET https://registry.npmjs.org/request-progress
npm http GET https://registry.npmjs.org/retry
npm http GET https://registry.npmjs.org/semver
npm http GET https://registry.npmjs.org/shell-quote
npm http GET https://registry.npmjs.org/stringify-object
npm http GET https://registry.npmjs.org/tar
npm http GET https://registry.npmjs.org/tmp
npm http GET https://registry.npmjs.org/update-notifier
npm http 304 https://registry.npmjs.org/cardinal
npm http 304 https://registry.npmjs.org/chmodr
npm http 304 https://registry.npmjs.org/bower-endpoint-parser
npm http 304 https://registry.npmjs.org/decompress-zip
npm http 304 https://registry.npmjs.org/fstream
npm http 304 https://registry.npmjs.org/fstream-ignore
npm http 304 https://registry.npmjs.org/handlebars
npm http 304 https://registry.npmjs.org/inquirer
npm http 304 https://registry.npmjs.org/insight
npm http 304 https://registry.npmjs.org/is-root
npm http 304 https://registry.npmjs.org/junk
npm http 304 https://registry.npmjs.org/lockfile
npm http 304 https://registry.npmjs.org/mout
npm http 304 https://registry.npmjs.org/opn
npm http 304 https://registry.npmjs.org/osenv
npm http 304 https://registry.npmjs.org/p-throttler
npm http 304 https://registry.npmjs.org/promptly
npm http 304 https://registry.npmjs.org/q
npm http 304 https://registry.npmjs.org/request-progress
npm http 304 https://registry.npmjs.org/retry
npm http 304 https://registry.npmjs.org/semver
npm http 304 https://registry.npmjs.org/shell-quote
npm http 304 https://registry.npmjs.org/stringify-object
npm http 304 https://registry.npmjs.org/tar
npm http 304 https://registry.npmjs.org/tmp
npm http 304 https://registry.npmjs.org/update-notifier
npm http GET https://registry.npmjs.org/configstore
npm http GET https://registry.npmjs.org/object-assign
npm http GET https://registry.npmjs.org/lodash.debounce
npm http GET https://registry.npmjs.org/configstore
npm http 304 https://registry.npmjs.org/configstore
npm http 304 https://registry.npmjs.org/configstore
npm http 304 https://registry.npmjs.org/object-assign
npm http 304 https://registry.npmjs.org/lodash.debounce
npm http GET https://registry.npmjs.org/throttleit
npm http GET https://registry.npmjs.org/hoek
npm http GET https://registry.npmjs.org/boom
npm http GET https://registry.npmjs.org/cryptiles
npm http GET https://registry.npmjs.org/sntp
npm http 304 https://registry.npmjs.org/throttleit
npm http 304 https://registry.npmjs.org/cryptiles
npm http 304 https://registry.npmjs.org/hoek
npm http 304 https://registry.npmjs.org/sntp
npm http GET https://registry.npmjs.org/read
npm http 304 https://registry.npmjs.org/boom
npm http 304 https://registry.npmjs.org/read
npm http GET https://registry.npmjs.org/array-filter
npm http GET https://registry.npmjs.org/array-reduce
npm http GET https://registry.npmjs.org/array-map
npm http 304 https://registry.npmjs.org/array-map
npm http GET https://registry.npmjs.org/uuid
npm http 304 https://registry.npmjs.org/uuid
npm http 304 https://registry.npmjs.org/array-filter
npm http 304 https://registry.npmjs.org/array-reduce
npm http GET https://registry.npmjs.org/intersect
npm http GET https://registry.npmjs.org/deep-extend
npm http GET https://registry.npmjs.org/touch
npm http GET https://registry.npmjs.org/mkpath
npm http GET https://registry.npmjs.org/binary
npm http GET https://registry.npmjs.org/lodash.now
npm http GET https://registry.npmjs.org/lodash.isfunction
npm http GET https://registry.npmjs.org/lodash.isobject
npm http 304 https://registry.npmjs.org/mkpath
npm http 304 https://registry.npmjs.org/touch
npm http 304 https://registry.npmjs.org/lodash.now
npm http 304 https://registry.npmjs.org/lodash.isfunction
npm http 304 https://registry.npmjs.org/lodash.isobject
npm http 304 https://registry.npmjs.org/deep-extend
npm http 304 https://registry.npmjs.org/intersect
npm http 304 https://registry.npmjs.org/binary
npm http GET https://registry.npmjs.org/through
npm http GET https://registry.npmjs.org/cli-color
npm http GET https://registry.npmjs.org/mute-stream
npm http GET https://registry.npmjs.org/readline2
npm http 304 https://registry.npmjs.org/through
npm http GET https://registry.npmjs.org/mute-stream
npm http 304 https://registry.npmjs.org/mute-stream
npm http 304 https://registry.npmjs.org/cli-color
npm http 304 https://registry.npmjs.org/readline2
npm http GET https://registry.npmjs.org/aws-sign2
npm http GET https://registry.npmjs.org/tough-cookie
npm http 304 https://registry.npmjs.org/mute-stream
npm http 304 https://registry.npmjs.org/aws-sign2
npm http 304 https://registry.npmjs.org/tough-cookie
npm http GET https://registry.npmjs.org/lodash._isnative
npm http GET https://registry.npmjs.org/lodash._objecttypes
npm http 304 https://registry.npmjs.org/lodash._objecttypes
npm http 304 https://registry.npmjs.org/lodash._isnative
npm http GET https://registry.npmjs.org/once
npm http 304 https://registry.npmjs.org/once
npm http GET https://registry.npmjs.org/request-replay
npm http 304 https://registry.npmjs.org/request-replay
npm http GET https://registry.npmjs.org/redeyed
npm http GET https://registry.npmjs.org/ansicolors
npm http 304 https://registry.npmjs.org/ansicolors
npm http 304 https://registry.npmjs.org/redeyed
npm http GET https://registry.npmjs.org/block-stream
npm http 304 https://registry.npmjs.org/block-stream
npm http GET https://registry.npmjs.org/memoizee
npm http GET https://registry.npmjs.org/timers-ext
npm http GET https://registry.npmjs.org/d
npm http GET https://registry.npmjs.org/es5-ext
npm http 304 https://registry.npmjs.org/timers-ext
npm http 304 https://registry.npmjs.org/d
npm http 304 https://registry.npmjs.org/memoizee
npm http 304 https://registry.npmjs.org/es5-ext
npm http GET https://registry.npmjs.org/chainsaw
npm http GET https://registry.npmjs.org/buffers
npm http 304 https://registry.npmjs.org/buffers
npm http 304 https://registry.npmjs.org/chainsaw
npm http GET https://registry.npmjs.org/next-tick
npm http 304 https://registry.npmjs.org/next-tick
npm http GET https://registry.npmjs.org/traverse
npm http 304 https://registry.npmjs.org/traverse
npm http GET https://registry.npmjs.org/punycode
npm http 304 https://registry.npmjs.org/punycode
npm http GET https://registry.npmjs.org/event-emitter
npm http GET https://registry.npmjs.org/event-emitter
npm http GET https://registry.npmjs.org/lru-queue
npm http 304 https://registry.npmjs.org/event-emitter
npm http 304 https://registry.npmjs.org/event-emitter
npm http GET https://registry.npmjs.org/minimatch
npm http GET https://registry.npmjs.org/cli
npm http GET https://registry.npmjs.org/htmlparser2
npm http GET https://registry.npmjs.org/console-browserify
npm http GET https://registry.npmjs.org/strip-json-comments
npm http GET https://registry.npmjs.org/shelljs
npm http 304 https://registry.npmjs.org/lru-queue
npm http 304 https://registry.npmjs.org/console-browserify
npm http 304 https://registry.npmjs.org/shelljs
npm http 304 https://registry.npmjs.org/strip-json-comments
npm http 304 https://registry.npmjs.org/minimatch
npm http 304 https://registry.npmjs.org/cli
npm http 304 https://registry.npmjs.org/htmlparser2
npm http GET https://registry.npmjs.org/date-now
npm http 304 https://registry.npmjs.org/date-now
npm http GET https://registry.npmjs.org/uglify-js
npm http 304 https://registry.npmjs.org/uglify-js
npm http GET https://registry.npmjs.org/async
npm http GET https://registry.npmjs.org/underscore.string
npm http 304 https://registry.npmjs.org/underscore.string
npm http 304 https://registry.npmjs.org/async
npm http GET https://registry.npmjs.org/domhandler
npm http GET https://registry.npmjs.org/domutils
npm http GET https://registry.npmjs.org/domelementtype
npm http GET https://registry.npmjs.org/entities
npm http 304 https://registry.npmjs.org/domelementtype
npm http 304 https://registry.npmjs.org/domhandler
npm http 304 https://registry.npmjs.org/entities
npm http 304 https://registry.npmjs.org/domutils
npm http GET https://registry.npmjs.org/inherits
npm http 304 https://registry.npmjs.org/inherits
npm http GET https://registry.npmjs.org/es6-iterator
npm http GET https://registry.npmjs.org/es6-symbol
npm http 304 https://registry.npmjs.org/es6-symbol
npm http 304 https://registry.npmjs.org/es6-iterator
npm http GET https://registry.npmjs.org/graceful-fs
npm http GET https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/request
npm http GET https://registry.npmjs.org/mkdirp
npm http GET https://registry.npmjs.org/source-map
npm http GET https://registry.npmjs.org/clean-css
npm http 304 https://registry.npmjs.org/mkdirp
npm http 304 https://registry.npmjs.org/source-map
npm http 200 https://registry.npmjs.org/clean-css
npm http 304 https://registry.npmjs.org/graceful-fs
npm http 304 https://registry.npmjs.org/mime
npm http 304 https://registry.npmjs.org/request
npm http GET https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/json-stringify-safe
npm http GET https://registry.npmjs.org/node-uuid
npm http GET https://registry.npmjs.org/forever-agent
npm http GET https://registry.npmjs.org/form-data
npm http GET https://registry.npmjs.org/tunnel-agent
npm http GET https://registry.npmjs.org/http-signature
npm http GET https://registry.npmjs.org/oauth-sign
npm http GET https://registry.npmjs.org/hawk
npm http 304 https://registry.npmjs.org/forever-agent
npm http 304 https://registry.npmjs.org/qs
npm http 304 https://registry.npmjs.org/tunnel-agent
npm http 304 https://registry.npmjs.org/form-data
npm http 304 https://registry.npmjs.org/http-signature
npm http 304 https://registry.npmjs.org/oauth-sign
npm http 304 https://registry.npmjs.org/hawk
npm http 304 https://registry.npmjs.org/json-stringify-safe
npm http 304 https://registry.npmjs.org/node-uuid
npm http GET https://registry.npmjs.org/commander
npm http 304 https://registry.npmjs.org/commander
npm http GET https://registry.npmjs.org/assert-plus
npm http GET https://registry.npmjs.org/asn1
npm http GET https://registry.npmjs.org/ctype
npm http GET https://registry.npmjs.org/delayed-stream
npm http GET https://registry.npmjs.org/amdefine
npm http 304 https://registry.npmjs.org/assert-plus
npm http 304 https://registry.npmjs.org/ctype
npm http 304 https://registry.npmjs.org/delayed-stream
npm http 304 https://registry.npmjs.org/amdefine
npm http 304 https://registry.npmjs.org/asn1
npm WARN cannot run in wd roots@7.0.0 bower install (wd=/srv/www/findhvacdealer.com/wp-content/themes/roots)
time-grunt@0.3.2 node_modules/time-grunt
├── date-time@0.1.1
├── pretty-ms@0.1.0
├── text-table@0.2.0
├── chalk@0.4.0 (has-color@0.1.7, ansi-styles@1.0.0, strip-ansi@0.1.1)
└── hooker@0.2.3

grunt-contrib-concat@0.4.0 node_modules/grunt-contrib-concat
└── chalk@0.4.0 (has-color@0.1.7, ansi-styles@1.0.0, strip-ansi@0.1.1)

grunt-wp-assets@0.2.6 node_modules/grunt-wp-assets
└── async@0.6.2

grunt-modernizr@0.5.2 node_modules/grunt-modernizr
├── colors@0.6.2
├── promised-io@0.3.4
├── uglify-js@1.3.3
└── request@2.27.0 (json-stringify-safe@5.0.0, forever-agent@0.5.2, aws-sign@0.3.0, qs@0.6.6, tunnel-agent@0.3.0, oauth-sign@0.3.0, cookie-jar@0.3.0, node-uuid@1.4.1, mime@1.2.11, form-data@0.1.4, http-signature@0.10.0, hawk@1.0.0)

grunt-contrib-uglify@0.5.0 node_modules/grunt-contrib-uglify
├── chalk@0.4.0 (has-color@0.1.7, ansi-styles@1.0.0, strip-ansi@0.1.1)
├── maxmin@0.1.0 (pretty-bytes@0.1.1, gzip-size@0.1.1)
├── uglify-js@2.4.15 (uglify-to-browserify@1.0.2, async@0.2.10, optimist@0.3.7, source-map@0.1.34)
└── lodash@2.4.1

grunt-autoprefixer@0.8.1 node_modules/grunt-autoprefixer
├── diff@1.0.8
├── chalk@0.4.0 (has-color@0.1.7, ansi-styles@1.0.0, strip-ansi@0.1.1)
└── autoprefixer@2.1.0 (fs-extra@0.10.0, postcss@1.0.0, caniuse-db@1.0.20140702)

grunt-contrib-jshint@0.10.0 node_modules/grunt-contrib-jshint
├── hooker@0.2.3
└── jshint@2.5.2 (strip-json-comments@0.1.3, underscore@1.6.0, console-browserify@1.1.0, exit@0.1.2, minimatch@0.3.0, shelljs@0.3.0, cli@0.6.3, htmlparser2@3.7.3)

grunt-contrib-watch@0.6.1 node_modules/grunt-contrib-watch
├── async@0.2.10
├── tiny-lr-fork@0.0.5 (debug@0.7.4, faye-websocket@0.4.4, noptify@0.0.3, qs@0.5.6)
├── gaze@0.5.1 (globule@0.1.0)
└── lodash@2.4.1

grunt@0.4.5 node_modules/grunt
├── dateformat@1.0.2-1.2.3
├── which@1.0.5
├── eventemitter2@0.4.14
├── getobject@0.1.0
├── rimraf@2.2.8
├── colors@0.6.2
├── async@0.1.22
├── grunt-legacy-util@0.2.0
├── nopt@1.0.10 (abbrev@1.0.5)
├── exit@0.1.2
├── hooker@0.2.3
├── glob@3.1.21 (inherits@1.0.0, graceful-fs@1.2.3)
├── minimatch@0.2.14 (sigmund@1.0.0, lru-cache@2.5.0)
├── lodash@0.9.2
├── coffee-script@1.3.3
├── underscore.string@2.2.1
├── iconv-lite@0.2.11
├── js-yaml@2.0.5 (esprima@1.0.4, argparse@0.1.15)
├── findup-sync@0.1.3 (glob@3.2.11, lodash@2.4.1)
└── grunt-legacy-log@0.1.1 (underscore.string@2.3.3, lodash@2.4.1)

bower@1.3.7 node_modules/bower
├── is-root@0.1.0
├── junk@0.3.0
├── stringify-object@0.2.1
├── abbrev@1.0.5
├── chmodr@0.1.0
├── which@1.0.5
├── osenv@0.1.0
├── opn@0.1.2
├── archy@0.0.2
├── lockfile@0.4.2
├── graceful-fs@3.0.2
├── rimraf@2.2.8
├── lru-cache@2.5.0
├── bower-logger@0.2.2
├── bower-endpoint-parser@0.2.2
├── chalk@0.4.0 (has-color@0.1.7, ansi-styles@1.0.0, strip-ansi@0.1.1)
├── nopt@3.0.1
├── retry@0.6.1
├── tmp@0.0.23
├── request-progress@0.3.1 (throttleit@0.0.2)
├── q@1.0.1
├── shell-quote@1.4.1 (array-filter@0.0.1, array-map@0.0.0, array-reduce@0.0.0, jsonify@0.0.0)
├── semver@2.3.1
├── p-throttler@0.0.1 (q@0.9.7)
├── promptly@0.2.0 (read@1.0.5)
├── mkdirp@0.5.0 (minimist@0.0.8)
├── bower-json@0.4.0 (intersect@0.0.3, deep-extend@0.2.10, graceful-fs@2.0.3)
├── fstream-ignore@0.0.8 (inherits@2.0.1, minimatch@0.3.0)
├── fstream@0.1.28 (inherits@2.0.1, mkdirp@0.3.5)
├── bower-config@0.5.2 (osenv@0.0.3, graceful-fs@2.0.3, optimist@0.6.1)
├── tar@0.1.20 (inherits@2.0.1, block-stream@0.0.7)
├── glob@4.0.3 (once@1.3.0, inherits@2.0.1, minimatch@0.3.0)
├── decompress-zip@0.0.8 (nopt@2.2.1, mkpath@0.1.0, touch@0.0.2, readable-stream@1.1.13-1, binary@0.3.0)
├── request@2.36.0 (json-stringify-safe@5.0.0, forever-agent@0.5.2, aws-sign2@0.5.0, qs@0.6.6, oauth-sign@0.3.0, tunnel-agent@0.4.0, node-uuid@1.4.1, mime@1.2.11, form-data@0.1.4, tough-cookie@0.12.1, http-signature@0.10.0, hawk@1.0.0)
├── update-notifier@0.1.10 (configstore@0.3.1)
├── bower-registry-client@0.2.1 (request-replay@0.2.0, lru-cache@2.3.1, graceful-fs@2.0.3, async@0.2.10, mkdirp@0.3.5, request@2.27.0)
├── handlebars@1.3.0 (optimist@0.3.7, uglify-js@2.3.6)
├── cardinal@0.4.4 (ansicolors@0.2.1, redeyed@0.4.4)
├── mout@0.9.1
├── inquirer@0.5.1 (readline2@0.1.0, through@2.3.4, mute-stream@0.0.4, async@0.8.0, cli-color@0.3.2, lodash@2.4.1)
└── insight@0.3.1 (object-assign@0.1.2, async@0.2.10, lodash.debounce@2.4.1, request@2.27.0, configstore@0.2.3, inquirer@0.4.1)

load-grunt-tasks@0.6.0 node_modules/load-grunt-tasks
├── multimatch@0.3.0 (array-differ@0.1.0, array-union@0.1.0, minimatch@0.3.0)
└── findup-sync@0.1.3 (glob@3.2.11, lodash@2.4.1)

grunt-contrib-less@0.11.3 node_modules/grunt-contrib-less
├── async@0.2.10
├── chalk@0.4.0 (has-color@0.1.7, ansi-styles@1.0.0, strip-ansi@0.1.1)
├── maxmin@0.1.0 (pretty-bytes@0.1.1, gzip-size@0.1.1)
├── lodash@2.4.1
└── less@1.7.3 (graceful-fs@2.0.3, mime@1.2.11, mkdirp@0.3.5, clean-css@2.1.8, source-map@0.1.36, request@2.34.0)

Your problem is:

npm WARN cannot run in wd roots@7.0.0 bower install (wd=/srv/www/findhvacdealer.com/wp-content/themes/roots)

Try running bower install and paste the output.

BTW, you mentioned you’re running this on a VPS so my guess is that this is a permissions issue. Roots is not designed to be built on a remote server. This particular stage you’re experiencing difficulty with is intended to be completed locally and your final development work product should then be deployed.

See this comment.

root@galaxy-one:/srv/www/findhvacdealer.com/wp-content/themes/roots# npm install
npm WARN cannot run in wd roots@7.0.0 bower install (wd=/srv/www/findhvacdealer.                 com/wp-content/themes/roots)
root@galaxy-one:/srv/www/findhvacdealer.com/wp-content/themes/roots# ^C
root@galaxy-one:/srv/www/findhvacdealer.com/wp-content/themes/roots# bower insta                 ll

    bower ESUDO         Cannot be run with sudo
    
    Additional error details:
    Since bower is a user command, there is no need to execute it with superuser per                 missions.
    If you're having permission errors when using bower without sudo, please spend a                  few minutes learning more about how your system should work and make any necess                 ary repairs.
    
    http://www.joyent.com/blog/installing-node-and-npm
    https://gist.github.com/isaacs/579814

I’ve done this with every Roots 6.x site…I setup the VPS from scratch. Debian 7.4 and I’m even signed in as root.

This bower thing is new.

I’ve done this with every Roots 6.x site

That doesn’t make it right :wink:

So did you visit those links and read through them?

I just followed the link and doc step by step until Grunt failed.

I need to be able to deploy without depending on a local MAMP environment. If I can’t do this with Roots, I guess I need to know that. It’s just so weird…every WordPress site (over 30) has been in Roots with no problems. This theme has been amazing.

*** Update ***

I’m gonna setup a MAMP install locally and try all of this again.

Ok, but you’re using Roots in an environment it is not intended for.

Anyhow, bower install is what will install Bootstrap, which is what you’re missing, which is why Grunt is not happy.

Check this out, then do bower install, then your grunt should run just fine. If not, check this out too.

  1. Deleted Wordpress and database to start from scratch

  2. Created DB and installed WordPress 3.9.1

  3. Downloaded Roots from Github as zip file. Copied to themes folder.

  4. Activated Roots and accepted the defaults

  5. Signed into Debian and ran npm install -g grunt-cli

  6. Navigated to theme root and ran npm install

  7. It failed at the Bower part, saying npm WARN cannot run in wd roots@7.0.0 bower install

  8. Installed Bower with bower install --allow-root

  9. Bower said git wasn’t installed

  10. Ran apt-get install git-core

  11. Installed bower again. The only two errors received were:

    bower invalid-meta modernizr is missing “main” entry in bower.json
    bower invalid-meta modernizr is missing “ignore” entry in bower.json

  12. Vendor folder is there in assets now

  13. Deleted the node_modules folder

  14. Ran grunt. It said grunt hasn’t been installed locally to the project.

  15. Ran npm install

  16. grunt runs now

  17. Opened assets/css/main.css and added styling

  18. site ignores the styling

  19. create assets/css/main.min.css and added styling

  20. the site accepts the styling

I didn’t touch scripts.php or any files at all on this fresh install. Still styles wouldn’t work from main.css. They only work if I create a main.min.css. Any help great appreciated…I’m completely confused with Roots 7.

Ok, looks like you got it.

But seriously, I mentioned your CSS/LESS issue at least five times up above:

…place your CSS/LESS in assets/less/main.less


You should be adding CSS/LESS to a file named assets/less/main.less


Your CSS and LESS styles belong in assets/less/main.less


There is no need to touch main.css [or main.min.css] directly at all ever, it’s a file that gets output by Grunt.


…when you added CSS to main.css you were adding styles to a file that Grunt is, by default, set to overwrite during its build process.

If something is unclear then let me know!

Hey man, I did try that - see above from four hours ago. I tried to put my styling in main.less and it didn’t work.

Unless I’m missing something. I feel like excavating my brain cavity with a round piece of gun-powder backed metal.

Thanks for sticking with me on this. I’ve left the office for the day, but I’ll be back in the AM trying the main.less thing again.

No worries, that’s quite a metaphor!

So put your custom styles in main.less and run grunt. Leave main.css alone. Grunt will compile your styles into main.css and main.min.css automatically. That’s been standard Roots workflow with Grunt for a while now (although before 7.0 main.less was app.less and the Grunt default was to compile one minified CSS file).

Good morning…I toasted my WP install and started clean again just to get the steps down without errors. Everything is working except…Roots isn’t reading the styles from main.less.

  1. Created DB and installed WordPress 3.9.1

  2. Downloaded Roots from Github as zip file. Copied to themes folder.

  3. Activated Roots and accepted the defaults

  4. Signed into Debian and ran npm install -g grunt-cli6

  5. Navigated to theme root and ran npm install

  6. It failed at the Bower part,

  7. Installed Bower with: bower install --allow-root

*If Bower says Git isn’t installed, you can install on Debian/Ubuntu with: apt-get install git-core

  1. Tried running Grunt. It ran without problems!

  2. I then added styling to main.less and ran Grunt again. Ran fine but site didn’t reflect styling.

  3. Removed @import "_bootstrap" from main.less and ran Grunt. It failed with this:

    root@galaxy-one:/srv/www/findhvacdealer.com/wp-content/themes/roots# grunt
    Running “jshint:all” (jshint) task

    2 files lint free.

    Running “less:dev” (less) task

    NameError: variable @line-height-computed is undefined in assets/less/components/_media.less on line 8, column 13:
    7 .gallery-row {
    8 padding: (@line-height-computed / 2) 0;
    9 }
    Warning: Error compiling assets/less/main.less Use --force to continue.

    Aborted due to warnings.

  4. Placed Bootstrap back in and Grunt was happy again.

  5. Opened Gruntfile.js from the theme root. The docs talk about an Uglify section, but there isn’t one anymore. So I removed all of the boostrap references under: var jsFileList = [

  6. Edited main.less and removed the Boostrap import.

  7. Ran Grunt. It failed.

  8. Edited main.less again, and removed everything so main.less was completely empty.

  9. Ran Grunt. It worked.

  10. Added one line of styling back in: body {background:#bcbcbc;font-size:24px;}

  11. Ran Grunt and it worked. Checked assets/css/main.css and the line I added in main.less was in there.

  12. However, styling NOT applied to site.

So my question is, how do I get Roots 7 to recognize styling? For example, to continue on with the above:

  1. I created assets/css/main.min.css and added the above line of styling.

  2. Checked the site and BOOM. The styling took.

I don’t need to use LESS ever. The sites we’re doing are small, non-ecommerce information sites. I just want to be boostrap free and have a style sheet to work in. Is Roots able to do this for me still? Can I just use main.min.css now instead of app.css?

Re step 10 & 14: Didn’t you ask how to remove Bootstrap in this thread? It seems like you’re not following those same steps that originally worked. You need to remove more than just the first Bootstrap @import line. Follow that post.

Re step 19: If you just run grunt in your shell, the default task that will be run is grunt dev, which will only output unminified JS/CSS assets by default. The only way Roots will tell WP to read those unminified assets is if you have define('WP_ENV', 'development'); in your wp-config.php file (see here).

If you have not defined WP_ENV anywhere then Roots tells WP to look for minfied assets, which you did not build yet. You should be able to test that by running grunt build, which will output the correct minfied assets based on your main.less file and your site should then reflect the changes you made to main.less.

So you have a few options. You can define WP_ENV, but it appears you’re developing remotely, so that may not be appropriate for you, or you can change Grunt’s default behavior from dev to build.

Heads up! If you use grunt watch then by default Grunt will only generate unminified assets. If you want to alter that behavior then check out this recent thread: Add x.min.css & x.min.script to watch.

But seriously, if you are using Grunt then you should NOT directly touch, create, delete, copy, cut, paste, zip, unzip, or modify your main.css or main.min.css. Put that out of your head and get it out of your workflow. It’s akin to modifying WordPress core files. If you touch those CSS files and then subsequently run Grunt, any changes to them will be lost.

Thanks cfx.

I did follow your advice from the other thread that day, and am doing that today - all lines from main.less are toasted. The nuking of Boostrap is good I think. Thanks!

As for the Grunt stuff, I’m gonna have to read your comments a few times for all of that to sink in. I’m a front end designer and past server admin. Anything else like hard core PHP or this dev stuff is over my head.

But let me get this right: You’re saying that this new workflow makes you run Grunt every time you update a style? But that Grunt Watch will do this automatically? But what if I launch a site off my dev server, and then the next day need to change something…do I need to install all of that npm stuff again? It’s overkill for me.

Plus, some customers want their sites on shared hosting at Godaddy and crap that like. I wouldn’t be able to do any grunt stuff there.

This link is what I was doing with 6.5: [http://notebook.gaslampmedia.com/moved-app-css/][1]
[1]: http://notebook.gaslampmedia.com/moved-app-css/

Is there any way to just enqueue an extra style sheet? I get that grunt seems to be setup to combine custom css with Bootstrap, but that doesn’t apply to those of us who don’t want to use bloated frameworks.

But let me get this right: You’re saying that this new workflow makes you run Grunt every time you update a style? But that Grunt Watch will do this automatically?

Yes, but this is not new. It’s been possible since Grunt was added to Roots around Jan/Feb 2013.

But what if I launch a site off my dev server, and then the next day need to change something…do I need to install all of that npm stuff again?

Not at all, but the Roots + Grunt workflow is geared towards developers running local development environments and version control. The ideal workflow is: develop locally with Grunt, then deploy final assets with version control (without installing Grunt remotely). When remote/live changes need to be made, you make them first locally (and test them!) and deploy them via your version control system of choice (I personally use Git). Hopefully it’s becoming more apparent to you why Roots is meant to be developed locally first and foremost.

Plus, some customers want their sites on shared hosting at Godaddy and crap that like. I wouldn’t be able to do any grunt stuff there.

You got that right!

This link is what I was doing with 6.5: http://notebook.gaslampmedia.com/moved-app-css/

That site completely disregards the premise that the Roots + Grunt workflow is intended for localhost development only. If you want to eliminate Grunt from your project altogether, it’s a decent hack. But the bottom line, again, is that you should not be installing Grunt remotely. Install it locally, do your thing, then deploy your final project files remotely. I know you’ve done it before, but that does not matter. It was improper then and still is.

Is there any way to just enqueue an extra style sheet?

Sure, follow that link in your post if you want to remove Grunt. Your biggest hurdle is coming to the realization that you either need to (1) develop locally with Grunt and version control (way of the future/present), or (2) remain stuck in the past developing remotely and trying desperately to implement local workflows on remote systems. If you choose #2 you can always just leave Grunt out of your workflow.

cfx, thanks again for your detailed explanations.

I want you to know, I’m going to refer to them ongoing, and your suggestions about ideal development is not falling on deaf ears. The problem is I don’t know anything about Git right now, and am not going to take the time to learn it at the moment. First and foremost I’m an indie filmmaker who also does site work to pay the bills. So…I’d rather spend time learning about the new Black Magic 4K camera than Git.

To recap yesterday’s stuff, I think it all began with bower not installing with npm. I don’t know enough to even look for that, and still don’t even know what bower is. Installing bower after npm using the bower install --allow-root is technically what fixed the problem for me, in addition to the equeue below.

For anyone else reading this who needs a way to use a style sheet outside of Git, especially those not using Bootstrap, in addition to the steps listed above, add this to your functions.php file:

add_action('wp_enqueue_scripts', 'your_randomname_styles');

function your_randomname_styles(){

    wp_enqueue_style( 'your_randomname_styles', get_template_directory_uri() . '/assets/css/app.css');

}

Then make sure you have an app.css in your assets/css folder.

cfx, again, thank you very much for all the detailed info. I might get into git hub stuff, just not at the moment.

I was having the same issue and I figured out if you don’t clone and download roots. It doesn’t have .bowerrc and .jshintrc file and .bowerrc is needed for boostrap to be loaded. Hope this helps with those that have no vendor folder.