Требовать, чтобы JS не загружался, если он не находится на корневом пути

У меня проблема с настройкой requirejs, я пытался ее исправить, но каждый раз ломаю приложение. Вот мой index.html

<script type="text/javascript" src="/js/bower_components/requirejs/require.js"></script>
<script>
    // obtain requirejs config
    require(['require', 'js/require-config'], function (require, config) {

        // update global require config
        window.require.config(config);

        // load app
        require(['main']);
    });
</script>

Это работает хорошо, если я загружаю приложение из корневого пути "/", но как только я пытаюсь обновить приложение в другом месте (например, /user/1), я получаю следующую ошибку:

Ресурс интерпретируется как скрипт, но передается с типом MIME text/html: "http://domain.local/users/js/require-config.js".

require.js: 1895 Uncaught SyntaxError: Неожиданный токен ‹

require-config.js:1 Ресурс интерпретируется как сценарий, но передается с типом MIME text/html: "http://domain.local/users/main.js".

require.js: 1895 Uncaught SyntaxError: Неожиданный токен ‹

как видите, он ищет файл по относительному пути: http://domain.local/users/js/require-config.js

но должно загрузиться: http://domain.local/js/require-config.js

если я добавлю / перед модулем, то он больше не работает, потому что ищет файл вместо модуля:

<script type="text/javascript" src="/js/bower_components/requirejs/require.js"></script>
<script>
    // obtain requirejs config
    require(['require', '/js/require-config'], function (require, config) {

        // update global require config
        window.require.config(config);

        // load app
        require(['/js/main']);
    });
</script>

Ресурс интерпретируется как сценарий, но передается с типом MIME text/html: "http://domain.local/js/require-config". требуют.js: 1895

Uncaught SyntaxError: Неожиданный токен ‹ require-config:1 Ресурс интерпретируется как сценарий, но передается с типом MIME text/html:

"http://domain.local/js/main". require.js: 1895 Uncaught SyntaxError: Неожиданный токен ‹

Я пробовал пару комбинаций, но каждый раз что-то ломалось :(

Помощь будет принята с благодарностью ;)


person maxwell2022    schedule 03.07.2014    source источник


Ответы (2)


Если ваш путь начинается с «/», добавьте расширение .js.

<script type="text/javascript" src="/js/bower_components/requirejs/require.js"></script>
<script>
    // obtain requirejs config
    require(['require', '/js/require-config.js'], function (require, config) {

        // update global require config
        window.require.config(config);

        // load app
        require(['/js/main.js']);
    });
</script>

Лучше использовать эту часть:

index.html :

<script data-main="/js/require.file.js" src="/js/bower_components/requirejs/require.js"></script>

требуют.file.js:

require.config({ // Your config :
    baseUrl: "/js"
});
require(["main"],
    function(someModule, myModule) {
        //onload.
    }
);

Подробнее : Параметры конфигурации

person A-312    schedule 08.07.2014

Была аналогичная проблема. Просто проверьте, не запрашиваете ли вы файлы с расширением, например:

require.config({
    paths: {
        jqueryui: 'js/vendor/jquery.ui.widget.js'
    }
})

Просто удалите часть .js из имени файла:

require.config({
    paths: {
        jqueryui: 'js/vendor/jquery.ui.widget'
    }
})

Почему возникла проблема? Поскольку структура, которую я использовал в своем бэкэнде, обслуживала свои собственные страницы 404, поэтому вместо ответа 404 от serve я всегда видел полностью сгенерированную действительную HTML-страницу.

person Kamil Szymański    schedule 11.08.2015