1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/janpoem-require-any

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

На основе AMD (requirejs) механизма, загружаются современные файлы JavaScript-кода, такие как CoffeeScript, React и ECMAScript 6. Они компилируются в реальном времени в формат JS и сохраняются в кэше HTML5 LocalStorage.

Название «any» объединяет значения «anytime» и «anything».

Установка

Существует три ветви:

  • master — включает require-any, transpiler-babel и transpiler-coffee;
  • babel — включает require-any и transpiler-babel;
  • coffee — включает require-any и transpiler-coffee.

Исходный код всех трёх ветвей одинаков, различия только в bower.json.

bower install require-any
// или вы используете только ES6
bower install require-any#babel
// или вы используете только CoffeeScript
bower install require-any#coffee

Основной файл require-any.js реализует следующие функции:

  1. Определяет ресурсы для загрузки на основе XHR, например, requirejs([any!test/Error.jsx]).
  2. Реализует механизм локального кэширования и сравнения для скомпилированного исходного кода, включая SourceMaps.
  3. Предоставляет простой загрузчик XHR для загрузки исходного кода.
  4. Включает вспомогательные базовые функции.

Библиотека поставляется с двумя трансляторами в реальном времени:

  1. Coffee-transform, основанный на официальном CoffeeScript и поддерживающий формат cjsx (CoffeeScript + JSX), использует coffee-react-transform.
  2. Babel-transform, основанный на babel-standalone. В настоящее время он поддерживает преобразование ECMAScript6 и JSX. Для получения информации о поддержке ECMAScript 6/7 обратитесь к Babel.

Обратите внимание, что coffee-react-transform не имеет файла bower.json, поэтому его исходный код включён в ветку coffee.

Основной процесс обработки

Процесс обработки включает следующие шаги:

  1. XHR инициирует запрос исходного файла.
  2. На этапе HEADERS_REVICES XHR проверяет наличие кэша в localStorage для этого файла. Если кэш существует:
    • Если данные совпадают, XHR прерывается, и скомпилированный результат считывается из кэша.
    • В противном случае исходный файл загружается, компилируется и сохраняется в кэше. Если кэша нет, исходный файл загружается, компилируется и сохраняется в кэше.
  3. Скомпилированный результат загружается с использованием механизма AMD.

Использование в реальных проектах

Для установки выполните команду:

bower install require-any --save

Измените конфигурацию для require.js:

var rjsConfig = {
	paths  : {
    	'react'            : 'bower_components/react/react',
		'react-dom'        : 'bower_components/react/react-dom',
		'babel-standalone' : 'bower_components/babel-standalone/babel.min',
		'coffee-script'    : 'bower_components/coffee-script/extras/coffee-script',
		// 'coffee-react'     : 'src/transpiler/coffee-react',
		// Укажите протокол загрузки, вы можете указать любое имя
		'any'              : 'dist/require-any-all.min',
		// Ниже часть транслятора, если вы уверены, что используете имена transpiler-coffee или transpiler-babel, вам не нужно изменять, они уже включены в файл require-any-all.
		// Транслятор CoffeeScript
		// 'transpiler-coffee': 'dist/require-any-all.min',
		// Babel транслятор
		// 'transpiler-babel' : 'dist/require-any-all.min',
		// Для указанных модулей пути также можно использовать any!test2.es6 для загрузки, действительно, AMD стандарт сделан очень хорошо.
		'test2'            : 'test/Test2'
	},
	// Обратите внимание, зарегистрируйте конфигурацию в config, это механизм стандарта AMD.
	// 
	config: {
		any: {
			// Указать пространство хранения кэша
			cacheKey: 'my-cache',
			// Включить режим компиляции, если это режим компиляции, напрямую загрузить этот модуль js-файл
			// any!test.jsx, когда build = true, будет загружаться test.js файл
			build: false,
			// Отображать ли информацию отладки
			// Отладка изменена на поддержку уровня, > 1 будет выводить имя модуля и URL при каждой загрузке.
			debug: 2,
			// Объявить связанные плагины
			plugins: {
				coffee: 'transpiler-coffee',
				es6: 'transpiler-babel'
			},
			// Добавить настройку режима
			// Окончательное соответствие всё ещё основано на сопоставлении файлов суффиксов для поиска соответствующих параметров конфигурации режима.
			patterns: [
				{ regex: '.es6$', mode: 'i', onMatch: function(matches) {}, plugin: 'transpiler-babel' }
			],
			// Суффикс файла псевдоним, укажите, какой плагин использовать для обработки
			ext: {
				cjsx: 'coffee',
				jsx: 'es6'
			},
			// Параметры суффикса преобразования (компиляции), суффикс имени файла в качестве ссылки.
			// Если здесь указан суффикс jsx, параметры конфигурации jsx будут иметь приоритет.
			// Если суффикс jsx не указан, будут использоваться параметры конфигурации es6.
			options: {
				es6: {
					plugins: [
						"transform-es2015-modules-amd",
						"transform-es2015-block-scoping",
						"transform-class-properties",
						"transform-es2015-computed-properties"
					]
				}
			}
		}
	}
};
rjsConfig.urlArgs = "version=" + (new Date()).valueOf();
requirejs.config(rjsConfig);

Пример использования кода:

requirejs(['any!test/hello.coffee', 'any!test/Table.cjsx', 'react', 'react-dom', 'any!test/Test.jsx', 'any!test/Error.jsx'], function(hello, Table, React, ReactDOM, Test, Error) {
	ReactDOM.render(React.createElement(Table), document.getElementById('test1'));
	ReactDOM.render(React.createElement(Test), document.getElementById('test2'));
});

Здесь, если config.any.build равно true, все запросы с префиксом any будут пропускать соответствующие имена файлов суффиксов и загружать файлы js этих модулей. Например, test/hello.js.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления (2)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/janpoem-require-any.git
git@api.gitlife.ru:oschina-mirror/janpoem-require-any.git
oschina-mirror
janpoem-require-any
janpoem-require-any
master