【问题标题】:Django's 'collectstatic' with GulpDjango 与 Gulp 的“collectstatic”
【发布时间】:2015-11-04 06:19:21
【问题描述】:

我最近在我的 Django 工作流程中采用了 Gulp,但我对静态文件的存储有点困惑。

目前,我将 Django 的 STATIC_ROOT 设置为 E:/path/to/project/collectstatic/。所以,在我运行python src/manage.py collectstatic 之后;我的静态文件按预期收集。但是,我配置了我的gulpfile.js,以便在我的collectedstaic 目录中的文件上执行各种任务。这个输出 - 导致各种缩小和连接的文件 - 最终在一个新目录中,E:/path/to/project/static/

可悲的是,当访问站点的STATIC_URL时,正在从collectedstatic目录中获取静态文件;不是我想要的static 目录。

他们是否将收集文件的目录和提供文件的目录分开?或者,有没有人有更好的方法来配置我的 Gulp 文件?

gulpfile.js

var gulp = require('gulp');
var autoprefixer = require('gulp-autoprefixer');
var bowerlib = require('bower-files')();
var coffee = require('gulp-coffee');
var concat = require('gulp-concat');
var del = require('del');
var gzip = require('gulp-gzip');
var rename = require('gulp-rename');
var minifycss = require('gulp-minify-css');
var watch = require('gulp-watch');
var shell = require('gulp-shell');
var uglify = require('gulp-uglify');
var gutil = require('gulp-util');
var sass = require('gulp-sass');

var OPTIONS = {
  COLLECTSTATIC: {
    watch: 'src/**/static/**/*.*'
  },

  CSS: {
    src: 'collectedstatic/**/css/**/*.css',
    dest: 'static',
    watch: 'collectedstatic/**/css/**/*.css'
  },

  SCSS: {
    src: 'collectedstatic/scss/main.scss',
    dest: 'static/css',
    filename: "main.css",
    include: ['./bower_components/foundation/scss'],
    watch: 'collectedstatic/scss/**/*.scss'
  },

  BOWERJS: {
    dest: 'static/js',
    filename: "lib.js",
  },

  JS: {
    src: 'collectedstatic/**/js/**/*.js',
    dest: 'static',
    watch: 'collectedstatic/**/js/**/*.js'
  },

  COFFEE: {
    src: 'collectedstatic/coffee/**/*.coffee',
    dest: 'static/js',
    filename: "main.js",
    watch: 'collectedstatic/coffee/**/*.coffee'
  },

  GZIP: {
    threshold: '1kb',
    gzipOptions: {
      level: 9
    }
  },

  DEL: ['collectedstatic', 'static']
}

// Delete task
gulp.task('delete', function() {
  del(OPTIONS.DEL);
});

// Execute collectstatic
gulp.task('collectstatic', shell.task([
  'python src/manage.py collectstatic --noinput'
]));

// Compile our CSS
gulp.task('css', function() {
  return gulp.src(OPTIONS.CSS['src'])
    .pipe(autoprefixer())
    .pipe(minifycss())
    .pipe(gzip(OPTIONS.GZIP))
    .pipe(gulp.dest(OPTIONS.CSS['dest']))
});

// Compile our SCSS
gulp.task('scss', function() {
  return gulp.src(OPTIONS.SCSS['src'])
    .pipe(sass().on('error', gutil.log))
    .pipe(autoprefixer())
    .pipe(gulp.dest(OPTIONS.SCSS['dest']))
    .pipe(rename({suffix: '.min'}))
    .pipe(minifycss())
    .pipe(gulp.dest(OPTIONS.SCSS['dest']))
    .pipe(gzip(OPTIONS.GZIP))
    .pipe(gulp.dest(OPTIONS.SCSS['dest']))
});

// Compile Bower JavaScript
gulp.task('bowerjs', function() {
  return gulp.src(bowerlib.ext('js').files)
    .pipe(concat(OPTIONS.BOWERJS['filename']))
    .pipe(gulp.dest(OPTIONS.BOWERJS['dest']))
    .pipe(rename({suffix: '.min'}))
    .pipe(uglify())
    .pipe(gzip(OPTIONS.GZIP))
    .pipe(gulp.dest(OPTIONS.BOWERJS['dest']))
});

// Compile our JavaScript
gulp.task('js', function() {
  return gulp.src(OPTIONS.JS['src'])
    .pipe(uglify())
    .pipe(gulp.dest(OPTIONS.JS['dest']))
});

// Compile our CoffeeScript
gulp.task('coffee', function() {
  return gulp.src(OPTIONS.COFFEE['src'])
    .pipe(coffee({bare: true}).on('error', gutil.log))
    .pipe(uglify())
    .pipe(concat(OPTIONS.COFFEE['filename']))
    .pipe(gulp.dest(OPTIONS.COFFEE['dest']))
});

// Default task
gulp.task('default', ['delete', 'collectstatic'], function() {
  gulp.start('css');
  gulp.start('scss');
  gulp.start('js');
  gulp.start('coffee');
});

// Watch Files For Changes
gulp.task('watch', ['default'], function() {
  gulp.watch(OPTIONS.COLLECTSTATIC['watch'], ['collectstatic']);
  gulp.watch(OPTIONS.CSS['watch'], ['css']);
  gulp.watch(OPTIONS.SCSS['watch'], ['scss']);
  gulp.watch(OPTIONS.JS['watch'], ['js']);
  gulp.watch(OPTIONS.COFFEE['watch'], ['coffee']);
});

【问题讨论】:

  • 本文建议创建一个 build 目录(我假设将其添加到 STATICFILES_DIRS)用于开发,然后在准备生产时,对 build 中的这些文件执行 collectstatic 到 @987654337 @目录:lincolnloop.com/blog/…

标签: python django gulp bower


【解决方案1】:

由于集成 Gulp 的复杂性,我们选择主要使用 Django Compressor:https://github.com/edx/ecommerce

  1. build.js 将我们所有的 JS 依赖项收集到一个已知位置。
  2. STATICFILES_DIRS 已更新为首先查看此位置(如果您在开发时忘记删除此目录,这可能会出现问题)。
  3. 模板继续照常引用 SCSS 和 JS 文件。
  4. Django Compressor 负责 (a) 编译 SCSS 和 (b) 缩小所有资产。 (Compressor 也可以编译 CoffeeScript。)

我们仅使用 Gulp 来运行测试和质量检查。我们对collectstaticcompress 的调用如下所示:

$ $(NODE_BIN)/r.js -o build.js $ python manage.py collectstatic --noinput -v0 $ python manage.py compress -v0

【讨论】:

  • 感谢您的回复!可悲的是,我非常热衷于使用 Gulp 来做这件事。由于这是一个“学习”项目,与 Django 替代品相比,Gulp 似乎非常值得学习。
【解决方案2】:

您可以使用django-gulp,它适用于 runserver 和 collectstatic。

【讨论】:

    猜你喜欢
    • 2015-02-04
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2018-10-03
    • 2017-05-30
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多