Javascript 有没有办法在require.js中动态设置baseurl?

Javascript 有没有办法在require.js中动态设置baseurl?,javascript,zend-framework2,requirejs,Javascript,Zend Framework2,Requirejs,我正在(基于zend framework 2的php应用程序引擎)上构建一个应用程序 在我的应用程序中,javascript文件路径取决于应用程序名,而应用程序名是 由安装人员挑选 例如,require.js的url为: http://my.site.name/asset/module-{module_name}/script/js/require.js 模块名称根据应用程序的名称而变化 我知道我可以在后端的“data main”属性中放置路径,如: <script data-main="

我正在(基于zend framework 2的php应用程序引擎)上构建一个应用程序

在我的应用程序中,javascript文件路径取决于应用程序名,而应用程序名是 由安装人员挑选

例如,require.js的url为:

http://my.site.name/asset/module-{module_name}/script/js/require.js

模块名称根据应用程序的名称而变化

我知道我可以在后端的“data main”属性中放置路径,如:

<script data-main="/asset/module-{module_name}/script/" src="/asset/module-{module_name}/script/js/require.js"></script>


但是我想知道是否有任何方法可以使用javascript动态设置baseurl,这样我就不需要接触后端。

如果我正确理解了您的问题,您可以在配置对象中使用“baseurl”,您可以在其中设置找到js文件的路径

require.config({
   baseUrl: "/js/"
});

此外,您可以在require.js加载之前将config对象定义为全局变量require,并自动应用这些值。此示例指定在require.js定义require()时立即加载一些依赖项:


var require={
baseUrl:generateBaseUrl()
};

感谢您的回答,我刚刚在第页找到了一个使用javascript的解决方案:


这似乎很奇怪,但它可以工作。

为了避免对全局作用域的污染,您可以将动态配置代码包装为立即执行的函数:

require.config((function(){
    var scripts = document.getElementsByTagName("script");
    return {
        baseUrl: '/asset' + scripts[scripts.length-1].src.match(/\/module.*?\//)[0]
    };
})());
如果我使用
baseUrl:“/js/”
,请求路径将变为
http://my.site.name/js/target.js
var scripts = document.getElementsByTagName("script");

require.config({
    baseUrl: '/asset' + scripts[scripts.length-1].src.match(/\/module.*?\//)[0] + 'script/',
}); 
require.config((function(){
    var scripts = document.getElementsByTagName("script");
    return {
        baseUrl: '/asset' + scripts[scripts.length-1].src.match(/\/module.*?\//)[0]
    };
})());