Есть ли инструмент командной строки для разбиения одного файла JavaScript на несколько небольших файлов? - PullRequest
0 голосов
/ 15 февраля 2012

При условии, что у меня есть огромный файл JavaScript, я хотел бы найти инструмент, который автоматически, например, указав MAX_SIZE, преобразует этот файл в набор файлов меньшего размера.

Существует ли такой инструмент?Было бы легко реализовать такой инструмент?

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Я не думаю, что такой инструмент существует, и попытка создать его - это огромная банка червей.Вы, очевидно, не можете разбить код на определенный размер, так как это, скорее всего, произойдет в середине какой-либо функции или другого.Следовательно, такой инструмент должен был бы иметь возможность анализировать JavaScript, чтобы не сломать его.Хуже того, не было бы никакой гарантии, что функции в разных файлах будут иметь какое-либо отношение друг к другу.Функция в одном файле может зависеть от констант и функций, определенных в любом количестве других файлов, что, в свою очередь, будет зависеть от других файлов, что приведет к колоссальному беспорядку.

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

0 голосов
/ 15 февраля 2012

Я согласен с предыдущим ответом, логическое подразделение должно быть сделано программистом.Кроме того, я полагаю, что не было бы никакого преимущества в разбивке файла на большее количество файлов, без удаления чего-либо, поскольку вы только получили бы некоторые издержки веб-передачи.

Кстати, ответить на вопрос, не спрашивая... на самом деле вы могли бы.

Большинство распространенных библиотек JS состоят из одного объявления огромного объекта, фактически являющегося единственным скриптовым оператором верхнего уровня, как в

libraryname = {
    fn1: function() { /* do something */ },
    fn2: function() { /* do something else */ },
    fn3: function() { /* do something else */ }
}

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

Код можно в любом случае разбить на допустимые куски, отличные от js, если их объединить перед выполнением.Просто разбейте код на множество текстовых файлов, извлеките их отдельно, затем объедините строки в правильном порядке и затем загрузите их на страницу.Загрузка может быть выполнена несколькими способами, в зависимости от того, чего вы хотите достичь.Вы можете либо создать новый элемент скрипта и добавить его к элементу head, либо вызвать для него eval.

Код может выглядеть примерно так (даже если его можно оптимизировать):

function loadScript(name, n) {
    var chunks = new Array(n);
    for(var i=0; i<n; i++)
        chunks[i] = getChunk(name, i); // simple blocking ajax call retrieving chunk content
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.innerHTML = chunks.join('');
    document.getElementsByTagName('head')[0].appendChild(script);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...