{"action":"closed","issue":{"url":"https://api.github.com/repos/addyosmani/generator-webapp-uncss/issues/3","labels_url":"https://api.github.com/repos/addyosmani/generator-webapp-uncss/issues/3/labels{/name}","comments_url":"https://api.github.com/repos/addyosmani/generator-webapp-uncss/issues/3/comments","events_url":"https://api.github.com/repos/addyosmani/generator-webapp-uncss/issues/3/events","html_url":"https://github.com/addyosmani/generator-webapp-uncss/issues/3","id":70604296,"number":3,"title":"Bootstrap not included","user":{"login":"rowild","id":213803,"avatar_url":"https://avatars.githubusercontent.com/u/213803?v=3","gravatar_id":"","url":"https://api.github.com/users/rowild","html_url":"https://github.com/rowild","followers_url":"https://api.github.com/users/rowild/followers","following_url":"https://api.github.com/users/rowild/following{/other_user}","gists_url":"https://api.github.com/users/rowild/gists{/gist_id}","starred_url":"https://api.github.com/users/rowild/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rowild/subscriptions","organizations_url":"https://api.github.com/users/rowild/orgs","repos_url":"https://api.github.com/users/rowild/repos","events_url":"https://api.github.com/users/rowild/events{/privacy}","received_events_url":"https://api.github.com/users/rowild/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2015-04-24T06:41:51Z","updated_at":"2015-04-24T08:46:37Z","closed_at":"2015-04-24T08:46:37Z","body":"Comparing yo webapp and yo webapp-uncss, I do not find any significant differences between the 2 Greuntfile setups (aside from the uncss-parts). Nevertheless, webapp-uncss does not include the Bootstrap css into the index html (wiredep), and after 3 days of having been unsuccessful to find the error I dare to ask you guys here for help. This is my setup:\r\n\r\n```\r\n➜  k git:(master) ✗ yo --version && echo $PATH $NODE_PATH && node -e 'console.log(process.platform, process.versions)' && cat Gruntfile.js\r\n1.4.6\r\n/Users/rowild/.rvm/gems/ruby-2.1.3/bin:/Users/rowild/.rvm/gems/ruby-2.1.3@global/bin:/Users/rowild/.rvm/rubies/ruby-2.1.3/bin::/Applications/MAMP/bin/php/php5.4.34/bin:/Users/rowild/.composer/vendor/bin:/Users/rowild/bin:/usr/local/bin:/usr/local/sbin:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/rowild/.rvm/bin\r\ndarwin { http_parser: '2.3',\r\n  node: '0.12.0',\r\n  v8: '3.28.73',\r\n  uv: '1.0.2',\r\n  zlib: '1.2.8',\r\n  modules: '14',\r\n  openssl: '1.0.1l' }\r\n// Generated on 2015-04-18 using\r\n// generator-webapp-uncss 0.1.0\r\n'use strict';\r\n\r\n// # Globbing\r\n// for performance reasons we're only matching one level down:\r\n// 'test/spec/{,*/}*.js'\r\n// If you want to recursively match all subfolders, use:\r\n// 'test/spec/**/*.js'\r\n\r\nmodule.exports = function (grunt) {\r\n\r\n    // Time how long tasks take. Can help when optimizing build times\r\n    require('time-grunt')(grunt);\r\n\r\n    // Load grunt tasks automatically\r\n    require('load-grunt-tasks')(grunt);\r\n\r\n    // Configurable paths\r\n    var config = {\r\n        app: 'app',\r\n        dist: 'dist',\r\n        tmp: '.tmp',\r\n        portLR: 35740,\r\n        port: 9220,\r\n        portTest: 9221\r\n    };\r\n\r\n    // Define the configuration for all the tasks\r\n    grunt.initConfig({\r\n\r\n        // Project settings\r\n        config: config,\r\n\r\n        // Watches files for changes and runs tasks based on the changed files\r\n        watch: {\r\n            bower: {\r\n                files: ['bower.json'],\r\n                tasks: ['wiredep']\r\n            },\r\n            js: {\r\n                files: ['<%= config.app %>/scripts/{,*/}*.js'],\r\n                //tasks: ['jshint'],\r\n                options: {\r\n                    livereload: true\r\n                }\r\n            },\r\n            jstest: {\r\n                files: ['test/spec/{,*/}*.js'],\r\n                tasks: ['test:watch']\r\n            },\r\n            gruntfile: {\r\n                files: ['Gruntfile.js']\r\n            },\r\n            sass: {\r\n                files: ['<%= config.app %>/styles/{,*/}*.{scss,sass}'],\r\n                tasks: ['sass:server', 'autoprefixer']\r\n            },\r\n            styles: {\r\n                files: ['<%= config.app %>/styles/{,*/}*.css'],\r\n                tasks: ['newer:copy:styles', 'autoprefixer']\r\n            },\r\n            livereload: {\r\n                options: {\r\n                    livereload: '<%= connect.options.livereload %>'\r\n                },\r\n                files: [\r\n                    '<%= config.app %>/{,*/}*.html',\r\n                    '.tmp/styles/{,*/}*.css',\r\n                    '<%= config.app %>/images/{,*/}*'\r\n                ]\r\n            }\r\n        },\r\n\r\n        // The actual grunt server settings\r\n        connect: {\r\n            options: {\r\n                port: config.port,\r\n                open: true,\r\n                livereload: config.portLR,\r\n                // Change this to '0.0.0.0' to access the server from outside\r\n                hostname: 'localhost'\r\n            },\r\n            livereload: {\r\n                options: {\r\n                    middleware: function (connect) {\r\n                        return [\r\n                            connect.static('.tmp'),\r\n                            connect().use('/bower_components', connect.static('./bower_components')),\r\n                            connect.static(config.app)\r\n                        ];\r\n                    }\r\n                }\r\n            },\r\n            test: {\r\n                options: {\r\n                    open: false,\r\n                    port: config.portTest,\r\n                    middleware: function (connect) {\r\n                        return [\r\n                            connect.static('.tmp'),\r\n                            connect.static('test'),\r\n                            connect().use('/bower_components', connect.static('./bower_components')),\r\n                            connect.static(config.app)\r\n                        ];\r\n                    }\r\n                }\r\n            },\r\n            dist: {\r\n                options: {\r\n                    base: '<%= config.dist %>',\r\n                    livereload: false\r\n                }\r\n            }\r\n        },\r\n\r\n        // Empties folders to start fresh\r\n        clean: {\r\n            dist: {\r\n                files: [{\r\n                    dot: true,\r\n                    src: [\r\n                        '.tmp',\r\n                        '<%= config.dist %>/*',\r\n                        '!<%= config.dist %>/.git*'\r\n                    ]\r\n                }]\r\n            },\r\n            server: '.tmp'\r\n        },\r\n\r\n        // Make sure code styles are up to par and there are no obvious mistakes\r\n        jshint: {\r\n            options: {\r\n                jshintrc: '.jshintrc',\r\n                reporter: require('jshint-stylish'),\r\n                strict: false\r\n            },\r\n            all: [\r\n                'Gruntfile.js',\r\n                '<%= config.app %>/scripts/{,*/}*.js',\r\n                '!<%= config.app %>/scripts/vendor/*',\r\n                'test/spec/{,*/}*.js'\r\n            ]\r\n        },\r\n\r\n        // Mocha testing framework configuration options\r\n        mocha: {\r\n            all: {\r\n                options: {\r\n                    run: true,\r\n                    urls: ['http://<%= connect.test.options.hostname %>:<%= connect.test.options.port %>/index.html']\r\n                }\r\n            }\r\n        },\r\n\r\n        // Add vendor prefixed styles\r\n        autoprefixer: {\r\n            options: {\r\n                browsers: ['> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1']\r\n            },\r\n            dist: {\r\n                files: [{\r\n                    expand: true,\r\n                    cwd: '.tmp/styles/',\r\n                    src: '{,*/}*.css',\r\n                    dest: '.tmp/styles/'\r\n                }]\r\n            }\r\n        },\r\n\r\n        // Automatically inject Bower components into the HTML file\r\n        wiredep: {\r\n            app: {\r\n                ignorePath: /^\\/|\\.\\.\\//,\r\n                src: ['<%= config.app %>/index.html'],\r\n                exclude: ['bower_components/bootstrap-sass-official/assets/javascripts/bootstrap.js']\r\n            },\r\n            sass: {\r\n                src: ['<%= config.app %>/styles/{,*/}*.{scss,sass}'],\r\n                ignorePath: /(\\.\\.\\/){1,2}bower_components\\//\r\n            }\r\n        },\r\n\r\n        // Renames files for browser caching purposes\r\n        rev: {\r\n            dist: {\r\n                files: {\r\n                    src: [\r\n                        '<%= config.dist %>/scripts/{,*/}*.js',\r\n                        '<%= config.dist %>/styles/{,*/}*.css',\r\n                        '<%= config.dist %>/images/{,*/}*.*',\r\n                        '<%= config.dist %>/fonts/{,*/}*.*',\r\n                        '<%= config.dist %>/*.{ico,png}'\r\n                    ]\r\n                }\r\n            }\r\n        },\r\n\r\n        // Reads HTML for usemin blocks to enable smart builds that automatically\r\n        // concat, minify and revision files. Creates configurations in memory so\r\n        // additional tasks can operate on them\r\n        useminPrepare: {\r\n            html: '/index.html',\r\n            options: {\r\n                dest: '',\r\n                flow: {\r\n                    html: {\r\n                        steps: {\r\n                            // Disabled as we'll be using a manual\r\n                            // cssmin configuration later. This is\r\n                            // to ensure we work well with grunt-uncss\r\n                            // css: ['cssmin']\r\n                        },\r\n                        post: {}\r\n                    }\r\n                }\r\n            }\r\n        },\r\n\r\n        // Performs rewrites based on rev and the useminPrepare configuration\r\n        usemin: {\r\n            options: {\r\n                assetsDirs: [\r\n                    '<%= config.dist %>',\r\n                    '<%= config.dist %>/images',\r\n                    '<%= config.dist %>/styles'\r\n                ]\r\n            },\r\n            html: ['<%= config.dist %>/{,*/}*.html'],\r\n            css: ['<%= config.dist %>/styles/{,*/}*.css']\r\n        },\r\n\r\n        uncss: {\r\n            dist: {\r\n                options: {\r\n                    // Take our Autoprefixed stylesheet main.css &\r\n                    // any other stylesheet dependencies we have..\r\n                    stylesheets: [\r\n                        '../.tmp/styles/main.css',\r\n\r\n                    ],\r\n                    // Ignore css selectors for async content with complete selector or regexp\r\n                    // Only needed if using Bootstrap\r\n                    ignore: [/dropdown-menu/, /\\.collapsing/, /\\.collapse/]\r\n                },\r\n                files: {\r\n                    '.tmp/styles/main.css': ['<%= config.app %>/index.html']\r\n                }\r\n            }\r\n        },\r\n\r\n        // The following *-min tasks produce minified files in the dist folder\r\n        imagemin: {\r\n            dist: {\r\n                files: [{\r\n                    expand: true,\r\n                    cwd: '<%= config.app %>/images',\r\n                    src: '{,*/}*.{gif,jpeg,jpg,png}',\r\n                    dest: '<%= config.dist %>/images'\r\n                }]\r\n            }\r\n        },\r\n\r\n        svgmin: {\r\n            dist: {\r\n                files: [{\r\n                    expand: true,\r\n                    cwd: '<%= config.app %>/svg',\r\n                    src: '{,*/}opt-*.svg',\r\n                    dest: '<%= config.dist %>/svg'\r\n                }]\r\n            }\r\n        },\r\n\r\n        htmlmin: {\r\n            dist: {\r\n                options: {\r\n                    collapseBooleanAttributes: true,\r\n                    collapseWhitespace: true,\r\n                    conservativeCollapse: true,\r\n                    removeAttributeQuotes: true,\r\n                    removeCommentsFromCDATA: true,\r\n                    removeEmptyAttributes: true,\r\n                    removeOptionalTags: true,\r\n                    removeRedundantAttributes: true,\r\n                    useShortDoctype: true\r\n                },\r\n                files: [{\r\n                    expand: true,\r\n                    cwd: '<%= config.dist %>',\r\n                    src: '{,*/}*.html',\r\n                    dest: '<%= config.dist %>'\r\n                }]\r\n            }\r\n        },\r\n\r\n        // By default, your `index.html`'s <!-- Usemin block --> will take care\r\n        // of minification. These next options are pre-configured if you do not\r\n        // wish to use the Usemin blocks.\r\n        cssmin: {\r\n            dist: {\r\n                files: {\r\n                    '<%= config.dist %>/styles/main.css': [\r\n                        '.tmp/styles/{,*/}*.css'\r\n                    ]\r\n                }\r\n            }\r\n        },\r\n\r\n        // Compiles Sass to CSS and generates necessary files if requested\r\n        sass: {\r\n            options: {\r\n                sourceMap: true,\r\n                includePaths: ['bower_components'],\r\n                loadPath: 'bower_components',\r\n                lineNumbers: true\r\n            },\r\n            dist: {\r\n                files: [{\r\n                    expand: true,\r\n                    cwd: '<%= config.app %>/styles',\r\n                    src: ['*.{scss,sass}'],\r\n                    dest: '.tmp/styles',\r\n                    ext: '.css'\r\n                }]\r\n            },\r\n            server: {\r\n                files: [{\r\n                    expand: true,\r\n                    cwd: '<%= config.app %>/styles',\r\n                    src: ['*.{scss,sass}'],\r\n                    //dest: '<%= config.dist %>/styles',\r\n                    dest: '.tmp/styles',\r\n                    ext: '.css'\r\n                }]\r\n            }\r\n        },\r\n\r\n        // Copies remaining files to places other tasks can use\r\n        copy: {\r\n            dist: {\r\n                files: [{\r\n                    expand: true,\r\n                    dot: true,\r\n                    cwd: '<%= config.app %>',\r\n                    dest: '<%= config.dist %>',\r\n                    src: [\r\n                        '*.{ico,png,txt}',\r\n                        'images/{,*/}*.webp',\r\n                        '{,*/}*.html',\r\n                        'fonts/{,*/}*.*',\r\n                        'svg/{,*/}opt-*.svg'\r\n                    ]\r\n                }, {\r\n                    src: 'node_modules/apache-server-configs/dist/.htaccess',\r\n                    dest: '<%= config.dist %>/.htaccess'\r\n                }, {\r\n                    expand: true,\r\n                    dot: true,\r\n                    cwd: 'bower_components/bootstrap-sass-official/assets/fonts/bootstrap/fonts',\r\n                    src: './*',\r\n                    dest: '<%= config.dist %>/fonts'\r\n                }, {\r\n                    expand: true,\r\n                    dot: true,\r\n                    cwd: 'bower_components/font-awesome/fonts',\r\n                    src: './*',\r\n                    dest: '<%= config.dist %>/fonts'\r\n                }, {\r\n                    expand: true,\r\n                    dot: true,\r\n                    cwd: '<%= config.app %>/styles/fonts',\r\n                    src: './*',\r\n                    dest: '<%= config.dist %>/fonts'\r\n                }, {\r\n                    expand: true,\r\n                    dot: true,\r\n                    cwd: '<%= config.app %>/videos',\r\n                    src: './*',\r\n                    dest: '<%= config.dist %>/videos'\r\n                }, {\r\n                    expand: true,\r\n                    dot: true,\r\n                    cwd: '<%= config.app %>/styles/pdfs',\r\n                    src: './*',\r\n                    dest: '<%= config.dist %>/pdfs'\r\n                }]\r\n            },\r\n            styles: {\r\n                expand: true,\r\n                dot: true,\r\n                cwd: '<%= config.app %>/styles',\r\n                dest: '.tmp/styles/',\r\n                src: '{,*/}*.css'\r\n            }\r\n        },\r\n\r\n        // Generates a custom Modernizr build that includes only the tests you\r\n        // reference in your app\r\n        modernizr: {\r\n            dist: {\r\n                devFile: 'bower_components/modernizr/modernizr.js',\r\n                outputFile: '<%= config.dist %>/scripts/vendor/modernizr.js',\r\n                files: {\r\n                    src: [\r\n                        '<%= config.dist %>/scripts/{,*/}*.js',\r\n                        '<%= config.dist %>/styles/{,*/}*.css',\r\n                        '!<%= config.dist %>/scripts/vendor/*'\r\n                    ]\r\n                },\r\n                uglify: true\r\n            }\r\n        },\r\n\r\n        // Run some tasks in parallel to speed up build process\r\n        concurrent: {\r\n            server: [\r\n                'sass:server',\r\n                'copy:styles'\r\n            ],\r\n            test: [\r\n                'copy:styles'\r\n            ],\r\n            dist: [\r\n                'sass',\r\n                'copy:styles',\r\n                'imagemin',\r\n                'svgmin'\r\n            ]\r\n        }\r\n    });\r\n\r\n\r\n    grunt.registerTask('serve', 'start the server and preview your app, --allow-remote for remote access', function (target) {\r\n        if (grunt.option('allow-remote')) {\r\n            grunt.config.set('connect.options.hostname', '0.0.0.0');\r\n        }\r\n        if (target === 'dist') {\r\n            return grunt.task.run(['build', 'connect:dist:keepalive']);\r\n        }\r\n\r\n        grunt.task.run([\r\n            'clean:server',\r\n            'wiredep',\r\n            'concurrent:server',\r\n            'autoprefixer',\r\n            'connect:livereload',\r\n            'watch'\r\n        ]);\r\n    });\r\n\r\n    grunt.registerTask('server', function (target) {\r\n        grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');\r\n        grunt.task.run([target ? ('serve:' + target) : 'serve']);\r\n    });\r\n\r\n    grunt.registerTask('test', function (target) {\r\n        if (target !== 'watch') {\r\n            grunt.task.run([\r\n                'clean:server',\r\n                'concurrent:test',\r\n                'autoprefixer'\r\n            ]);\r\n        }\r\n\r\n        grunt.task.run([\r\n            'connect:test',\r\n            'mocha'\r\n        ]);\r\n    });\r\n\r\n    grunt.registerTask('build', [\r\n        'clean:dist',\r\n        'wiredep',\r\n        'useminPrepare',\r\n        'concurrent:dist',\r\n        'autoprefixer',\r\n        'uncss',\r\n        'cssmin',\r\n        //'concat',\r\n        //'uglify',\r\n        'copy:dist',\r\n        'modernizr',\r\n        //'rev',\r\n        'usemin',\r\n        'htmlmin'\r\n    ]);\r\n\r\n    grunt.registerTask('default', [\r\n        'newer:jshint',\r\n        'test',\r\n        'build'\r\n    ]);\r\n};\r\n```\r\n\r\nThings like jquery, animate.js, wow or respond.js are included as expected.\r\n\r\nAny hints what i am doing wrong here?\r\nThank you!"}}