2014-03-02 4 views
1

괜찮아요, 내가 설정 grunt concat 및 분 내 모든 JS 파일에, 나는 또한 내 sass 파일을 실행하도록 설정했습니다. 이게 잘 작동하고, 모든 .js와 .scss 파일을보기 위해 감시 호출을 설정 한 다음 각각에 설정된 작업을 실행합니다.Grunt.js - 두 개의 시계 작업을 동시에 실행 중입니까?

나는 backbone.js로 놀고있어 파일 중 하나를 변경할 때마다 연락 할 라이브러리 파일이 많습니다. 이것은 자기 자신의 문제는 아니지만, sass 파일이 변경되면, 내 js 파일 중 하나라도 변경하지 않았더라도 내 클로저 컴파일러를 동일하게 실행합니다.

몇 가지 조사를 해본 결과 몇 가지 질문/답변이 여기에 있습니다. 두 개의 시계 기능을 설정하여 각 폴더에서 파일이 변경되면 다른 폴더를보고 설정 작업을 실행할 수있는 것처럼 보였습니다. 간단한 권리? 그렇다면 무엇이 잘못되었는지 확신 할 수 없지만 처음 설정된 작업 만 볼 것이며 두 번째 작업은 동시에 보지 않을 것입니다.

JavaScript는 차단이 아니라는 것을 알고 있지만 감시 작업은 차단 된 작업입니다. 첫 번째 감시 호출이 시작될 때이를 이해하는 방법 (틀린 경우 수정하십시오)에서 실행 중지를 막습니다. 두 번째 감시 전화?

나는 그때 내 문제를 해결할 것이라고 생각하는 동시성을 발견했다. 그러나 그것은 똑같은 일을합니다. 첫 번째 시계 호출은 두 번째 폴더가 실행 된 것으로 보입니다. 여기

현재 꿀꿀 거리는 소리 파일의 코드입니다 : 그래서 내가 정말 원하는 것을

module.exports = function(grunt) { 

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

concurrent: { 
    options: { 
       logConcurrentOutput: true 
      }, 
    target1: ['watch:ScssFiles'], 
    target2: ['watch:JSFiles'] 
}, //End of Concurrent 

'closure-compiler': { 
    frontend: { 
     closurePath: '/usr/lib', 
     cwd: 'raw_assets/javascript/', 
     js: ['jquery-2.1.0.js','underscore.js','backbone.js','vars.js','bb_models.js','bb_collections.js','bb_views.js','master.js'], 
     jsOutputFile: 'assets/js/showcase_master.js', 
     options: { 
     compilation_level: 'SIMPLE_OPTIMIZATIONS', 
     language_in: 'ECMASCRIPT5_STRICT', 
     }//End of Options 
    } //End of frontend 
}, //End of Closure Compiler 

sass: {        
    dist: { 
     options: {      
     style: 'compressed' 
     }, //End of Options 
     files: {       
     'assets/css/Master.css': 'raw_assets/sass/main.scss'  
     } //End of Files 
    } //End of Dist. 
}, //End of SASS 

watch: { 
    'JSFiles': { 
    files: [ 'raw_assets/javascript/*.js' ], 
    tasks: ['closure-compiler'], 
    options: { 
     spawn: false, 
    }, 
    }, //End of Watch call for JS Files 
'ScssFiles': { 
    files: ['raw_assets/sass/*.scss'], 
    tasks: ['sass'], 
    options: { 
     spawn: false, 
    }, 
    } //End of Watch SCSS Files 
} //End of Watch 


}); 

// Load the plugins 
grunt.loadNpmTasks('grunt-closure-compiler'); 
grunt.loadNpmTasks('grunt-contrib-sass'); 
grunt.loadNpmTasks('grunt-contrib-watch'); 
grunt.loadNpmTasks('grunt-concurrent'); 

//When 'Grunt' is run perform watch function 
grunt.registerTask('default', ['concurrent:target2', 'concurrent:target1']);# 

}; //End of GruntFile 

, 같은 시간에 두 폴더를보고 만 나는 점에서 때 파일이 필요합니다 작업/작업을 미리 형성이 꿀꿀 파일입니다 그룹이 바뀌 었습니까?

나는 (또는 내가해야 할 일을 생각할 때) 해결해야 할 일이있다. 나는 윈도우즈에서 개발하고 있지만, 우분투 서버를 운영하는 가상 머신을 가지고있다. 나는 퍼티 (putty) 터미널 내부에서 쓰레기 파일을 실행 중입니다. 어떤 경우에는 두 개의 퍼티 (pty) 터미널을 가질 수 있습니다. 하나는 js 파일을 감시하고 다른 하나는 내 scss 파일을 감시합니다. 이 설정은 단지 더 쉬운 방법일까요?

