我正在Pi-engine(一个基于zend框架2的php应用程序引擎)上构建一个应用程序。
在我的应用程序中,javascript文件路径取决于应用程序名称,而应用程序名称则是 由安装人员挑选。
例如,require.js的网址为:
http://my.site.name/asset/module-{module_name}/script/js/require.js
module_name根据应用程序的名称进行更改。
我知道我可以将路径放在后端的'data-main'属性中,如:
<script data-main="/asset/module-{module_name}/script/" src="/asset/module-{module_name}/script/js/require.js"></script>
但是我想知道有没有办法使用javascript动态设置baseurl,这样我就不需要触摸后端了。
答案 0 :(得分:10)
http://requirejs.org/docs/api.html#config
此外,您可以在加载require.js之前将配置对象定义为全局变量require,并自动应用值。此示例指定在require.js定义require():
时立即加载的一些依赖项<script>
var require = {
baseUrl: generateBaseUrl()
};
</script>
<script src="scripts/require.js"></script>
答案 1 :(得分:0)
如果我正确理解了您的问题,您可以在配置对象中使用'baseUrl',您可以在其中设置找到js文件的路径。
require.config({
baseUrl: "/js/"
});
答案 2 :(得分:0)
感谢您的回答,我刚刚在页面上找到了使用javascript的解决方案:how to get the absolute path of the current javascript file name
var scripts = document.getElementsByTagName("script");
require.config({
baseUrl: '/asset' + scripts[scripts.length-1].src.match(/\/module.*?\//)[0] + 'script/',
});
看起来很奇怪,但确实有效。
答案 3 :(得分:0)
为了避免污染全局范围,您可以像在您的情况下一样在即时执行的函数中包装动态配置代码:
require.config((function(){
var scripts = document.getElementsByTagName("script");
return {
baseUrl: '/asset' + scripts[scripts.length-1].src.match(/\/module.*?\//)[0]
};
})());