2013-07-08 2 views
14

내 Gruntfile은 "files"을 반복하여 동일한 작업의 두 대상 (distdev)간에 공유합니다.그랑트 대상간에 파일을 공유하는 방법은 무엇입니까?

"use strict"; 

module.exports = function (grunt) { 
    grunt.loadNpmTasks("grunt-contrib-stylus"); 

    grunt.initConfig({ 
     stylus: { 
      dist: { 
       files: { "www/bundle.css": ["stylus/*.styl"] }, 
       options: { compress: true, linenos: false } 
      }, 
      dev: { 
       files: { "www/bundle.css": ["stylus/*.styl"] }, 
       options: { compress: false, linenos: true } 
      } 
     } 
    }); 

    grunt.registerTask("dev", ["stylus:dev"]); 
    grunt.registerTask("prod", ["stylus:prod"]); 
}; 

그래서 모두 목표에 그것을 반복하지 않아도 수준을 config (설정) 파일을 이동하는 방법은 무엇입니까 : 여기에 전용 스타일러스 문제를 포함하는 샘플입니다?

+3

"var myFiles = {"www/bundle.css ": ["stylus/*. styl "]};" grunt.initConfig 전에 "files : myFiles"라고 말하면됩니다. 그냥 대상 일 뿐이야, 안 그래? 모든 객체에 파일 속성을 삽입하는 함수를 작성할 수는있을 것이라고 확신하지만 DRY를 의미하지만 어느 시점에서는 약간의 편의를 위해 많은 복잡성을 다루고 있습니다. – dtudury

+0

다음 질문과 중복됩니다 : http://stackoverflow.com/questions/15927368 – thorn

+0

트래커 문제 : https://github.com/gruntjs/grunt/issues/1029 – thorn

답변

11

Domenic, 당신은 POJS 변수를 사용할 수 있습니다 :

"use strict"; 

module.exports = function (grunt) { 
    grunt.loadNpmTasks("grunt-contrib-stylus"); 

    var stylusFiles = { "www/bundle.css": ["stylus/*.styl"] }; 

    grunt.initConfig({ 
     stylus: { 
      dist: { 
       files: stylusFiles, 
       options: { compress: true, linenos: false } 
      }, 
      dev: { 
       files: stylusFiles, 
       options: { compress: false, linenos: true } 
      } 
     } 
    }); 

    grunt.registerTask("dev", ["stylus:dev"]); 
    grunt.registerTask("prod", ["stylus:prod"]); 
}; 

을 아니면 Grunt "Configuring Tasks" Guide 당 템플릿을 사용할 수 있습니다.

"use strict"; 

module.exports = function (grunt) { 
    grunt.loadNpmTasks("grunt-contrib-stylus"); 

    grunt.initConfig({ 
     stylus: { 
      dist: { 
       files: { "www/bundle.css": ["stylus/*.styl"] }, 
       options: { compress: true, linenos: false } 
      }, 
      dev: { 
       files: "<%= stylus.dist.files %>", 
       options: { compress: false, linenos: true } 
      } 
     } 
    }); 

    grunt.registerTask("dev", ["stylus:dev"]); 
    grunt.registerTask("prod", ["stylus:prod"]); 
}; 
+1

이것이 중복 답변이라는 것을 알고 있습니다 만, 나는 "템플릿"과 POJS 변수 접근 방식 모두 똑같이 유효하다는 것을 지적하고 싶었습니다. –

+1

이것은 내가 볼 수있는 POJS 변수가있는 유일한 것이며 가장 간단하게 받아들이는 것처럼 보입니다. 아직도'options'를 올릴 수는 있지만'files'는 올릴 수 없다는 것은 이상한 일입니다. – Domenic

+1

POJS = 일반 이전 자바 스크립트 – gang

1

당신은 설정을 쓸데없는 것으로 넘겨 줄 수 있습니다. 아래 코드를 테스트 해보지는 않았지만, 생각해야합니다. 나는 단지 값을 위해서만 키에 대한 설정을 사용하지 않았습니다. 희망적으로 적어도 시작일 것입니다.

"use strict"; 

module.exports = function (grunt) { 
    grunt.loadNpmTasks("grunt-contrib-stylus"); 

    var buildConfig = { 
    output: "www/bundle.css", 
    files: ["stylus/*.styl"], 
    }; 

    grunt.initConfig({ 
    config: buildConfig, 
    stylus: { 
     dist: { 
      files: {<%= config.output%>: <%= config.files %>}, 
      options: { compress: true, linenos: false } 
     }, 
     dev: { 
      files: {<%= config.output%>: <%= config.files %>}, 
      options: { compress: false, linenos: true } 
     } 
    } 
    }); 

    grunt.registerTask("dev", ["stylus:dev"]); 
    grunt.registerTask("prod", ["stylus:prod"]); 
}; 
+0

이것은 유효한 JavaScript 구문이 아닙니다. – Domenic

0

당신은 당신의 꿀꿀 거리는 소리의 설정에 항목으로 추가 할 수 있습니다 : 당신이 더 많은 예제가 필요한 경우

"use strict"; 

module.exports = function (grunt) { 
    grunt.loadNpmTasks("grunt-contrib-stylus"); 

    grunt.initConfig({ 
     cssFiles: ["stylus/*.styl"], 
     stylus: { 
      dist: { 
       files: { "www/bundle.css": '<%= cssFiles %>' }, 
       options: { compress: true, linenos: false } 
      }, 
      dev: { 
       files: { "www/bundle.css": '<%= cssFiles %>' }, 
       options: { compress: false, linenos: true } 
      } 
     } 
    }); 

    grunt.registerTask("dev", ["stylus:dev"]); 
    grunt.registerTask("prod", ["stylus:prod"]); 
}; 

난 내 프로젝트 중 하나를 사용하고 파일에서보세요 : https://github.com/sugendran/cheatsheet.js/blob/master/Gruntfile.js

5

체크 아웃 템플릿 : http://gruntjs.com/configuring-tasks#templates

"use strict"; 

module.exports = function (grunt) { 
    grunt.loadNpmTasks("grunt-contrib-stylus"); 

    grunt.initConfig({ 
    stylus: { 
     dist: { 
     files: { 
      "www/bundle.css": ["stylus/*.styl"], 
     }, 
     options: { compress: true, linenos: false } 
     }, 
     dev: { 
     files: "<%= stylus.dist.files %>", 
     options: { compress: false, linenos: true } 
     } 
    } 
    }); 

    grunt.registerTask("dev", ["stylus:dev"]); 
    grunt.registerTask("prod", ["stylus:prod"]); 
}; 
1

나는 과거에 이것을 여러 가지 방법으로 접근 해왔다. 하나는 환경 변수를 이용하고 환경 변수를 사용하여 스타일러스와 같은 간단한 플래그를 전환하는 것입니다. 이 방법을 확장하면 플래그를 설정하는 작업을 등록 할 수도 있습니다. 예 :

"use strict"; 

var env = 'DEV'; 

module.exports = function (grunt) { 
    grunt.loadNpmTasks("grunt-contrib-stylus"); 

    grunt.initConfig({ 
     stylus: { 
      dist: { 
       files: { "www/bundle.css": ["stylus/*.styl"] }, 
       options: { compress: env === 'PROD', linenos: env === 'DEV' } 
      } 
     } 
    }); 

    grunt.registerTask('production', function() { 
     env = 'PROD'; 
    }); 

    grunt.registerTask("dev", ["stylus"]); 
    grunt.registerTask("prod", ["production", "dev"]); 
}; 

템플릿 경로를 이동하거나 기본 객체를 확장 할 수도 있지만 일반적으로 플래그는 작동하기에 충분히 간단합니다. 이 같은

+0

매우 혁신적이고 흥미 롭습니다 ... 감사합니다. – Domenic

+0

여기에 환경 변수를 사용해서는 안됩니까? 'process.env.NODE_ENV'와 같이'DEV' 또는'PROD' 환경에 있는지 확인하십시오. – Spoike

+1

@ Spoike 당신은 할 수 있습니다, 그리고 그것은 첫 번째 문장이 말한 것입니다. 그러나 이것은 각 환경을 변경하거나 명령을 make 파일이나'패키지에 넣으려는 노력으로 이어질 수 있습니다.json' – blakeembrey

0

확신 뭔가

"use strict"; 

module.exports = function (grunt) { 

    grunt.loadNpmTasks("grunt-contrib-stylus"); 

    var files = { "www/bundle.css": ["stylus/*.styl"] }; 
    var options; 

    grunt.registerTask("config", function() { 
     grunt.initConfig({ 
      stylus: { 
       main: { 
        files: files, 
        options: options 
       } 
      } 
     }); 
    }); 

    grunt.registerTask("setup-prod", function() { 
     options = { compress: false, linenos: true }; 
    }); 

    grunt.registerTask("setup-dev", function() { 
     options: { compress: true, linenos: false }; 
    }); 

    grunt.registerTask("dev", ["setup-dev", "config", "stylus"]); 
    grunt.registerTask("prod", ["setup-prod", "config", "stylus"]); 
}; 

당신은 또한없이 설정을 변경할 수 있습니다 것 같습니다 ... 작동 다시 전화를 직접 grunt.config.data을 편집하여 initConfig을().

관련 문제