큰 (300-ish) scss 프로젝트로 채워진 디렉토리를 볼 node.js 프로그램을 작성 중입니다. scunt 파일이 변경 될 때마다 나침반이 컴파일 될 때마다 출력 파일이 별도의 디렉토리 (예 :변경된 파일을 기반으로 잡담 감시 작업을 수정하는 방법은 무엇입니까?
)로 이동하도록 Grunt-watch (노드 모듈을 통해 실행하거나 자체적으로 작동)가 구성됩니다../1234/style.scss는 꿀꿀 시계는
파일에 있던 프로젝트 디렉토리를 업데이트 /foo/bar/baz/1234/style.css 꿀꿀 - 나침반 >> 분명히 실행 >> 변경되었습니다 매우 중요합니다. (험악한 컴퍼스가 컴파일 된 모든 파일을 같은 디렉토리에 보냈다면, 뒤죽박죽이되어 사용할 수 없으며 과자 자동화는 목적이 없습니다.) 모든 파일이 올바른 위치로 라우팅되도록하기 위해 CSS 파일이 업데이트 될 때마다 동적으로 나침반 설정을 변경합니다.
샘플 gruntfile :
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
watch: {
files: './*/*.scss',
tasks: ['compass']
},
compass: {
origin:{
options: {
//temportary settings to be changed later
sassDir: './',
cssDir: './bar',
specify: './foo.scss'
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-compass');
grunt.event.on('watch', function(action, filepath, target) {
var path = require('path');
grunt.log.writeln(target + ': ' + filepath + ' might have ' + action);
var siteDirectory = path.dirname(filepath);
//changes sass directory to that of the changed file
var option = 'compass.origin.options.sassDir';
var result = __dirname + '/' + siteDirectory;
grunt.log.writeln(option + ' changed to ' + result);
grunt.config(option, result);
//customizes css output directory so that file goes to correct place
option = 'compass.origin.options.cssDir';
result = path.resolve(__dirname, '../', siteDirectory);
grunt.log.writeln(option + ' changed to ' + result);
grunt.config(option, result);
//grunt.task.run(['compass']);
});
};
그러나이 작동하지 않습니다. 상세 모드에서 'grunt watch'를 실행하면 grunt가 별도 프로세스에서 grunt.event.on 기능과 watch 태스크를 모두 실행하는 것을 볼 수 있습니다. gruntfile의 두 번째 구문 분석은 내 모든 이벤트를 되돌립니다. 기본 설정을 위의 기본값으로 변경하면 나침반이 실행되지 않습니다.
이벤트에서 볼 수 있듯이 grunt.task.run()을 추가하여 나침반이 구성 변경 사항을 보존하는 event.on 함수와 동일한 프로세스에서 실행되었는지 확인하려고했습니다. 그러나 작업이 실행을 거부했기 때문에 가능성이 I'm doing it wrong입니다.
불행히도, grunt.event.on 변수는 정의 된 grunt-watch 태스크로 보내지지 않습니다. 그렇지 않으면 나침반 설정을 변경 한 다음 동일한 프로세스에서 나침반을 실행하는 사용자 정의 함수를 작성할 수 있습니다.
나침반을 사용하지 않고이 기능을 구현하려고했지만 시계 기능을 나침반으로 빌드했지만 나침반은 프로젝트 당 하나의 정적 출력 경로 만 저장할 수 있으며 한 번에 하나의 프로젝트 만 볼 수 있습니다.
사이트 이름을 매개 변수로 사용하는 노드 프로그램을 추가하고 fs를 사용하여 grunfile.js를 다시 작성한 다음 exec 함수를 통해 'grunt watch'를 실행하여이 문제를 해결했습니다. 그러나 이것은 단점이 있습니다 (나는 grunt.log 데이터를 볼 수 없습니다). 그리고 끔찍하게 뒤얽힌 것입니다. 그래서 그것을 바꾸고 싶습니다.
아무쪼록 고맙습니다.
watch: {
files: './*/*.scss',
tasks: ['compass'],
options : { nospawn : true }
}
이에 대한 추가 정보를 원하시면 문서의 this section를 참조하십시오
귀하의 질문에 대한 답변이 없지만 왜 나침반이 나침반을 볼 수 있습니까? 나침반은 이미 나침반 시계와 함께 제공됩니다. – pllee
watch 작업 설정에서'watch :'가 동일한 컨텍스트에서 실행되도록하려면'options : {nospawn : true}'를 지정해야합니다 ([이 섹션은 문서를 참조하십시오] (https : /github.com/gruntjs/grunt-contrib-watch#compiling-files-as-needed)). –
@ go-oleg 감사합니다! 그것은 훌륭하게 작동합니다. 나는 문서에서 그것이 'nospawn'이 나의 것 같은 문제를 해결한다고 직접적으로 말한 것처럼 나는 놀랐다. – anachronism