0

我正在创建一个 Makefile 来自动化我的 Django 应用程序的“构建”过程。第一步是压缩所有静态 CSS 和 JS 文件。到目前为止,这是我的 Makefile:

CSS_FILES = $(shell find static -type f -name "*.css")
CSS_GZ_FILES = $(CSS_FILES:.css=.css.gz)
JS_FILES = $(shell find static -type f -name "*.js")
JS_GZ_FILES = $(JS_FILES:.js=.js.gz)

all: static $(CSS_GZ_FILES) $(JS_GZ_FILES)

bower_components: bower.json
    bower --config.interactive=false install

static: bower_components
    python manage.py collectstatic --noinput

%.gz: %
    gzip -9 -c -f $< > $@

clean:
    rm -rf bower_components static

如果您不熟悉 Django,静态目标会将一堆 JS 和 CSS(以及更多)文件转储到static目录中。

static问题是,在目标运行之前无法确定 CSS 和 JS 文件的列表。所以第一次运行时make,没有文件被压缩。collectstatic我想要的是运行后要重新评估的 CSS、JS 文件列表。

我考虑过collectstatic在运行 make 之前运行来解决这个问题,但collectstatic它本身取决于不同的 make 规则。

如果它有帮助,这个 Makefile 将只能与 GNU Make 一起运行。

4

1 回答 1

1

解决此问题的最佳方法是使用自动生成的 makefile。像这样的东西应该可以正常工作;在你的makefile顶部附近添加(在你使用$(CSS_FILES)$(JS_FILES)做任何事情之前):

-include static-output.mk

然后在你的makefile底部附近添加(或者至少,不是作为第一个目标):

static-output.mk: bower_components
        python manage.py collectstatic --noinput
        @( echo 'CSS_FILES := $$(shell find static -type f -name "*.css")'; \
           echo 'JS_FILES := $$(shell find static -type f -name "*.js")'; ) \
         > $@

并从您的 makefile 中删除 CSS_FILES 和 JS_FILES 的设置并删除“静态”内容。我真的不明白“bower_components”的用途或来源,所以我无法就此提出建议。

于 2013-09-20T15:01:22.593 回答