Comments 15
Не знаю… За все время работы с компьютером так и не смог заставить себя полюбить командную строку. Иногда без нее никак, но если есть выбор GUI vs CL, я всегда выбираю первое.
Ах да, это не пропаганда, я просто высказал свое отношение к командной строке )
Хотел спросить, умеет ли работать с CoffeeScript, но не поленился пройти по нижней ссылке и узнал, что таки работает. Крутая вещь. Спасибо.
UFO landed and left these words here
Спасибо за статью! Обязательно поиграюсь. В своих проектах я использую google closure compiler и все оптимизации производились именно им. Но то что вы описали звучит гораздо более интригующе
Как мне показалось, инструмент слишком уж «наворочен»: для чего ставить underscore, dateformat, соlors, gzip (по крайне мере ничего не сказано о выборочной установке)?
Кому нужно и так поставят JSHint и Uglify, а заархивируют и без того встроенным в *nix систему gzip.

Пользуясь случаем расскажу о своем сборщике файлов:

#include <iostream>
#include <list>
#include "require.hpp"

int main()
{
	Require require;

	// Путь к файлам (можно не указывать, в этом случае он должен быть назначен самим файлам)
	std::string path("./files/");

	// Имена файлов, можно передать строкой с любым символом-разделителем
	std::string name("file_1.js;file_2.js;");

	// Записать в любой STL контейнер, который поддерживает итератор std::back_inserter
	std::list<std::string> file;
	require.split(name, ';', std::back_inserter(file));

	// Можно без сплита сразу в контейнер добавлять элементы: file.push_back("file_1.js");

	// Загружаем файлы
	if (require.load(file, path)) { // устанавливаем имя файла и общий путь (опционально)

		// Получаем данные
		// Если установлен флаг минификации, то вырезаются все комментарии, пробелы, табуляция и  пере	воды строк
		std::string data(require.data(true /* Можно задать флаг минификации */));

		// Сохраняем данные в файл
		if (require.save(path + "file.js"))
			std::cout << data << std::endl;

		// Если файл уже существует и не нужно его перезаписывать, то вторым параметром можно указать флажек
		// require.save(path + "./file.js", std::ios::app);
        }

	return 0;
}


В шаблонизаторе можно вывести данные прямо в поток:

<script type="text/javascript">
	<param _expr="require" _initparams="path=/files/js/, file=core.js;widget.js" />
</script>


Либо создавать отдельный подключаемый файл:

<script type="text/javascript" _expr="require" _params="file as src" _initparams="path=/files/js/, file=core.js;widget.js"></script>


У вас в шаблонизаторе, конечно это будет выглядеть иначе.

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

После компиляции бинарник можно поставить в хуки VCS .

Из минусов пока это, то что нет статического анализа кода, в следствии чего урезанная поддержка минификации и осутствие проверки кода на ошибки.
>>> Как мне показалось, инструмент слишком уж «наворочен»: для чего ставить underscore, dateformat, соlors, gzip (по крайне мере ничего не сказано о выборочной установке)?
>>> Кому нужно и так поставят JSHint и Uglify, а заархивируют и без того встроенным в *nix систему gzip.

Или поставят grunt — так проще. Grunt — это свой «make» для JavaScript-а, с батарейками в комплекте — в этом его огромный плюс: вам не надо писать скрипты сборки, загружать доп. библиотеки и делать прочую работу.
спасибо за перевод.
а что касается самой статьи: можно было писать более подробно по самой утилите, а не по процессу «нажимаю на кнопку… нажал… не сработало....»
Хочется авторитетных мнений уважаемой публики по поводу вопроса —

Кто-нибудь использует grunt в качестве замены питоновского fabric?

Интересует та часть, которая про взаимодействие с ремотным хостом (ssh, scp, git, touch, ...), если вы понимаете о чем я.
Да, плагин я видел этот, т.е. я правильно понял, что готовой замены Fabric пока нет.

Ну ладно, будет время, перепишу свои несложные скиптики на grunt.
Only those users with full accounts are able to leave comments. Log in, please.