【问题标题】:Compile Bootstrap JS with Grunt. Adjust Gruntfile.js to watch for changes使用 Grunt 编译 Bootstrap JS。调整 Gruntfile.js 以观察变化
【发布时间】:2015-10-21 06:00:57
【问题描述】:

使用 Yeoman 创建了一个新的简单 Compass/Bootstrap 项目。 SCSS 文件工作正常,正在编译到 public/css/main.css 中。我可以看到 Gruntfile.js(下)正在监视 compass 文件而不是 js 文件。我只是想让 Grunt 将 Bootstrap.js 编译到 public/js/ 中。 尝试研究和更改文件,但我没有运气。

module.exports = function(grunt) {

// Project configuration.
grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    config: {
        app: 'app'
    },

    connect: {
        options: {
            port: 9000,
            livereload: 35729,
            // Change this to '0.0.0.0' to access the server from outside
            hostname: 'localhost'
        },
        livereload: {
            options: {
                open: true,
                base: [
                    '.tmp',
                    '<%= config.app %>/public'
                ]
            }
        },
    },
    watch: {
        options: {
            livereload: true,
        },
        livereload: {
            options: {
                livereload: '<%= connect.options.livereload %>'
            },
            files: [
                '<%= config.app %>/public/{,*/}*.html',
                '<%= config.app %>/public/css/{,*/}*.css',
                '<%= config.app %>/public/images/{,*/}*'
            ]
        },

        compass: {
            files: ['**/*.{scss,sass}'],
            tasks: ['compass:dev']
        },
    },
    compass: {
        dev: {
            options: {
                sassDir: ['app/src/stylesheets'],
                cssDir: ['app/public/css'],
                environment: 'development'
            }
        },
        prod: {
            options: {
                sassDir: ['app/src/stylesheets'],
                cssDir: ['app/public/css'],
                environment: 'production'
            }
        },
    }
});

// Load the plugin
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-compass');
grunt.loadNpmTasks('grunt-contrib-connect');

// Additional
grunt.loadNpmTasks('grunt-serve');

// Default task(s).
//grunt.registerTask('default', ['connect:livereload', 'compass:dev', 'watch']);
grunt.registerTask('serve', ['connect:livereload', 'compass:dev', 'watch']);

// prod build
grunt.registerTask('prod', ['compass:prod']);

};

确定这和 Grunt 枪一样简单吗?

【问题讨论】:

    标签: twitter-bootstrap gruntjs grunt-contrib-watch


    【解决方案1】:

    SCSS 文件工作正常,因为 compass 任务正在将它们编译为 CSS。

    据我所知,您希望 Grunt 将您的 js 文件(包括 bootstrap.js)编译到您的 public/js 目录中。为此,您必须使用grunt concat。

    首先,在你的根目录中运行npm install grunt-contrib-concat --save-dev。

    然后更新 Gruntfile:

    module.exports = function(grunt) {
    
    // Project configuration.
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
    
        config: {
            app: 'app'
        },
    
        connect: {
            options: {
                port: 9000,
                livereload: 35729,
                // Change this to '0.0.0.0' to access the server from outside
                hostname: 'localhost'
            },
            livereload: {
                options: {
                    open: true,
                    base: [
                        '.tmp',
                        '<%= config.app %>/public'
                    ]
                }
            },
        },
        // Edited: Add concat task
        concat: {
            options: {
                separator: ';',
            },
            dist: {
                src: ['app/src/javascripts/bootstrap.js'],
                dest: 'app/public/js/app.js',
            },
        },
        watch: {
            options: {
                livereload: true,
            },
            livereload: {
                options: {
                    livereload: '<%= connect.options.livereload %>'
                },
                files: [
                    '<%= config.app %>/public/{,*/}*.html',
                    '<%= config.app %>/public/css/{,*/}*.css',
                    '<%= config.app %>/public/images/{,*/}*'
                ]
            },
            compass: {
                files: ['**/*.{scss,sass}'],
                tasks: ['compass:dev']
            },
            // Edited: Watch js files
            js: {
                files: ['app/src/javascripts/**/*.js'],
                tasks: ['concat'],
            },
        },
        compass: {
            dev: {
                options: {
                    sassDir: ['app/src/stylesheets'],
                    cssDir: ['app/public/css'],
                    environment: 'development'
                }
            },
            prod: {
                options: {
                    sassDir: ['app/src/stylesheets'],
                    cssDir: ['app/public/css'],
                    environment: 'production'
                }
            },
        }
    });
    
    // Load the plugin
    grunt.loadNpmTasks('grunt-contrib-watch');
    // Edited: Load grunt-contrib-concat
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-compass');
    grunt.loadNpmTasks('grunt-contrib-connect');
    
    // Default task(s).
    // Edited: Add concat
    grunt.registerTask('default', ['connect:livereload', 'compass:dev', 'concat', 'watch']);
    // prod build
    // Edited: Add concat
    grunt.registerTask('prod', ['compass:prod'], 'concat');
    
    };
    

    我建议不要直接更新您的 bootstrap.js 文件。在同一目录中创建一个新脚本并将其名称添加到 concat>dist>src 数组中。

    【讨论】:

    • 感谢 Hardik 现在工作正常。我可以看到 Gruntfile.js 没有观看 js 文件,但我不确定正确的任务(uglify、jshintrc 等)?关于同一目录下的附加js脚本文件。我会以与调用其他(部分)的 SCSS 基本文件相同的方式使用它吗? //= 需要 ./bootstrap/affix //= 需要 ./bootstrap/alert //= 需要 ./bootstrap/button 再次感谢您的帮助。
    • 嘿克里。 watch 函数中的 js 部分将监视您对 app/src/javascripts/ 目录中的任何文件所做的所有更改。然后它将运行concat 任务以更新串联的 app.js 文件中的代码。您不需要遵循 SCSS 的局部样式。您可以简单地在 bootstrap.js 文件旁边创建一个新文件,然后在 concat 任务中添加文件路径。例如,如果您的新文件名为 custom.js,请以这种方式更新 src[] 数组:src: ['app/src/javascripts/bootstrap.js', 'app/src/javascripts/custom.js']
    • @Kerry7777 很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 2012-09-30
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多