我想按模块组织我的HTML,JS和LESS。我已经在使用Grunt从我的源文件夹中编译*.js
和*.html
。
所以我按照以下方式配置了grunt:
grunt.initConfig({
less: {
ALL: {
files: { 'compiled.css': '**/*.less' }
}
}
}
但是这会遇到一个主要问题:我的/helper/*.less
文件中的常量和mixins无法被其他.less文件访问。
似乎grunt-contrib-less
编译每个单独的.less文件,然后组合输出,但不编译任何东西"全局"。
我能想到的唯一解决方案是创建并维护一个master.less
@import
个人.less文件。但是我试图实现极其模块化的构建过程,而且我不必列出任何HTML或JS文件,所以我真的希望找到*.less
解决方案!
答案 0 :(得分:4)
感谢@ seven-phases-max获得以下答案!
允许您在@import
语句中使用通配符!效果很好!
// master.less
@import "helpers/**/*.less";
@import "modules/**/*.less";
您需要添加到Grunt配置的所有内容是plugins
选项:
// Gruntfile.js
grunt.initConfig({
less: {
'MASTER': {
src: 'master.less',
dest: 'master.css',
options: {
plugins: [ require('less-plugin-glob') ]
}
}
}
});
并且,不要忘记,npm install less-plugin-glob
。
答案 1 :(得分:2)
这是实现轻松开发体验的一种方式 但是,它需要生成的文件和自定义任务。
master.less
文件通过为每个master.less
文件编写@import
语句来创建生成*.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-contrib-less
构建master.less
。