javascript - RequireJS加载模块要根据ROOT URL + baseUrl +模块路径进行修复

标签 javascript requirejs amd

您好,我正在使用 requirejs 将我的 javascript 代码组织到 AMD 模块中,我现在正在使用 codeigniter 构建一个非单页网站,我所做的是我有一个默认布局 html 文件,我总是调用它呈现正文的动态内容,以便调用 requirejs 并具有 data-main 属性的脚本在我的布局 html 页面上进行编码。

<script data-main="<?=base_url('assets/js/main.js');?>" src="<?=base_url('assets/js/require.js');?>"></script>

我的 main.js 看起来像这样。

requirejs.config({
baseUrl: "assets/js",
paths: {
    jquery: 'vendor/jquery',

    bootstrap: 'vendor/bootstrap',

    datatables: 'vendor/jquery.dataTables'

},

shim: {
    jquery: { exports: '$' },
    datatables: { deps: ['jquery'] }
}
});

requirejs(['bootstrap','datatables'], function(){

})

所以当我在我的 url 上输入“localhost/ci-project/”时,它会加载布局页面和动态主体。在这种情况下它工作正常。 sicne requirejs 将正确呈现路径“localhost/ci-project/assets/js/vendor/[js file/module]”

但是当我将 URL 更改为“localhost/ci-project/welcome/admin”时。 requirejs 加载模块的方法是将 baseUrl + 模块路径连接到当前 URL,在本例中为“localhost/ci-project/welcome/admin”,最终结果如下:

'localhost/ci-project/welcome/admin/assets/js/vendor/[module]' 这是错误的。

那么我如何配置 requirejs 始终从根 url 加载,然后将 baseUrl 值与每个模块的路径连接在一起?

最佳答案

解决这个问题的方法是从服务器端变量输出 baseUrl

在您的 PHP 页面中:

<script>
var require = {
    baseUrl: '<?= base_url(); ?>' // Or whatever outputs the full path to your site root
};
</script>
<script data-main="<?=base_url('assets/js/main.js');?>" src="<?=base_url('assets/js/require.js');?>"></script>

在加载 RequireJS 之前创建一个 require 对象允许您定义将被自动拾取的配置选项。

main.js 中再次调用 require.config() 没问题,它只会添加额外的配置选项,但一定要删除 baseUrl 从那里开始。

关于javascript - RequireJS加载模块要根据ROOT URL + baseUrl +模块路径进行修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18374808/

相关文章:

javascript - AngularJs $injector :modulerr after RequireJS r. js 优化

javascript - 如何使用 tsc 从 typescript 生成 amd 模块?

javascript - 如何默认将主干 View 设置为单例?

javascript - 嵌套循环 JavaScript

javascript - 其他用户的 SharePoint API 权限错误

javascript - 多个关键帧但似乎没有运行

knockout.js - 使用 requireJS 加载 knockout 组件 View 模型的问题

javascript - RequireJS 和遗留应用程序

pytorch - 如何将 AMD GPU 用于 fastai/pytorch?

javascript - Kendo 拖放似乎在 Surface Pro 3 上的 Chrome 中不起作用