Gruntjs 使用Grunt,如果我有全局mixin和常量,如何编译所有*.less文件?

Gruntjs 使用Grunt,如果我有全局mixin和常量,如何编译所有*.less文件?,gruntjs,less,grunt-contrib-less,Gruntjs,Less,Grunt Contrib Less,我想按模块组织我的HTML、JS和LESS。我已经在使用Grunt从源文件夹编译*.js和*.html 因此,我将grunt配置如下: grunt.initConfig({ less: { ALL: { files: { 'compiled.css': '**/*.less' } } } } 但这遇到了一个主要问题:来自my/helper/*.less文件的常量和mixin无法被其他.less文件访问。 似乎grunt

我想按模块组织我的HTML、JS和LESS。我已经在使用Grunt从源文件夹编译
*.js
*.html

因此,我将grunt配置如下:

grunt.initConfig({
    less: {
        ALL: {
             files: { 'compiled.css': '**/*.less' }
        }
    }
}
但这遇到了一个主要问题:来自my
/helper/*.less
文件的常量和mixin无法被其他.less文件访问。
似乎
grunt contrib less
编译每个.less文件,然后合并输出,但不“全局”编译任何内容


我能想到的唯一解决方案是创建并维护一个
master.less
,该
@import
将每个单独的.less文件都保存下来。但是我正在尝试实现一个非常模块化的构建过程,并且我不必列出任何HTML或JS文件,所以我真的希望找到一个
*。更少的
解决方案

这里有一种实现轻松开发体验的方法。
但是,它需要生成的文件和自定义任务

自动生成
master.less
文件 通过为每个
*.less
文件编写
@import
语句,创建生成
master.less
的任务:

grunt.registerTask('generate-master-less', '', function() {
    generateFileList({
        srcCwd: 'modules',
        src: '**/*.less',
        dest: 'less/master.less',
        header: '// THIS FILE IS AUTOMATICALLY GENERATED BY grunt generate-master-less\n',
        footer: '// THIS FILE IS AUTOMATICALLY GENERATED BY grunt generate-master-less\n',
        template: '@import "<%= filename %>";\n',
        join: ''
    });
});

function generateFileList(options) {
    var _ = grunt.util._;
    var files = grunt.file.expand({ cwd: options.srcCwd }, options.src);

    var results = files.map(function (filename) {
        return _.template(options.template, { 'filename': filename });
    });
    var result = options.header + results.join(options.join) + options.footer;
    grunt.file.write(options.dest, result);
}
grunt.registerTask('generate-master-less','',function(){
生成列表({
srcCwd:'模块',
src:“***.less”,
目的地:“少/主。少”,
标头:'//此文件由grunt generate master less自动生成\n',
页脚:'//此文件由grunt generate master less自动生成\n',
模板:“@import”“;\n”,
加入:“”
});
});
函数生成器列表(选项){
var=grunt.util.\uu;
var files=grunt.file.expand({cwd:options.srcCwd},options.src);
var results=files.map(函数(文件名){
返回{.template(options.template,{'filename':filename});
});
var result=options.header+results.join(options.join)+options.footer;
write(options.dest,result);
}

然后,使用
grunt contrib less
只构建
master.less

感谢@seven phases max提供以下答案

允许您在
@import
语句中使用通配符!很好用

// master.less
@import "helpers/**/*.less";
@import "modules/**/*.less";
您需要添加到Grunt配置中的就是
插件
选项:

// Gruntfile.js
grunt.initConfig({
    less: {
        'MASTER': {
            src: 'master.less',
            dest: 'master.css',
            options: {
                plugins: [ require('less-plugin-glob') ]
            }
        }
    }
});

而且,别忘了,
npm安装较少的插件glob

好吧,是的,如果你想让你的部分变得可编译,他们必须导入所需的东西。像
/***.less
这样的东西是用来编译多个独立的样式表的(出于这个原因,它不能在这些文件之间隐式共享任何内容)。我用一个示例配置更新了我的问题。长话短说,
*.less
确实编译为单个输出文件,但它似乎只是简单地组合了各个编译文件的结果。我正在寻找任何类型的
*。如果您能想到任何解决方案,请减少
。这对您有帮助吗@sobolevn这就是我在最后一段中提到的。我希望我不必维护一个
@import
语句列表,因为创建一些新文件对开发来说是件好事,而构建过程会自动获取它们。。