Я уверен, что кто-то скажет мне, почему это ужасная идея, но это может быть лучше, чем то, что мы продолжаем. Таким образом, все наши плагины были скопированы/вставлены в скрипт Master.js, который является кошмаром для обновления или сортировки. Большинство плагинов минитизированы (что хорошо), но я бы очень хотел взять идею связывания из .net/C#/aspx и реализовать что-то вроде этого, чтобы избавиться от этого файла Master.js. Копирование/вставка новые сценарии часто заморозить проект и почти все в нем устарел, - так вот моя сумасшедшая наука:Решение «Bundling» для HTML/JS?
В Master.js, создать массив из всех сценариев, используемый:
var scripts = [
'jquery-1.10.2.min.js', // jQuery v1.10.2 | 2005 (https://code.jquery.com/)
'jquery-migrate-1.2.1.min.js', // jQuery Migrate v1.2.1 | 2005 (https://code.jquery.com/)
'jquery-ui.min.js', // jQuery UI v1.10.3 | 2014-09-14 (https://code.jquery.com/)
'bootstrap.min.js', // Bootstrap v3.1.0 | 2014 (http://getbootstrap.com)
];
и создать петля для добавления скриптов на странице:
for (var i = 0; i < scripts.length; i++) {
var link = 'MainJS/' + scripts[i];
LoadJsCssFilePortal(link, 'js');
};
function LoadJsCssFilePortal(filename, filetype, callback) {
// if filename is a external JavaScript file
if (filetype == "js") {
var fileref = document.createElement('script');
fileref.setAttribute("type", "text/javascript");
fileref.setAttribute("src", filename);
};
if (typeof fileref != "undefined") {
// add this script to the document
document.getElementsByTagName("head")[0].appendChild(fileref);
};
};
у меня также есть функция
function LoadAndRunPortalJS(url, callback) {
var script = document.createElement("script")
script.type = "text/javascript";
if (script.readyState) { //IE
script.onreadystatechange = function() {
if (script.readyState === "loaded" || script.readyState === "complete") {
script.onreadystatechange = null;
callback();
}
};
} else { //Others
script.onload = function() {
callback();
};
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
};
который имеет встроенный в функции обратного вызова и называется такой
LoadAndRunPortalJS(link, function() {
// when done load next
});
Вопрос заключается в том, что сценарии не закончили загрузку до того
- следующего приращения в контуре
- другие сценарии на страницы, которые зависят от Master.js
Как правило, можно использовать объект отложенных jquery для обеспечения порядка/завершения сценариев, чтобы это могло возможно bly будет использоваться после загрузки первого скрипта (jquery) i> 0, но это не решит проблему скриптов, запущенных за пределами мастера.
Эта проблема была всесторонне решена с помощью разумных процессов сборки (Gulp, Grunt и т. Д.) И плагинов для них (minifiers, bundles).Решения продолжают развиваться; забавно, с модулями HTTP/2 и ES2015, через несколько лет мы, возможно, больше не почувствуем необходимость в комплектации (нам все равно потребуется минимизация). В любом случае, я не вижу здесь вопроса, по крайней мере, не достаточно узкого для ответа SO. –
Я работаю в Visual Studio, а внутренний код обрабатывается с помощью C#, но я не могу изменить расширение страниц. Я знаю, были ли они aspx, связывание было бы возможно, но у меня нет такого варианта. – triplethreat77
@ triplethreat77 - Это не должно отрицательно повлиять на вашу способность реализовать процесс сборки/минимизации времени сборки. – Quentin