모든 도움을 환영합니다.

글렌.

추신. 미안, 내 철자법이 꺼져 있으면 난독증이 있고, 일을 올바르게 설명하지 못했을 수도 있습니다. 그래서 알려주세요. 나는 말씨를 향상시킬 것입니다. 감사합니다.

답변

1

grunt-concurrent이 필요하지 않은 경우 grunt-contrib-watch은 정의한 방식으로 여러 디렉토리를 볼 수 있습니다. 파일을 조사하여 두 가지 문제가 발생했습니다.

  1. 그란트 작업 이름에는 하이픈이 허용되지 않는 것 같습니다.
  2. grunt watch 디렉터리가 비어 있으면 일시 중단되지 않습니다. 거기에 뭔가가 있으면 일시 중지됩니다.

다음은 단순화 된 버전입니다 :

module.exports = function(grunt) { 

// Project configuration. 
grunt.initConfig({ 

watch: { 
    'JSFiles': { 
    files: [ 'raw_assets/javascript/*.js' ], 
    tasks: ['closure_compiler'], 
    options: { 
     spawn: true, 
    }, 
    }, //End of Watch call for JS Files 
'ScssFiles': { 
    files: ['raw_assets/sass/*.scss'], 
    tasks: ['sass'], 
    options: { 
     spawn: true, 
    }, 
    } //End of Watch SCSS Files 
} //End of Watch 


}); 

// Load the plugins 
grunt.loadNpmTasks('grunt-contrib-watch'); 

//When 'Grunt' is run perform watch function 
grunt.registerTask('closure_compiler', function() { 
    grunt.log.writeln("in closure_compiler"); 
}); 

grunt.registerTask('sass', function() { 
    grunt.log.writeln("in sass"); 
}); 

}; //End of GruntFile 

나는 다음 npm install grunt grunt-cli grunt-contrib-watch를 실행하고, javascriptsass 하위 디렉토리로 raw_assets 디렉토리를 만들었습니다.그런 다음 하나의 비어있는 JS 파일과 SCSS 파일을 만들고 grunt watch을 실행했습니다.

두 하위 디렉터리 중 하나를 수정하면 올바른 작업이 실행됩니다.

$ grunt watch 
Running "watch" task 
Waiting...OK 
>> File "raw_assets/sass/foo2.scss" added. 

Running "sass" task 
in sass 

Done, without errors. 
Completed in 0.381s at Mon Mar 03 2014 00:21:46 GMT+0100 (CET) - Waiting... 
OK 
>> File "raw_assets/javascript/new.js" added. 

Running "closure_compiler" task 
in closure_compiler 

Done, without errors. 
Completed in 0.381s at Mon Mar 03 2014 00:27:50 GMT+0100 (CET) - Waiting... 
+0

많은 감사합니다. 이것은 저에게 효과적입니다. :) - 저는 Grunt를 많이 사용하지 않았습니다. 나는 항상 당신이 수행하길 원하는 작업에 대해 registerTask를 호출해야한다고 생각했습니다. 여기서는 내가 실행하고 싶은 두 가지 작업 만 등록합니다. 그래서 JSHint 나 JsLint와 같은 것을 사용하는 JQuery/JavaScript (그리고 Backbone을 배움)를 사용하고 있는데 문제가되지 않을까요? 새로운 작업으로 등록합니까? 실행 전후에 실행 중지? 게다가 무엇을 권하고 싶습니까? 그들은 나를 매우 가까이에서 바라 보면서? –

+1

문제 없습니다. 일반적으로 새 작업을 정의하거나 플러그인에서 하나를 사용할 수 있습니다. 'grunt.loadNpmTasks ('grunt-contrib-jshint');를 호출하면'jshint' 작업을로드합니다. 그것을 사용하려면,'jshint' 섹션을'initConfig'에 추가하여 태스크를 구성하고 JS'tasks' 배열에'jshint'를 추가하십시오. 나는 jshint 대 jslint에 익숙하지 않아서 사용할 것을 조언하지 않는다. 나는 개인적으로 더 자주 jshint를 실행했다. –

+0

많은 감사합니다 - jshint는 jslint보다 훨씬 더 많이 볼 수 있습니다. 글렌에게 고마워. –

관련 문제