Babel 7 vydán
Po téměř dvou letech, 4 tisících revizích, více než 50 předběžných verzích a spoustě pomoci s radostí oznamujeme vydání Babelu 7. Od vydání Babelu 6 uplynuly téměř 3 roky! Je tu spousta pohyblivých částí, takže prosíme o trpělivost v prvních týdnech po vydání. Babel 7 je rozsáhlá verze: zrychlili jsme ji, vytvořili jsme nástroj pro upgrade, konfiguráky JS, „přepisování“ konfiguráků, více možností pro velikost/minifikaci, fragmenty JSX, TypeScript, nové návrhy a mnoho dalšího!
Pokud oceňujete práci, kterou na Babelu děláme, můžete Babel sponzorovat na Open Collective, podpořit mě na Patreonu nebo zapojit sebe nebo svou firmu do Babelu v rámci práce. Ocenili bychom kolektivní vlastnictví tohoto zásadního projektu v komunitě JavaScriptu!
- Děje se! 🎉
- Role Babela
- Správci jsou lidé
- #BabelSponsorsEverything
- Hlavní zlomové změny
- babel-upgrade
- Konfigurační soubory JavaScriptu
- Selektivní konfigurace s přepsáním
- Rychlost 🏎
- Možnosti výstupu
- Podpora „čistých“ anotací
- Syntaxe
- Podpora návrhů TC39
- Podpora TypeScriptu (@babel/preset-typescript)
- Podpora fragmentů JSX (<>)
- Změny pomocníků Babel
- Automatické polyfilling (experimentální)
- Různé
- Makra Babel 🎣
- Module Targeting
- Metadata volajícího a lepší výchozí nastavení
- třída C extends HTMLElement {}
- Změny na webu 🌏
- REPL
- Máme píseň 🎶
- Co bude dál?“
- Open Source je zrcadlo
- Díky
Děje se! 🎉
Software nikdy nebude dokonalý, ale jsme připraveni dodat něco, co se už nějakou dobu používá ve výrobě! @babel/core
Už teď má 5,1 milionu stažení/měsíc, protože se používá v nástrojích jako Next.js 6, vue-cli 3.0, React Native 0.56 a dokonce i ve frontendu WordPress.com 🙂!
Role Babela
Rád bych tento příspěvek začal tím, že znovu představím roli Babela v ekosystému JavaScriptu za posledních několik let.
Původní problém spočíval v tom, že na rozdíl od serverových jazyků nebylo možné zaručit, že každý uživatel má stejnou podporu jazyka JavaScript, protože uživatelé mohli používat různé prohlížeče s různou úrovní podpory (zejména starší verze Internet Exploreru). Pokud by vývojáři chtěli použít novou syntaxi (např. class A {}
), uživatelé starých prohlížečů by kvůli SyntaxError
dostali jen prázdnou obrazovku.
Babel poskytl vývojářům možnost používat nejnovější syntaxi JavaScriptu a zároveň jim umožnil nestarat se o to, jak zajistit zpětnou kompatibilitu pro své uživatele tím, že ji přeloží (class A {}
na var A = function A() {}
).
Díky své schopnosti transformovat kód JavaScriptu může být také použit k implementaci nových funkcí: stal se tak mostem, který pomáhá TC39 (výboru, který specifikuje jazyk JavaScript) získat zpětnou vazbu k navrhovaným nápadům JavaScriptu a komunitě, aby se mohla vyjádřit k budoucnosti jazyka.
Babel je dnes pro vývoj JavaScriptu zásadní. V současné době existuje více než 1,3 milionu závislých repozitářů na GitHubu, 17 milionů stažení na npm měsíčně a stovky uživatelů včetně mnoha významných frameworků (React, Vue, Ember, Polymer) a společností (Facebook, Netflix, Airbnb). Stal se takovým základem pro vývoj v JavaScriptu, že mnoho lidí ani neví, že se používá. I když ho sami nepoužíváte, je velmi pravděpodobné, že vaše závislosti používají Babel.
Správci jsou lidé
Babel má obrovský vliv nejen na budoucnost samotného jazyka, ale také na jeho komunitu a ekosystém. Ale i přes všechnu tuto zodpovědnost je Babel jen komunitním projektem řízeným několika dobrovolníky.
Ještě v tomto roce se někteří z týmu mohli poprvé osobně setkat:
Původní tým @babeljs, konečně pohromadě. Zleva doprava: @left_pad, @jamiebuilds, @sebmck, já a @loganfsmyth pic.twitter.com/XfPj6OhZfA
– Amjad Masad (@amasad) 3. května 2018
Přestože se jedná o oznamovací příspěvek, rád bych využil příležitosti a všem připomněl stav tohoto projektu.
Sám jsem se k němu připojil několik měsíců před vydáním verze 6.0, která měla svou vlastní dávku kontroverze a odporu. Velká část tamního přijetí vedla k vyhoření stávajících správců (včetně Sebastiana, tvůrce Babelu) a několik z nás, kteří zůstali, převzalo otěže.
Stejně jako mnoho jiných správců jsme na tuto roli narazili náhodou. Mnozí z nás neměli žádné formální vzdělání o tom, jak fungují překladače nebo jak udržovat open source projekt. Ironií je, že jsem se dokonce záměrně vyhýbal studiu informatiky na vysoké škole, protože jsem nechtěl chodit na přednášky o kompilátorech nebo čemkoli nízkoúrovňovém, protože mi to připadalo nezajímavé a obtížné. Přesto jsem zjistil, že mě lákají nástroje, lintery, Babel a JavaScript jako jazyk.
Rád bych všechny povzbudil, aby se zajímali o open source projekty, na kterých jste závislí, a podporovali je (jak časem, tak peněžní podporou, pokud je to možné).
Mnozí správci nejsou ze své podstaty odborníci na věci, na kterých pracují; a je toho hodně, čeho se dá dosáhnout už tím, že se do práce pustíte jako první. Přijdete se zvědavostí i pokorou, což jsou pro správce skvělé vlastnosti. Mým přáním je naděje na vizi projektu oproti tomu, že všichni budeme jen plnit „úkoly“.
Babel není firma ani open source tým velké společnosti, jako je Facebook. Na Babelu pracuje jen hrstka dobrovolníků a je to jen pár měsíců, co jsem se odhodlal opustit své zaměstnání a jako zatím jediný pracovat na open source na plný úvazek. Ale lidé mohou přicházet a odcházet, mají životy mimo tento „koníček“, zakládají rodiny, přecházejí k jiným věcem, mění práci nebo si ji hledají atd. Děláme společně, co můžeme, abychom udrželi věci, které jsou pro naši práci tak zásadní, nebo necháme základy pomalu rozpadat? Jak udržíme otevřený zdrojový kód vstřícný a inkluzivní, ale s jasnými hranicemi? Můžeme se poučit ze zkušeností jiných správců?“
Ačkoli otevřený software zjevně převzal vládu nad softwarem, můžeme jej skutečně považovat za zdravý stav, aniž bychom brali v úvahu lidi, kteří za ním stojí?
#BabelSponsorsEverything
Tipy 4 @babeljs na @ReactRally #BabelSponsorsEverything pic.twitter.com/WCxefMOC8V
– Harry Wolff (@hswolff) 17. srpna 2018
Udržitelnost open source v současnosti působí jako rozdávání obětního koše. Není těžké uvést hodnotu, kterou projekty poskytují tisícům lidí a firem využívajících open source, ale přesto nevidíme, že by se tato hodnota projevila u těch několika málo lidí, kteří jsou ochotni vynaložit práci. Může existovat tolik způsobů, jak podpořit open source, a přesto ne všechny přístupy fungují pro každý projekt nebo lidi.
Nyní pojďme ke změnám!!!
Hlavní zlomové změny
Dokumentujeme je v našem Průvodci migrací. Mnoho z těchto změn lze provést automaticky pomocí našeho nového nástroje
babel-upgrade
nebo je lze přidat v budoucnu.
- Zrušení podpory neudržovaných verzí uzlu: 0.10, 0.12, 4, 5 (podrobnosti)
- Přesunout nás do jmenného prostoru
@babel
přechodem na používání „scoped“ balíčků (podrobnosti). To pomůže odlišit oficiální balíčky, takže zbabel-core
se stane@babel/core
(a žádné dřepění) - Odstranit (a přestat publikovat) všechny roční předvolby (
preset-es2015
atd.) (podrobnosti).@babel/preset-env
nahrazuje jejich potřebu, protože obsahuje všechny roční přídavky a také možnost zaměřit se na konkrétní sadu prohlížečů - Také upusťte od „etapových“ předvoleb (
@babel/preset-stage-0
atd.) ve prospěch volby jednotlivých návrhů. Stejně tak odstraňte návrhy z@babel/polyfill
ve výchozím nastavení (podrobnosti). Zvažte prosím přečtení celého příspěvku k tomuto tématu, abyste získali více vysvětlení. - Některé balíčky se přejmenovaly: jakýkoli plugin pro návrhy TC39 bude nyní
-proposal
místo-transform
(podrobnosti). Takže z@babel/plugin-transform-class-properties
se stane@babel/plugin-proposal-class-properties
. - Zavedení
peerDependency
na@babel/core
pro některé balíčky určené pro uživatele (např.babel-loader
,@babel/cli
atd.) (podrobnosti)
babel-upgrade
babel-upgrade
je nový nástroj, který jsme spustili a který se snaží automaticky provádět změny při aktualizaci: v současné době se závislostmi v konfiguraci package.json
a .babelrc
.
Doporučujeme jej spustit přímo v git repozitáři pomocí npx babel-upgrade
, nebo jej můžete nainstalovat globálně pomocí npm i babel-upgrade -g
.
Pokud chcete upravovat soubory, můžete předat --write
i --install
.
npx babel-upgrade --write --install
Prosíme, zvažte možnost přispět nahlášením problémů nebo PR, abyste všem pomohli s přechodem na Babel 7! Nadějí do budoucna je, že budeme používat stejný nástroj pro všechny budoucí zlomové změny a vytvoříme bota pro PR projektů k aktualizaci.
Konfigurační soubory JavaScriptu
Zavádíme babel.config.js
. Není to požadavek nebo dokonce náhrada za .babelrc
, ale mít to může být v určitých případech užitečné.
*.js
Konfigurační soubory jsou v ekosystému JavaScriptu poměrně běžné. ESLint i Webpack umožňují použití konfiguračních souborů .eslintrc.js
, respektive webpack.config.js
.
Níže je uveden případ kompilace pouze se zásuvným modulem v režimu „production“ (to lze provést již pomocí volby "env"
v souboru .babelrc
):
var env = process.env.NODE_ENV;module.exports = { plugins: .filter(Boolean)};
babel.config.js
má jiné konfigurační rozlišení než .babelrc
. Bude vždy řešit konfiguraci z tohoto souboru oproti původnímu stavu, kdy Babel prováděl vyhledávání od každého souboru nahoru, dokud nenašel konfiguraci. Díky tomu je možné využít další níže zveřejněnou funkci overrides
.
Selektivní konfigurace s přepsáním
Nedávno jsem publikoval příspěvek s úvahami jak o publikování balíčků ES2015+, tak o jejich konzumaci/kompilování.
Je tam část, která se zabývá použitím nového klíče v konfiguráku Babelu s názvem overrides
, který umožňuje zadávat různé konfiguráky na glob.
module.exports = { presets: , overrides: , presets: , }, { test: , presets: , }]};
To umožňuje aplikaci, která vyžaduje různé konfigurace kompilace pro své testy, klientský kód a serverový kód, vynechat nutnost vytvářet nový soubor .babelrc
pro každou složku.
Rychlost 🏎
Babel sám o sobě je rychlejší, takže jeho sestavení by mělo trvat kratší dobu! Provedli jsme mnoho změn, abychom optimalizovali kód a také přijali opravy od týmu v8. Jsme rádi, že jsme se stali součástí Web Tooling Benchmark spolu s mnoha dalšími skvělými nástroji pro JavaScript.
Možnosti výstupu
Babel již nějakou dobu podporuje předvolby a možnosti zásuvných modulů. Pro shrnutí můžete zásuvný modul zabalit do pole a předat mu objekt možností:
{ "plugins": , ]}
U některých zásuvných modulů jsme provedli některé změny loose
a u jiných jsme přidali nové možnosti! Všimněte si, že použitím těchto voleb se rozhodujete pro chování, které není v souladu se specifikacemi, a měli byste vědět, co děláte; to se může stát problémem, když vypnete kompilaci a použijete syntaxi nativně. Tyto druhy voleb je nejlepší používat v knihovně, pokud vůbec.
- U tříd
class A {}
nyní nebude obsahovat pomocníkaclassCallCheck
.
class A {}
var A = function A() {- _classCallCheck(this, A);};
- Je zde nová volba, pokud je každé použití cyklu
for-of
pouze pole:
let elm;for (elm of array) { console.log(elm);}
let elm;for (let _i = 0, _array = array; _i < _array.length; _i++) { elm = _array; console.log(elm);}
- Vyloučíme zásuvný modul
transform-typeof-symbol
v režimuloose
propreset-env
#6831
Našli jsme mnoho knihoven, které to již dělají, a proto jsme se rozhodli, že to bude výchozí.
Všimněte si, že výchozí chování má být co nejvíce v souladu se specifikací, aby vypnutí Babelu nebo použití preset-env
bylo bezproblémové oproti povolení menšího výstupu jen kvůli úspoře bajtů (tam je kompromis, který si každý projekt může udělat). Plánujeme pracovat na lepších dokumentech a nástrojích, abychom to usnadnili.
Podpora „čistých“ anotací
Po #6209 jsou transpilované třídy ES6 anotovány komentářem /*#__PURE__*/
, který umožňuje dát nápovědu minifikátorům jako Uglify
a babel-minify
pro odstranění mrtvého kódu. Tyto anotace jsou přidány i k dalším pomocným funkcím.
class C { m() {}}
var C =/*#__PURE__*/function () { // ...}();
Mohou existovat další možnosti nápovědy pro minifiery a optimalizace, dejte nám vědět!
Syntaxe
Rád bych znovu zopakoval, že jsme odstranili předvolby Stage ve prospěch politiky žádat uživatele, aby se výslovně přihlásili k návrhům < Stage 4.
Obava spočívá v tom, že automaticky přihlašujeme lidi k syntaxi, která není pevně stanovena nebo provedena s očekáváním, že se nebude měnit. Tak tomu ale není, zejména u návrhů, které jsou ve fázi 0 nebo 1. Tento příspěvek trochu vysvětluje, jaké myšlenky stojí za novějšími nápady.
Tady je malý seznam některých nových syntaxí, které Babel podporuje (mějte na paměti, že tato sada funkcí je pohyblivý cíl, který může být přidán/odstraněn/odstaven), a které z nich byly přidány do v7:
- ES2018: (
var a = { b, ...c }
) - ES2018 (nové): JSON Superset
- ES2015 (nový):
new.target
- Stupeň 3 (nový): (
class A { #b = 2 }
) - Stage 3 (WIP): Statická pole třídy, soukromé statické metody (
class A { static #a() {} }
) - Stupeň 3 (nový): Volitelná vazba Catch
try { throw 0 } catch { do() }
- Stupeň 3 (nový): (pouze syntaxe)
- Stupeň 3: Dynamický import (
import("a")
) - Stupeň 2 (nový): import.meta.url)
- Stupeň 2 (nový): Číselné oddělovače (
1_000
) - Stupeň 2 (nový):
function.sent
- Stupeň 2:
export-namespace-from
(export * as ns from 'mod'
), rozděleno zexport-extensions
- Stupeň 2: Dekorátory. Níže najdete aktuální informace o našem postupu!
- Stage 1:
export-default-from
(export v from 'mod'
), rozděleno zexport-extensions
- Stage 1 (new): Volitelné řetězení (
a?.b
) - Stage 1 (new): Operátory logického přiřazení (
a &&= b; a ||= b
) - Stage 1 (new): Nulový koalescenční operátor (
a ?? b
) - Stupeň 1 (nový): Operátor potrubí (
a |> b
) - Stupeň 1 (nový): (
() => throw new Error("a")
)
Je těžké, aby někdo sledoval všechny návrhy, takže se o to pokoušíme na adrese babel/proposals.
Podpora TypeScriptu (@babel/preset-typescript)
S týmem TypeScriptu jsme pracovali na tom, aby Babel analyzoval/transformoval typovou syntaxi pomocí @babel/preset-typescript
, podobně jako řešíme Flow pomocí @babel/preset-flow
.
Pro více informací se podívejte na tento příspěvek od týmu TypeScript!
Před (s typy):
interface Person { firstName: string; lastName: string;}function greeter(person : Person) { return "Hello, " + person.firstName + " " + person.lastName;}
Po (s odstraněnými typy):
function greeter(person) { return "Hello, " + person.firstName + " " + person.lastName;}
Jak Flow, tak Typescript jsou nástroje, které umožňují uživatelům JavaScriptu využívat postupné typování, a my bychom rádi v Babelu umožnili obojí. Plánujeme nadále úzce spolupracovat s oběma příslušnými týmy ve FB a Microsoftu (kromě komunity jako celku), abychom zachovali kompatibilitu a podporovali nové funkce.
Tato integrace je poměrně nová, takže je možné, že některé syntaxe nejsou plně podporovány. Budeme rádi, když nám pomůžete nahlásit problémy a případně pošlete PR!
Podpora fragmentů JSX (<>)
Jak je uvedeno na blogu React, podpora fragmentů JSX je k dispozici od beta.31
.
render() { return ( <> <ChildA /> <ChildB /> </> );}// output 👇render() { return React.createElement( React.Fragment, null, React.createElement(ChildA, null), React.createElement(ChildB, null) );}
Změny pomocníků Babel
Probíhá PR na aktualizaci babel
@babel/runtime
byl rozdělen na @babel/runtime
a @babel/runtime-corejs2
(PR). První obsahuje pouze pomocné funkce Babelu a druhý obsahuje tyto funkce a také případné funkce polyfill (např. Symbol
, Promise
).
Babel může potřebovat vpravit do kódu určité funkce, které lze znovu použít. Těmto funkcím prostě říkáme „pomocné funkce“, stejně jako funkcím, které jsou sdílené mezi moduly.
Příkladem může být kompilace class
(bez zapnutého režimu loose
):
Specifikace říká, že je třeba volat třídu pomocí new Person()
, ale pokud je zkompilována do funkce, můžete technicky udělat jen Person()
, takže jsme zahrnuli runtime kontrolu pro toto.
class Person {}
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }var Person = function Person() { _classCallCheck(this, Person);};
S @babel/plugin-transform-runtime
a @babel/runtime
(jako závislost) může Babel extrahovat jednotlivé funkce a jen vyžadovat modulární funkce, aby umožnil menší výstup takto:
var _classCallCheck = require("@babel/runtime/helpers/classCallCheck");var Person = function Person() { _classCallCheck(this, Person);};
To samé lze udělat s external-helpers
a rollup-plugin-babel
. Zkoumáme, zda bychom to v budoucnu mohli dělat automaticky. Brzy se podívejte na samostatný příspěvek o pomocnících Babelu.
Automatické polyfilling (experimentální)
Polyfilling je nutný pro povolení funkcí jako Promise
, Symbol
v prostředích, která pro ně nemají podporu. To je důležité při rozlišování mezi tím, co Babel dělá jako kompilátor (transformuje syntaxi) vs. polyfill (implementuje vestavěné funkce/objekty).
Je dost snadné prostě importovat něco, co pokrývá vše, jako je @babel/polyfill
:
import "@babel/polyfill";
Ale obsahuje to celé polyfill a nemusíte importovat vše, pokud to prohlížeče již podporují. Jedná se o stejný problém, který se @babel/preset-env
snaží vyřešit pomocí syntaxe, takže ho zde aplikujeme pomocí polyfillů. Volba useBuiltins: "entry"
to dělá tak, že původní import rozdělí jen na ty importy, které jsou nezbytné.
Můžeme to ale udělat lépe, když budeme importovat jen ty polyfilly, které se používají v kódové základně. Volba "useBuiltIns: "usage"
je naším prvním pokusem něco takového umožnit (dokumenty).
Projde každý soubor a na začátek každého souboru vloží import, pokud je tento vestavěný soubor v kódu „použit“. Například:
import "core-js/modules/es6.promise";var a = new Promise();
Odvozování není dokonalé, takže může dojít k falešně pozitivním výsledkům.
import "core-js/modules/es7.array.includes";a.includes // assume a is an
Další nápady v této oblasti jsou použití polyfill.io, pokud vám nevadí spoléhat se na službu (nebo si přečtěte, jak Kent C. Dodds použil k vytvoření hostované služby ve společnosti PayPal).
Různé
Makra Babel 🎣
Jednou z nejlepších částí nástroje Babel je jeho připojitelnost. V průběhu let se Babel změnil z pouhého kompilátoru „6to5“ v platformu pro transformaci kódu, což umožnilo některé fantastické optimalizace jak pro uživatele, tak pro vývojáře. Pro konkrétní knihovny a případy použití byly vyvinuty tuny zásuvných modulů Babel, které zlepšují výkon a možnosti knihovních rozhraní API, což by jinak nebylo možné (některé „knihovny“ jsou zcela transpilovány pryč, což vede k tomu, že vůbec neběží).
Naneštěstí přidání těchto zásuvných modulů do vaší kódové základny vyžaduje změnu konfigurace (což některé sady nástrojů, jako je create-react-app, neumožňují) a zvyšuje složitost kódu, protože vývojáři musí vědět, jaké zásuvné moduly Babel na souboru pracují, aby věděli, co se stane s kódem, který píší. Tyto problémy vyřešila makra babel-plugin-macros od Kenta C. Doddse!
Po instalaci a přidání babel-plugin-macros
do konfigurace (je součástí create-react-app
v2) se nemusíte obtěžovat s konfigurací, abyste mohli používat jakákoli makra. Navíc je ještě snazší psát vlastní transformace pro případy použití specifické pro vaši aplikaci nebo jednu část kódu.
Více o babel-plugin-macros
se dozvíte v našem původním příspěvku „Zero-config code transformation with babel-plugin-macros“.
Module Targeting
Babel se vždy snažil vyvážit dopad transformací na velikost a možnosti, které poskytují autorům JavaScriptu. V Babelu 7 je mnohem snazší konfigurovat Babel tak, aby podporoval rostoucí popularitu vzoru modul/nomodul.
Například několik nástrojů CLI pro populární webové frameworky (1, 2) již podporu využívá, což vede ke zhruba 20% snížení dodávaného JavaScriptu spotřebitelům aplikací transponovaných pomocí Babelu.
Metadata volajícího a lepší výchozí nastavení
Přidali jsme možnost caller
do @babel/core
, aby naše nástroje mohly předávat metadata předvolbám/pluginům. Například: babel-loader
může přidat něco takového, takže preset-env
může automaticky zakázat transformaci modulu (totéž s rollup
:
babel.transform("code;", { filename, presets: , caller: { name: "babel-loader", supportsStaticESM: true, },});
To je vzrušující, protože to umožňuje způsob, jak nástrojům poskytnout lepší výchozí nastavení a méně konfigurace! Pro případ Webpack/rollup: můžeme automaticky odložit použití jejich modulové transformace místo Babelovy (stejně jako u import("a")
). V budoucnu se těšte na další nástroje, které toto využijí!
třída C extends HTMLElement {}
Jedna z našich nejstarších otázek dostává vlastní nadpis (podrobnosti)
Babel měl vždycky výhradu, že nemohl podporovat rozšiřování nativních vestaveb (Array
, Error
atd.), a teď už může! Dostali jsme kvůli tomu spoustu otázek; 🎉 měli byste slavit jako Andrea!
Tato změna byla provedena v zásuvném modulu třídy, takže by měla být automaticky povolena, pokud používáte preset-env
.
Změny na webu 🌏
Přesunuli jsme naše stránky z Jekyllu na Docusaurus!
Stále jsme v procesu nastavování překladů pomocí Crowdinu a po vydání Babelu 7 budeme mít lepší podmínky pro zahájení tohoto procesu.
REPL
Přepsali jsme REPL jako React Component a spolupracujeme s Ivesem na lepší integraci s CodeSandboxem. Díky tomu můžete do REPL nainstalovat libovolný zásuvný modul nebo předvolbu z npm a také získat všechny aktualizace, které dostane CodeSandbox.
Znovu se účastníme Rails Girls Summer of Code! Tentokrát Gyujin a Sujin usilovně pracují na integraci Babel-time-travel od Boopathiho do REPL, kterou si už teď můžete vyzkoušet!
Je tu tolik možností, jak se zapojit do zlepšování práce s Babelem, AST a dalšími nástroji!
Máme píseň 🎶
Halleluja-In Praise of Babel
Jednou nám Angus laskavě propůjčil píseň, která mi připadala úžasná, tak proč z ní neudělat naši „oficiální“ píseň? A Shawn zde vytvořil geniální cover.
Najdete ji v našem repozitáři na adrese SONG.md. Doufáme, že na ni navážou další projekty!
Co bude dál?“
- Babel je neodmyslitelně spjat s tím, co kompiluje: JavaScript. Dokud se budou navrhovat/pracovat na nových doplňcích, je na čem pracovat. To zahrnuje čas/úsilí na implementaci a údržbu syntaxe ještě předtím, než se stane „stabilní“. Záleží nám na celém procesu: na cestě aktualizace, vzdělávání o nových funkcích, výuce standardů/návrhu jazyka, snadnosti používání a integraci s dalšími projekty.
- Související: Díky Nicolovi jsme téměř dokončili implementaci návrhu nových dekorátorů v Babelu. Byla to dlouhá cesta (trvala více než rok!), protože nový návrh je úplně jiný a mnohem výkonnější než ten starý, ale už je téměř hotový 🎉. Můžete očekávat, že bude vydán v jedné z příštích minoritních verzí spolu s blogovým příspěvkem, který změny podrobně vysvětlí.
- Boopathi pilně udržuje
babel-minify
, takže pro něj budeme dělat 1.0 jako další! - Pracuje se na spoustě novinek: řazení zásuvných modulů, lepší validace/chybovost, rychlost, přehodnocení možností loose/spec, cachování, asynchronní používání Babelu, sestavování proti sobě z CI, smoke testy, spouštění testů262. Podívejte se na tento dokument s plánem, kde najdete další možné nápady!
Nemáme žádné tajné plány: snažíme se co nejlépe s tím, co máme, sloužit této komunitě.
Open Source je zrcadlo
Byl bych rád, kdybychom měli čas a zdroje na realizaci všech těchto nápadů a dělali to dobře. Ale jak jsme ukázali u tohoto aktuálního vydání, věci trvají mnohem déle, než se očekávalo!
Proč vlastně tato vydání trvají tak dlouho? Je to z důvodu plíživého vývoje funkcí, a to jak z naší strany, tak ze strany našich uživatelů? Bylo to z toho, že nerozumíme tomu, jak stanovit priority mezi všemi možnými věcmi, které je třeba přidat nebo opravit? Rozhodování o opravě nízko visícího ovoce oproti zásadním problémům až na konci? Nebo „rozptylování“ od pomoci ostatním na GitHubu, Slacku, Twitteru? Odhadujeme prostě špatně svůj čas, nechápeme složitost těchto problémů, přehnaně se jako dobrovolníci angažujeme?
Nebo na sebe jen klademe příliš vysoká očekávání, nebo se cítíme být pod takovým tlakem ostatních, abychom podávali výkony a přizpůsobovali se jejich potřebám na úkor sebe? Mohu to popsat jen jako hrůzu, když vidím zprávu od někoho na internetu, který se diví, proč něco nebylo vydáno, zatímco jiný se ptá, proč tato chyba ještě není opravena. Mám chuť to prostě urychleně vydat a skoncovat s tím, ale zároveň mám touhu brát to vážně.
Některé z těchto myšlenek a bojů jsem se pokusil vyjádřit ve své přednášce minulý týden na React Rally: Doufám, že využijete příležitosti a poslechnete si ji. Otázka, kterou si kladu: Co mohu udělat s nevyhnutelným koloběhem vyhoření správců, neustálé úzkosti a nerealistických očekávání?
Stejně jako většina věcí v životě, i věci, které děláme, odrážejí náš charakter a ukazují, jací skutečně jsme. Činy, které děláme, nás samy o sobě mohou změnit, ať už k lepšímu, nebo k horšímu. Máme-li brát svou práci vážně, měli bychom se navzájem kontrolovat v těchto návycích, které se zdají být tak zakořeněné v naší kultuře: okamžitého uspokojení, úspěchu z hlediska měřítek, nároku oproti vděčnosti a pýchy z přepracování.
Ale navzdory tomu všemu práce na tomto vydání stála za to.
Díky
Je to opravdu vzrušující vydání, a to nejen díky ohlédnutí za tím, čeho jsme dosáhli a co jsme umožnili, ale mnohem víc už jen díky vědomí, kolik času a srdce bylo do jeho realizace za poslední rok vloženo. Je těžké uvěřit příležitostem a zážitkům, které se na této cestě udály: interakce a pomoc firmám z celého světa, nalezení přátel téměř v každém městě, které jsem navštívil, a upřímné vyprávění o neuvěřitelné cestě, kterou tato skupina společně podnikla.
Osobně jsem nikdy do ničeho takového nevložil tolik své duševní energie a rád bych poděkoval mnoha lidem za to, že nás na této cestě pozvedli. Shoutouts zejména Logan Smyth, který strávil nespočet času, aby změnil mnoho z toho, jak jádro funguje, a vždy si najde čas, aby byl tak užitečný v našem Slacku, zatímco také pracuje na volné noze, a Brian Ng, který se tak velkým způsobem posílil, aby pokračoval v udržování Babel, stejně jako recenze všech mých blogových příspěvků a rozhovorů. Daniel Tschinder, Sven Sauleau, Nicolò Ribaudo a Justin Ridgewell se prostě zasloužili o to, že toto vydání bylo možné a že práce na něm byla příjemná.
Poklona všem mnoha členům komunity na Slacku, Twitteru a ve všech projektech na GitHubu, kteří také musí pochopit, co děláme pro své vlastní uživatele. Chtěl bych velmi poděkovat svým přátelům z Behance/Adobe za to, že mě téměř rok sponzorovali, abych mohl pracovat na Babelu na poloviční úvazek, než jsem se rozhodl přejít na plný úvazek (a také mi po celou dobu pomáhali testovat Babel 7 v produkci). Velký dík patří všem sponzorům našeho Open Collective, zejména společnostem Trivago a Handshake. A děkujeme našim přátelům a rodině za veškerou jejich lásku a podporu.
Všichni jsme v tuto chvíli dost unavení, ale bylo nám opravdu ctí a výsadou takto sloužit, takže doufáme, že vydání oceníte!