grunt中是否存在全局变量?

时间:2013-12-11 18:16:52

标签: gruntjs

在尝试执行某种通用的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');
    };
}());

2 个答案:

答案 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并可能将其扩展为接受新流程的参数。