Skip to content

Instantly share code, notes, and snippets.

@gruzzilkin
Last active August 29, 2015 14:01
Show Gist options
  • Save gruzzilkin/5198f7b28c60f12ceda8 to your computer and use it in GitHub Desktop.
Save gruzzilkin/5198f7b28c60f12ceda8 to your computer and use it in GitHub Desktop.
bemup-2014-msk | Вопросы
var autoprefixer = require('autoprefixer');
module.exports = require('enb/techs/css-stylus').buildFlow()
.name('css-stylus-with-if-ie-ie9')
.defineOption('autoprefixerArguments')
.target('target', '?.ie9.css')
.useFileList(['css', 'ie9.css', 'styl'])
.methods({
_configureRenderer: function(renderer) {
var args = this._autoprefixerArguments;
renderer.define('modern', false);
renderer.define('ie', false);
renderer.define('ie8', false);
renderer.define('ie9', true);
renderer.include('./node_modules');
renderer.import('if-ie.styl/if-ie');
renderer.use(function (style) {
this.on('end', function (err, css) {
return args ?
autoprefixer.apply(this, args).process(css).css :
autoprefixer.process(css).css;
});
});
return renderer;
}
})
.createTech();

Подключение jQuery

Задача

Подключение jQuery с cdn. Если cdn недоступен, подключаем его с нашего сайта.

Как сделано сейчас

{
	elem: 'js',
	content: "window.jQuery || document.write('<script src=js/jquery.latest.js><\\/script>')"
},
{
	elem: 'js',
	url: '../common/common.js'
}

Раньше в head подгружался jQuery с yandex.st, но впоследствии мой способ законфликтовал с loader'ом и я его выпилил.

Вопрос

Как сделать лучше?

Сборка merged-бандлов

Задача

Описать более лучшие варианты сборки merged-бандла в enb, чем описанный в документации: https://github.com/enb-make/enb#Сборка-merged-common-бандла.

Как сделано сейчас

if (nodeConfig.getPath() === 'desktop.bundles/common') {
	var pagesDeps = [],
	addTechsAttrs = [
		[ require("enb/techs/levels"), { levels: getLevels(config) } ],
		require("enb/techs/files"),
		[ require('enb/techs/browser-js'), {target: '?.pre.js'} ],
		[ require('enb-modules/techs/prepend-modules'), {source: '?.pre.js', target: '_?.js'} ],
		[ require('enb/techs/borschik'), { sourceTarget: '_?.js', destTarget: '?.js', minify: false} ],
		[ require("./techs/css-stylus-with-if-ie"), {autoprefixerArguments: ["> 1%", "last 2 versions", "Firefox ESR", "Opera 12.1"]} ],
		[ require("./techs/css-stylus-with-if-ie-ie9"), {autoprefixerArguments: ['ie 9']} ],
		[ require("./techs/css-stylus-with-if-ie-ie8"), {autoprefixerArguments: ['ie 8']} ],
		[ require("./techs/css-stylus-with-if-ie-ie")]
		];

	// Проходимся по существующим страницам
	fs.readdirSync('desktop.bundles').map(function (page) {
		if (page !== 'common' && fs.existsSync('desktop.bundles/' + page + '/' + page + '.deps.js')) {
			// Копируем депсы с каджой страницы внутрь common
			addTechsAttrs.push([ require('enb/techs/deps-provider'), { sourceNodePath: 'desktop.bundles/' + page, depsTarget: page + '.deps.js' } ]);

			pagesDeps.push(page + '.deps.js');
		}
	});

	// Мерджим все полученные депмы в один - common.deps.js
	if (pagesDeps.length>0) {
		addTechsAttrs.push([ require('enb/techs/deps-merge'), { depsSources: pagesDeps } ]);
	}

	// прокидываем атрибуты
	nodeConfig.addTechs(addTechsAttrs);
	nodeConfig.addTargets(["?.js", "?.css", "?.ie.css", "?.ie8.css", "?.ie9.css"]);
} 

Т.е. здесь технология ./techs/css-stylus-with-if-ie — переделанная из css-stylus-with-autoprefixer штукень, которая добавляет поддержку if-ie.styl.

Вопрос

Как сделать по-другому и лучше? Сейчас сборка merged-бандла серьезно тормозит, т.к. у меня 50 разных бандлов, которые парсятся/копируются/мерджатся медленнее, чем хотелось бы. А, ну и т.к. я не умею нормально программировать, всё это дело запускается 4 раза для каждой технологии css-stylus-with-if-ie*. Пример прикладывать стыдно, но, видимо, без этого никак :-(

@tadatuta
Copy link

Подключение jQuery:

scripts: [
    process.env.YENV === 'production' ? '' : { elem: 'js', url: '/desktop.blocks/jquery/jquery.min.js' },
    { elem: 'js', url: '_index.js' }
]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment