Как настроить sourceMaps для LESS с помощью Grunt?
Я использую grunt 0.4.2 и grunt-contrib-less 0.9.0. Я хочу, чтобы мой LESS был скомпилирован в CSS с поддержкой исходных карт.
Мои файлы LESS находятся в public/less
, а основной - main.less
.
Выполняется компиляция public/less/main.less
в public/css/main.css
, но исходные карты не работают.
Что случилось с моей конфигурацией Grunt ниже?
{
less: {
dev: {
options: {
compress: true,
yuicompress: true,
optimization: 2,
sourceMap: true,
sourceMapFilename: "public/css/main.css.source-map.json", //Write the source map to a separate file with the given filename.
sourceMapBasepath: "public/less", //Sets the base path for the Less file paths in the source map.
sourceMapRootpath: "/"//Adds this path onto the Less file paths in the source map.
},
files: {
"public/css/main.css": "public/less/main.less"
}
}
},
watch: {
styles: {
files: ["public/less/*"],
tasks: ['less'],
options: {
livereload: true,
nospaces: true
}
}
}
}
Я не хочу, чтобы мой CSS был создан в моей папке /public/less
; Я хочу поместить его в /public/css
. В противном случае я мог бы использовать эту другую конфигурацию, которая работает:
{
less: {
dev: {
options: {
compress: true,
yuicompress: true,
optimization: 2,
sourceMap: true,
sourceMapFilename: "public/less/main.css.map", //I DO NOT WANT THE CSS MAP HERE
sourceMapBasepath: "public/less", //Sets the base path for the Less file paths in the source map.
},
files: {
"public/less/main.css": "public/less/main.less"//I DO NOT WANT THE CSS HERE
}
}
},
watch: {
styles: {
files: ["public/less/*"],
tasks: ['less'],
options: {
livereload: true,
nospaces: true
}
}
}
}
Ответы
Ответ 1
Я нашел документацию сайта LESS более понятной относительно параметров, используемых grunt-contrib-less.
МЕНЬШЕ: Использование командной строки
http://lesscss.org/usage/#command-line-usage-installing-lessc
NPM: grunt-contrib-less
https://www.npmjs.org/package/grunt-contrib-less
Структура файла:
laravel/gruntfile.js
laravel/public/less/main.less
laravel/public/css/main.css
laravel/public/css/main.css.map
Файл "main.css.map" примечание:
- Если вы хотите, вы можете переименовать его в: main.css.source-map.json
- Я предполагаю, что у вас есть некоторая настройка правила сервера, которая не корректно отображает файлы *.map из папки 'css'
Примечания к сжатию:
- cleancss: true = удалит комментарий sourceMappingURL из main.css
- yuicompress: true = НЕ удалит комментарий sourceMappingURL из main.css
Gruntfile.js
less: {
dev: {
options: {
compress: true,
yuicompress: true,
optimization: 2,
sourceMap: true,
sourceMapFilename: 'public/css/main.css.map', // where file is generated and located
sourceMapURL: '/css/main.css.map', // the complete url and filename put in the compiled css file
sourceMapBasepath: 'public', // Sets sourcemap base path, defaults to current working directory.
sourceMapRootpath: '/', // adds this path onto the sourcemap filename and less file paths
},
files: {
'public/css/main.css': 'public/less/main.less',
}
}
},
watch: {
styles: {
files: ["public/less/*"],
tasks: ['less'],
options: {
livereload: true,
nospaces: true
}
}
},
Laravel/государственный/CSS/main.css
.class{ compiled css here } /*# sourceMappingURL=/css/main.css.map */
Laravel/государственный/CSS/main.css.map
{"version":3,"sources":["/less/main.less"], etc...
Ответ 2
Если у вас все еще возникают проблемы, попробуйте установить SourceMapURL на полный путь, например:
http://www.yourdomain.com/assets/css/styles.css.map
Очевидно, что это немного боль, поскольку она не относительна, поэтому, когда вы перемещаете свой сайт, ее нужно будет изменить. У меня была такая же проблема, как и вы, и это заставило меня работать для меня.
Еще один момент, который я обнаружил, заключается в том, что вы не можете загрузить SourceMaps из файловой системы. Он должен быть с веб-сервера. Чтобы обойти проблему с файловой системой, я считаю, что вы можете встроить SourceMap.
Этот поток на GitHub содержит много информации.
https://github.com/less/less.js/issues/1050#issuecomment-25621390