Прямо с первой строки, без отступов и оберток
var local = 'I don\'t leak into global';
И даже не начинай про обертки и IIFE
(function (window, document, angular,
jQuery, whatever, undefined) {
var local = 'I don\'t leak into global';
})(window, document, angular,
jQuery, whatever);
Не нужно быть оракулом, чтобы видеть public API
// magic.js
exports.castSpell = function(spell) {
document.querySelector('#wand').innerHTML = spell;
};
... в отличие от UMD
(function (root, factory) {
if (typeof exports == 'object') {
module.exports = factory(require('magic'));
} else if (typeof define == 'function' && define.amd) {
define(['magic'], function (magic) {
return (root.returnExportsGlobal = factory(magic));
});
} else {
root.returnExportsGlobal = factory(root.magic);
}
}(this, function (magic) {
magic.castSpell = function(spell) {
document.querySelector('#wand').innerHTML = spell;
};
}));
Вместо тысячи слов
var magic = require('./magic');
magic.castSpell('Fireball');
Это масштабируется нормально
var _ = require('underscore')
, EventEmitter = require('events').EventEmitter
, Promise = require('promise')
, utils = require('src/utils')
, flux = require('flux')
, UserStore = require('src/store/user')
, ProjectStore = require('src/store/project');
// ...
А это?
define('UsersList',
[
'underscore',
'events',
'Promise',
'src/utils',
'flux',
'src/store/user',
'srs/store/project'
],
function(_, events, Promise, utils, flux, UserStore, ProjectStore) {
// Можно выдохнуть
}
);
В npm есть вообще всё.
Умеешь определять пол по отчеству?
require('petrovich')
.detect_gender('Ильинична'); // 'female'
Ах да, npm — самый огромный репозиторий в мире
В продакшн:
browserify main.js -o build.js
В разработке:
watchify main.js -o build.js
Стрелочные функции, генераторы и классы —
уже сегодня.
Трансформы сделают всю магию:
browserify -t es6ify ...
И это будет работать в IE 9.
Мечты сбываются: один и тот же код на клиенте
и на сервере*
*
Только для supreme enlightened Node.js
Ты мечтал их использовать, но у тебя не было повода.
Спасибо!