Gruntjs 使用Grunt,如果我有全局mixin和常量,如何编译所有*.less文件?
我想按模块组织我的HTML、JS和LESS。我已经在使用Grunt从源文件夹编译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
*.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
语句列表,因为创建一些新文件对开发来说是件好事,而构建过程会自动获取它们。。