2015-10-21 61 views
0

與Yeoman創建一個新的簡單的Compass/Bootstrap項目。 SCSS文件正在正常工作&正在編譯爲public/css/main.css。我可以看到Gruntfile.js(下面)正在監視指南針文件,但不是js文件。我只想讓Grunt將Bootstrap.js編譯成public/js /。 試圖研究&更改文件,但我沒有運氣。使用Grunt編譯Bootstrap JS。調整Gruntfile.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']); 

};

當然這和一些咕嚕槍一樣簡單?

回答

2

SCSS文件工作正常,因爲指南針任務正在將它們編譯爲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陣列。

+0

感謝Hardik現在工作正常。我可以看到Gruntfile.js沒有看js文件,但我不確定正確的任務(uglify,jshintrc等)? 關於同一目錄中的其他js腳本文件。我會以與SCSS基本文件相同的方式使用它,在其中調用其他(partials)? // =需要./bootstrap/affix // =需要./bootstrap/alert // =需要您的幫助再次 感謝./bootstrap/button。 – Kerry7777

+0

嘿克里。 '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']' – Hardik

+0

Hardik,現在都開始走到一起了。謝啦! – Kerry7777