Подтвердить что ты не робот

Требовать в браузере не работает имя переменной

Я пытаюсь require файла с браузером использовать переменные, переданные в функцию:

var playersOptions = {
    name: 'players',
    ajax: 'team-overview',
    route: {
        name: 'overview',
        path: 'playersOverview',
        url: 'playersoverview'
    }
 };

var BackboneView = require(playersOptions.route.path); 
//Error: Uncaught Error: Cannot find module 'playersOverview'

var BackboneView = require('playersOverview');
//Requires the file without any problems.

Я смущен, почему это не удастся? Как он не может найти модуль, когда оба являются строками?

4b9b3361

Ответ 1

Browserify должен иметь возможность статически анализировать все запросы, требуемые во время сборки, чтобы он мог знать, какие файлы необходимо включать в комплект. Это требует, чтобы require можно было использовать только со строковым литералом в исходном коде.

Вместо того, чтобы передавать имя модуля, требующего позже, просто передайте сам модуль:

var playersOptions = {
    name: 'players',
    ajax: 'team-overview',
    route: {
        name: 'overview',
        module: require('playersOverview'),
        url: 'playersoverview'
    }
 };

var BackboneView = playersOptions.route.module;

Даже если этого ограничения для браузера не было (например, если вы использовали напрямую node.js), все же рекомендуется избегать передачи имен модулей, которые потребуются позже, потому что вызов вызова может прерываться, если модуль имя, переданное ему, имело путь относительно каталога вызывающего абонента и передавалось в код в файле внутри другого каталога.