使用django-require正确使用REQUIRE_BASE_URL

时间:2013-05-27 02:47:02

标签: javascript django requirejs

我想让django-require努力管理JS依赖关系和缩小。但是,我在使用requireJS baseUrl时遇到了困难。

require.js位于project/static/require.js,页面JS位于project/static/pages/pageA.js,依此类推。

以下是django-require设置。

REQUIRE_BASE_URL = os.path.join(PROJECT_DIR, 'static')
REQUIRE_BUILD_PROFILE = 'app.build.js'
REQUIRE_JS = "require.js"
REQUIRE_STANDALONE_MODULES = {}
REQUIRE_DEBUG = DEBUG
REQUIRE_EXCLUDE = ("build.txt",)
REQUIRE_ENVIRONMENT = "auto"

在静态文件收集/处理期间以及通过浏览器提供时,我无法使基本URL正确无误。如果我这样设置:

REQUIRE_BASE_URL = os.path.join(PROJECT_DIR, 'static')

然后编译过程成功(node找到r.js等等)。但是,像{% require_module pages/pageA %}这样的模板标记会像这样呈现:

<script data-main="/var/www/project/static/pages/pageA.js" src="/var/www/project/static/require.js"></script>

这从浏览器端失败,因为路径是机器实际文件系统上的路径,而不是网站结构!

但是,如果我像这样设置基本网址:

REQUIRE_BASE_URL = 'static'

然后编译步骤失败,因为r.js正在使用本地文件系统上不存在的路径调用(但在网站上存在):

File "/usr/local/lib/python2.7/dist-packages/require/storage.py", line 50, in run_optimizer
  raise OptimizationError("Error while running r.js optimizer.")

在这种情况下,渲染的脚本标记是正确的。

提供r.js本地文件路径的正确方法是什么,但是使用django-require在模板代码中输出与网站相关的路径?

编辑:也发布到django-require邮件列表here

1 个答案:

答案 0 :(得分:1)

根据我的经验,如果所有主要脚本(在requirejs脚本标记上设置为data-main)都在baseUrl的根目录下,则RequireJS的效果会更好。

因此,在您的情况下,我将使用django-require的所有默认设置,然后只设置REQUIRE_BUILD_PROFILE。

然后我将所有数据主脚本放在js文件夹的根目录中。

RequireJS的作者实际上建议保持RequireJS项目的文件夹结构非常简单。

http://requirejs.org/docs/api.html#jsfiles