Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.02.2012, 02:52
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

require как в ноде
Когда-то давно не имел представления, как сделать включение скриптов в браузере как в ноде. Сегодня опыта немного больше. Посидев пару десятков минут, сделал. Есть более функциональные импортеры модулей, этот мини скрипт создан чисто из спортивного интереса. Может быть кому-то это покажется полезным.

Функция require принимает на себя два параметра: адрес скрипта и опциональный колбек.
Если колбек не указан, то запрос на сервер будет идти синхронно, а возвращаться будет модуль. Если не указан, то возвращается null, а аргументом коллбека будет модуль.
Пример:
var module = require('module.js'); // module теперь извлекаемый модуль
//...

или
var module;
require('module.js', function( m ){
	module = m;
	//...
});


Пример файла модуля:
var local = 'local';

exports.method1 = function(){
	alert('method 1, local=' + local)
};

this.method2 = function(){
	alert('method 2')
};


Собственно, функция require:
window.require = function require(path, callback) {
	    var req = new XMLHttpRequest(),
	        module = null,
	        async = !! callback,
	        createModule = function (text) {
	            return (new Function('var exports = this;' + text + '; return this;')).call({});
	        };

	    req.open('GET', path, async);
	    req.onreadystatechange = function () {

	        if (req.readyState === 4) {
	            if (req.status === 200) {
	                module = createModule(req.responseText);
	                callback && callback(module);
	            } else {
	                throw new Error('Module ' + path + ' not found');
	            }
	        }
	    };

	    req.send(null);
	    return module;
	};
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности

Последний раз редактировалось FINoM, 17.02.2012 в 05:53.
Ответить с цитированием
  #2 (permalink)  
Старый 17.02.2012, 08:49
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от FINoM
require как в ноде
Нода имеет прямой доступ к файловой системе, браузер его не имеет. С учётом этого важного факта, зачем делать как в ноде?
Ответить с цитированием
  #3 (permalink)  
Старый 17.02.2012, 11:00
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

http://requirejs.org/
Ответить с цитированием
  #4 (permalink)  
Старый 17.02.2012, 14:11
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Kolyaj
Нода имеет прямой доступ к файловой системе, браузер его не имеет. С учётом этого важного факта, зачем делать как в ноде?
Не знаю, захотелось.
Сообщение от DreamTheater
http://requirejs.org/
Я в курсе, спасибо.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #5 (permalink)  
Старый 18.02.2012, 08:34
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Кеширования загруженного не хватает, чтоб одно и тоже по 5 раз не грузилось.
Ответить с цитированием
  #6 (permalink)  
Старый 18.02.2012, 11:30
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

а если скрипт на другом домене ?
Ответить с цитированием
  #7 (permalink)  
Старый 18.02.2012, 13:33
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

<script src="anotherDomain.js"></script>
Ответить с цитированием
  #8 (permalink)  
Старый 18.02.2012, 17:07
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

tadjik1,
Тогда вся концепция экспортов разлетается. В общем загрузка модулей это актуально, но таким подходом написанном на коленке ничего не добиться.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #9 (permalink)  
Старый 18.02.2012, 18:04
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Riim
Кеширования загруженного не хватает, чтоб одно и тоже по 5 раз не грузилось.
Эм, кеширование, обычно, делают на сервере.
Сообщение от melky
а если скрипт на другом домене ?
Сам знаешь, через YQL
Сообщение от Nekromancer
В общем загрузка модулей это актуально, но таким подходом написанном на коленке ничего не добиться.
Ну я не претендую на уникальность или полезность. Можно, например, еще и добавить загрузку списка модулей, как в requirejs.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #10 (permalink)  
Старый 18.02.2012, 21:32
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Nekromancer, а какой подход по-твоему был бы хорош?
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отловить обратное событие "click" ? jsuse Общие вопросы Javascript 2 18.01.2012 00:16
Как создать таймер, как на Letitbit? free_style Javascript под браузер 1 01.07.2010 17:55
While как условные выражения Latro Общие вопросы Javascript 23 27.06.2010 14:53
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56
как можно создать iframe со скриптами GOll Общие вопросы Javascript 2 05.05.2009 11:32