我想让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。
答案 0 :(得分:1)
根据我的经验,如果所有主要脚本(在requirejs脚本标记上设置为data-main)都在baseUrl的根目录下,则RequireJS的效果会更好。
因此,在您的情况下,我将使用django-require的所有默认设置,然后只设置REQUIRE_BUILD_PROFILE。
然后我将所有数据主脚本放在js文件夹的根目录中。
RequireJS的作者实际上建议保持RequireJS项目的文件夹结构非常简单。