Javascript RequireJS优化器-仍在尝试从旧目录加载文件-w/Django
需要一些关于requireJS优化器的帮助。 我的设置如下:Javascript RequireJS优化器-仍在尝试从旧目录加载文件-w/Django,javascript,django,requirejs,Javascript,Django,Requirejs,需要一些关于requireJS优化器的帮助。 我的设置如下: 德扬戈 Django静态文件夹中的JS 文件夹结构 - dist - copy of /static/ after optimizer (dir) - django_app01 - django_app02 - django_app ... - static - bower_components - js 我在做什么: 在静态文件夹上运行r.js r、 js按预期选择文件并将其移动到“dist”文件夹 更
- 德扬戈
- Django静态文件夹中的JS
- dist
- copy of /static/ after optimizer (dir)
- django_app01
- django_app02
- django_app ...
- static
- bower_components
- js
我在做什么:
mainConfigFile : "static/js/require/common.js",
baseUrl: "static",
dir: "dist",
removeCombined: false,
findNestedDependencies: false,
modules: [
{
name: "js/require/common"
},
...
]
mainConfigFile : "static/js/require/common.js",
baseUrl: "static",
dir: "dist",
removeCombined: false,
findNestedDependencies: false,
modules: [
{
name: "js/require/common"
},
...
]
common.js:
requirejs.config({
baseUrl: '/static/',
paths: {
'jquery': 'bower_components/jquery/dist/jquery.min',
...
},
'shim': {
'blah': {
'deps': [...],
'exports': 'blah'
},
...
}
})
requirejs.config({
// baseUrl: '/static/', DO NOT DEFINE baseUrl here anymore
paths: {
'jquery': 'bower_components/jquery/dist/jquery.min',
...
},
'shim': {
'blah': {
'deps': [...],
'exports': 'blah'
},
...
}
})
html:
需要(['{%static“js/interfaces.js”%}']);
根据您在问题中显示的内容判断,您在未优化文件时使用的运行时配置与优化后使用的配置相同。也就是说,您只有一个common.js
文件为这两种情况设置运行时。此文件设置了/static/
的baseUrl
,因此RequireJS在这里查找文件。优化过程不会在幕后覆盖此设置
对于我的一个项目,我所做的是将要优化的源代码放入一个只针对源代码的目录(static src
)。Django对此目录一无所知。然后,当我运行make
构建项目时,会发生以下两种情况之一:
static src
复制到名为build/static build
的目录中。(在build
下还有其他用于其他目的的子目录r.js
r.js
将其输出放入build/static build
STATICFILES\u DIRS
在我的settings
中设置,以便在运行collectstatic
时从该目录中获取文件。我的服务器设置为服务/static/
(static\u URL
的值)来自collectstatic
收集静态文件的位置的文件
这只是一个例子。你可以使用
make
之外的其他东西。你当然可以使用不同的目录名。你可能有一个更简单的构建过程。(我在对Django非常陌生的时候创建了它,从来没有想过要修改它。)好的,我想知道如何在不使用监视程序、或制作
或任何其他文件夹复制脚本的情况下执行此操作
requireJS允许您在HTML顶部加载require.js库之前设置默认变量
我对以前的配置所做的更改包括:
-不再在模块定义中定义baseUrl
(requirejs.config
)
-根据环境将baseUrl
定义为默认值
build.js:
mainConfigFile : "static/js/require/common.js",
baseUrl: "static",
dir: "dist",
removeCombined: false,
findNestedDependencies: false,
modules: [
{
name: "js/require/common"
},
...
]
mainConfigFile : "static/js/require/common.js",
baseUrl: "static",
dir: "dist",
removeCombined: false,
findNestedDependencies: false,
modules: [
{
name: "js/require/common"
},
...
]
common.js:
requirejs.config({
baseUrl: '/static/',
paths: {
'jquery': 'bower_components/jquery/dist/jquery.min',
...
},
'shim': {
'blah': {
'deps': [...],
'exports': 'blah'
},
...
}
})
requirejs.config({
// baseUrl: '/static/', DO NOT DEFINE baseUrl here anymore
paths: {
'jquery': 'bower_components/jquery/dist/jquery.min',
...
},
'shim': {
'blah': {
'deps': [...],
'exports': 'blah'
},
...
}
})
html:
var require={
baseUrl:{%if debug%}'/static/'{%else%}'/dist/'{%endif%}
}
需要(['{%static“js/interfaces.js”%}']);
如果在本地主机上运行此操作,/cdn..
不起作用-将其更改为http://cdn..
我正在运行一个解析这些URL的本地服务器。我仔细检查了我的“网络”选项卡,这已得到正确解析。将在此处的注释中更新我的解决方案。我们没有使用make
,因此我们将e寻找一个不同的解决方案。感谢@Louis的帮助,你的回答让我找到了我自己的解决方案,我觉得效果更好。请参阅接受的答案。:)对任何给定项目来说,什么是最好的取决于项目。我确实需要一个构建过程,因为a)我的RequireJS运行时配置的其他部分根据构建条件而变化,b)其他文件在构建过程中需要处理。我也不想将是否使用优化版本与我是否处于调试模式({%if debug%}
)联系起来。是的,这是完全有意义的!我的项目设置稍有不同,此解决方案更适合它。我很高兴这个问题有两种解决方案。我广泛使用debug
,因此它更有意义。