Показать сообщение отдельно
  #10 (permalink)  
Старый 09.06.2018, 12:05
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

А так работает?
/**
 * @author  Mikhailov «Nexus» Artem
 * @site    [url]https://vk.com/nexus94[/url]
 */

var require,requirePathPrefix='';
(function(){
	let __loaded_libraries={};
	const getArguments=function(args){
		return (args[0] instanceof Array)?args[0]:[].slice.call(args);
	};
	const get=function(type,args){
		if(!args.length)
			return Promise.resolve();

		return require(
			getArguments(args).map(function(path){
				return {
					type:type,
					src:path
				};
			})
		);
	};
	const Interface={
		js:function(url){
			return get('js',arguments);
		},
		css:function(url){
			return get('css',arguments);
		}
	};

	require=function(){
		if(!arguments.length)
			return Interface;

		const prom=Promise.all(getArguments(arguments).filter(function(path){
			path=(!!path.src&&!!path.type)?path:path.split('#').shift().split('?').shift();//remove hash and get-params

			return (!__loaded_libraries[path] || !!path.src) && ['css','js'].indexOf(
				!!path.type?
					path.type:
					path.split('.').pop().toLowerCase()
			)>-1;
		}).map(function(path){
			return new Promise(function(resolve,reject){
				__loaded_libraries[!!path.src?path.src:path]=true;

				let is_js=(!!path.type?
						path.type:
						path.split('#').shift().split('?').shift().split('.').pop().toLowerCase()
					)==='js',
					file_path=(!!path.src?path.src:path),
					src=((file_path.substr(0,2)==='//' || file_path.indexOf('http')===0)?'':requirePathPrefix)+
						file_path.replace('nocache','nocache='+Math.random()),
					node=document.createElement(is_js?'script':'link'),
					attrs=is_js?{
						type:'text/javascript',
						src:src
					}:{
						type:'text/css',
						href:src,
						rel:'stylesheet'
					};

				for(let i in attrs){
					if(attrs.hasOwnProperty(i))
						node.setAttribute(i,attrs[i]);
				};

				node.onload=resolve;
				node.onerror=reject;
				document.head.appendChild(node);
			});
		}));
		prom.catch(function(){
			alert('Не удалось загрузить файл. Обновите, пожалуйста, страницу.');
		});

		
		return prom;
	}
})();

require(['1.js','2.js','3.js']).then(function(){
	console.log('Все запросы выполнены успешно.');
});
Ответить с цитированием