ну норм же, че
А оно нормально дружит со staticfiles?
нормально. Там нечему конфликтовать вообще. Это разные вещи, живущие параллельно и не мешающие друг другу.
У меня недавно был небольшой срач с другим разрабом по этому поводу.
Нет повода для срача даже.
Он говорит, что нету либ для интеграции с джангой,
вероятно он прав. Но какая такая нужна интеграция?
а я говорю, что просто складывать grunt'ом в STATICFILES_DIRS и будет норм. и по collectstatic собираться будет.
а это правда истинная.
Если не сложно, скиньте гайд или пример конфига для проекта. Буду очень благодарен
гайдов не знаю, а вот пример грунтфайла:
module.exports = (grunt) ->
grunt.initConfig
pkg: grunt.file.readJSON("package.json")
copy:
images:
expand: true,
cwd: "assets/images/"
src: "**"
dest: "src/static/images/"
requirements:
src: "requirements.txt"
dest: "src/requirements.txt"
sass:
development:
options:
style: 'expanded'
sourcemap: 'inline'
files:
"src/static/css/style.css": "assets/sass/style.scss"
production:
options:
style: 'compressed'
sourcemap: 'none'
files:
"src/static/css/style.css": "assets/sass/style.scss"
coffee:
compile:
files:
"src/static/js/script.js": [
"assets/coffee/script.coffee"
]
concat:
js:
src: [
"bower_components/jquery/dist/jquery.js"
"bower_components/jqueryui/ui/effect.js"
"bower_components/bootstrap/dist/js/bootstrap.js"
"bower_components/fancybox/source/jquery.fancybox.js"
"bower_components/jquery-form/jquery.form.js"
"src/static/js/script.js"
]
dest: "src/static/js/script.js"
css:
src: [
"bower_components/fancybox/source/jquery.fancybox.css"
"src/static/css/style.css"
]
dest: "src/static/css/style.css"
uglify:
build:
src: "src/static/js/script.js"
dest: "src/static/js/script.js"
watch:
sass:
files: "assets/sass/**/*.scss"
tasks: ["sass:development"]
coffee:
files: "assets/coffee/**/*.coffee"
tasks: ["coffee", "concat"]
images:
files: "assets/images/**/*"
tasks: ["copy:images"]
requirements:
files: "requirements.txt"
tasks: ["copy:requirements"]
grunt.loadNpmTasks "grunt-contrib-watch"
grunt.loadNpmTasks "grunt-contrib-sass"
grunt.loadNpmTasks "grunt-contrib-concat"
grunt.loadNpmTasks "grunt-contrib-uglify"
grunt.loadNpmTasks "grunt-contrib-copy"
grunt.loadNpmTasks "grunt-contrib-coffee"
grunt.registerTask "default", ["copy", "sass:development", "coffee", "concat", "watch"]
grunt.registerTask "build", ["copy", "sass:production", "coffee", "concat", "uglify"]
Тот самый, который на скриншоте. Он тупейший, чисца посоны наверняка заругают. Но работает. Тут, правда, sass, а не less, но в случае с less'ом всё очень похоже. Задача может быть например такой:
less:
development:
options:
compress: false
sourceMap: true
sourceMapURL: "/static/css/style.css.map"
files:
"src/static/css/style.css": "assets/less/style.less"
"src/static/css/old_ie.css": "assets/less/old_ie.less"
production:
options:
compress: true
sourceMap: false
files:
"src/static/css/style.css": "assets/less/style.less"
"src/static/css/old_ie.css": "assets/less/old_ie.less"
…
grunt.loadNpmTasks "grunt-contrib-less"
Просто компилируем и складываем в каталог для статики. Каталог прописывается вручную без всякой интеграции. То есть, если вдруг в settings.py меняем эту настройку, то в грунтфайле надо будет вручную поменять. Может быть об этом говорил коллега? Но какой-то катастрофы я в этом не вижу совсем. Не так часто меняется размещение статики в проекте. Делаем два варианта сборки: для разработки отключаем компрессию и включаем sourcemap, а для продакшна наоборот.
Задача watch следит за изменениями исходников и автоматом запускает нужную задачу для сборки sass/less/coffeescript. Все исходники хранятся отдельно за пределами каталога с джанго-проектом. Может показаться неочевидным, зачем картинки хранятся отдельно и копируются. Так в этом нет объективной необходимости, это я подстраиваюсь под дефолтное поведение PyCharm'а, который начинает горько плакать, если видит конструкцию вроде background-umage: url(../images/image.png);
, а по заявленному адресу картинки не находит. Подсвечивает как ошибку.
После сборки на продакшн выгружается только каталог с джанго-проектом без всякой мишуры вроде sass/less/coffeescript-исходников, локального виртуального окружения, npm_modules или bower_components.