在尝试执行某种通用的grunt任务时,我在访问变量/选项时遇到了困难。
我需要某种全局变量或类似的东西。 我似乎忽略了一些事情。
如果我运行grunt sassCompile:myprojectFolder
,一切正常
虽然grunt sassWatch:myprojectFolder
没有。
我在详细模式下运行它似乎 projectPath 为空,而指南针正在调用指南针。
指南针选项(来自详细输出):
sassCompile :config="projectRoot/myprojectFolder/config.rb" ...
sassWatch :config="config.rb" ...
这是Gruntfile.js用于测试:
我做错了什么?
(function() {
'use strict';
module.exports = function (grunt) {
grunt.initConfig({
compass: {
dev: {
options: {
config: "<%= projectPath %>config.rb",
basePath: "<%= projectPath %>",
specify: ["<%= projectPath %>src/sass/style*.scss","!**/*ie*.scss"],
bundleExec: true
}
}
},
watch: {
css: {
files: ['<%= projectPath %>../**/*.scss'],
tasks: ['compass']
}
}
});
grunt.registerTask('sassCompile', 'compass', function (project) {
grunt.config('projectPath', 'projectRoot/' + project + '/');
grunt.task.run('compass');
});
grunt.registerTask('sassWatch', 'watch', function (project) {
grunt.config('projectPath', 'projectRoot/' + project + '/');
grunt.task.run('watch');
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-compass');
};
}());
答案 0 :(得分:0)
这绝对是一种有趣的方法 - 我花了一些时间来了解发生了什么。
运行grunt sassWatch:myprojectFolder
时发生的事情是watch
任务以冒号后提供的projectPath
开始,但是,{{1}检测到它在没有配置的情况下运行watch
任务的更改。
这是因为compass
通过启动新的grunt进程来运行它的任务。 可以使用grunt-contrib-watch
在同一进程中运行任务,但这似乎是不鼓励的。
我建议你试试这个:
options: { spawn: false }
这样watch: {
css: {
files: ['<%= projectPath %>../**/*.scss'],
tasks: ['sassCompile:<%= projectPath %>']
}
}
将在生成的grunt进程中运行watch
,确保配置转移到sassCompile:myprojectFolder
任务。
答案 1 :(得分:0)
在grunt页面上有一个section about global variables,但它们无法在多个进程中运行。
可以手动启动新的异步过程并切换所需的变量。
您可以查看here并可能将其扩展为接受新流程的参数。