Yeoman generátor pro Nette projekty

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
chemix
Nette Core | 1310
+
+16
-

Ahoj
připravil jsem základní Yeoman generátor pro Nette github.com/chemix/generator-nette. V tuto chvíli umí vygenrovat základ aplikace a stáhnout composer závislosti (kod braný z nette/web-project) plus si můžete zvolit zdali chcete nainstalovat Adminer. Další generátor je pro presenter spolu se šablonou a generátor pro componentu (php + latte).

TODO:

  • generátor pro extension
  • konfigurace pro nazvy slozek
  • Application generator
    • BasePresenter ano/ne
    • databáze (zeptat se na credentials i bez uzivatelu)
    • uživatelé (ze sandboxu)
    • ? kdyby/console
    • ? nextras/migrations

nápady vítány

instalace

musíte mít nainstalovaný node.js a npm (nodejs.org)

následně nainstalujete Yeoman (yeoman.io)

npm install -g yo

a generator-nette

npm install -g generator-nette

Použití

Pak už stačí vytvořit adresář a v něm zavolat yo nette pro vygenerování aplikace.

Příkazy

yo nette – základní aplikace
yo nette:presenter name – vygeneruje presenter
yo nette:component name – vygeneruje componentu

Video

enumag
Člen | 2118
+
0
-

Hezké. Přímo to od tebe mi asi stačit nebude, ale aspoň jsi mi ukázal k čemu je Yeoman a určitě se mi to šikne jako example. Děkuju! :-)

Namespace
Člen | 80
+
0
-

Neznal jsem. A už se s tím asi nerozloučím. Dělá za mě to, co mě nebaví a to je super.

Díky! :)

Stene
Člen | 6
+
0
-

Vypadá to dobře. I mě to zatím stačí alespoň na to, co dělám nejméně rád :)
Zatím mi tam chybí jen základní konfigurace pro ouput, jelikož držíme trošku jinou strukturu app folderu. Takže vytáhnout konfiguraci těchle věcí o level výše by nebylo marný.

Jan Suchánek
Člen | 404
+
0
-

Super, díky!

chemix
Nette Core | 1310
+
0
-

@Stene jakou strukturu jedete?

Stene
Člen | 6
+
0
-

@chemix Adresáře jsou v jednotném čísle, a první písmeno názvu je vždy velké (components ⇒ Component, presenters ⇒ Presenter).

Základní konfigurace je jen návrh, rozhodně se s tím nemusíš psát hned ty. Klidně si to dopíšeme v pull requestu, pokud tam obecnou konfiguraci budeš chtít začlenit.

Editoval Stene (7. 9. 2015 13:44)

Oli
Člen | 1215
+
0
-

Myslím, že by nebylo od věci implementovat možnost vytvářet (zejména komponenty) relativně od místa, kde se právě nacházím. A generovat to jako PSR-4. Mám spoustu modulů načítaných composerem a autoload nastaven na PSR-4. Používám symlinky. Co jsem se na to zběžně koukal, tak by to neměl být problém. Pak by to mohlo vypadat třeba takhle:

yo nette:component Component\Grid\ArticlesGrid

Což by vygenerovalo něco jako misto-kde-jsem-byl\Compoenent\Grid\ArticlesGrid.php

namespace Component\Grid;

class ArticlesGrid {}

Problém zatím vidím jen v tom, že u composeru si nadefinuješ, jakej namespace se má vždy prefixovat, viz. https://github.com/…omposer.json#L23. Tam mě nic kromě parametru (např. -psr-4 ArticleModule)nenapadá a parametr mě přijde takovej nesystemovej :-)

Namespace
Člen | 80
+
0
-

Nevíte někdo jak přimět PHPStorm, aby si všiml, že jsem přidal presenter, rychleji než do několika minut?

chemix
Nette Core | 1310
+
+1
-

generator-nette@0.3.1

pridana podpora pro uzivatele ze sandboxu (plus dotazani na prihlaseni do databaze)

+ generator-nette@0.3.2 (na databazi se ptame i bez uzivatelu)

+ generator-nette@0.3.3 (BasePresenter (optional), uprava Homepage template)

+ generator-nette@0.3.4 (pokud se nepouziva N\DB nedavame zavyslost do composer.json)

+ generator-nette@0.3.5 (ukladani konfigurace zdali se pouziva BasePresenter)

Q:

davat do toho treba nejake komponenty z kdyby? nextras? console? migrations?

chemix
Nette Core | 1310
+
+1
-

Co obsahuje váš základní sandbox/skeleton

Podelte se o napaday co bych mohl pridat do Nette generatoru … Mate nejaky svuj sandbox? Co by mel generator obsahovat ve verzi 1.0.0?

Napady:

Pracuji na pridání Kdyby\ Translation, vec co se hodi lidem co delaji multi web

Chtel bych pridat Nextras\ Migrations pro snadnejsi rozbehnuti databaze a tvorbu aktualizaci

Pridani prepinace zdali se pojede na dva moduly? Admin/Frontend nebo jen jen jeden (webproject/sandbox).

Premyslim o pridani nejakeho frontendoveho balicku, tj jQuery, NetteForms.js, Nette.Ajax.js, Bootstrap 3 (nebo neco mensiho? purecss.io) Grunt minifikator/builder?

+ je tu nekdo kdo by mi pomohl s generatorem DI extension?

chemix
Nette Core | 1310
+
0
-

generator-nette@0.4.0
pridana podpora pro multilanguage website s pomoci Kdyby\Translation (je tam jeste hodne prace, ale zklad to uz vygeneruje)

enumag
Člen | 2118
+
+2
-

@chemix Grunt bych ti dvakrát nedoporučil. Gulp je mnohem lepší a hlavně narozdíl od Gruntu stále živý.

chemix
Nette Core | 1310
+
0
-

@enumag Grunt pouzivam od jeho rannich verzi a na to co potrebuji tak mi stale dostacuje, ale klidne se necham inspirovat gulpem, mas nejakej pro nette ready konfigurak co se da pouzit na sandbox?

enumag
Člen | 2118
+
+3
-

@chemix Jestli v projektu je nebo není nette nehraje roli (aspoň můj gulpfile o nette vůbec neví) takže by ti měly postačit obecné tutoriály ke gulpu. Dám ti ale dva tipy, které v nich nenajdeš:

  1. Ve většině tutoriálů najdeš na začátku gulpfile.js něco na tento způsob:
var gulp = require('gulp');
var jshint = require('gulp-jshint');
var sass = require('gulp-sass');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
// seznam pluginů ti poroste čím déle budeš gulp používat

gulp.task('css', function () {
    return gulp.src('scss/*.scss')
        .pipe(sass())
        .pipe(gulp.dest('css'));
});
// další tasky

Osobně mám raději tento způsob:

var plugins = require('gulp-load-plugins')();
var gulp = require('gulp');

gulp.task('css', function () {
    return gulp.src('scss/*.scss')
        .pipe(plugins.sass()) // zde změna
        .pipe(gulp.dest('css'));
});

Vyžaduje gulp-load-plugins.

  1. Zpravidla v máš integrované pluginy pro minifikaci CSS a JS. Problém je že pak tasky obzvlášť v případě JS trvají hrozně dlouho protože minifikace je pracná což se pro vývoj nehodí. Obcházím to takhle:
var plugins = require('gulp-load-plugins')();
var gulp = plugins.param(require('gulp'), process.argv); // podstatný magický řádek

gulp.task('css', function (dev) { // zde přidán parametr
    return gulp.src('scss/*.scss')
        .pipe(plugins.sass())
		.pipe(plugins.if(!dev, plugins.cssmin())) // místo klasického .pipe(plugins.cssmin())
        .pipe(gulp.dest('css'));
});

Nyní gulp css spustí task normálně s minifikací kdežto gulp css --dev jej spustí bez minifikace. U CSS to nehraje moc roli, ale u JS se mi to velmi osvědčilo.

Vyžaduje gulp-param a gulp-if.

chemix
Nette Core | 1310
+
0
-

@enumag to je presne to co nechci :) nacitat vsechny css z adresare, pripadne je definovat v gulp file…

ja mam na to https://github.com/…tfile.coffee kde akorat reknu ze ma kontrolovat @layout.latte ve kterem podle toho zdali chci minifikovanou verzi nebo vyvojovou verzi si prepinam pomoci promenne pomoci komentaru je zajistena minifikace definovanych css/js souboru https://github.com/…layout.latte

David Kudera
Člen | 455
+
0
-

SRP mám hodně rád, všude.. „Definice“ buildu v latte? Určitě nic pro mě, minimálně ale díky za rozšíření obzorů, takový způsob jsem neznal..

Jinak ale používám téměř to stejné jako @enumag: https://github.com/…/gulpfile.js#… (outdated). Už teď např. vím, že se mi hodně líbí to rozhodnutí, jestli minifikovat nebo ne. Pro deploy myslím super…

enumag
Člen | 2118
+
0
-

@chemix Nerozumím jak to funguje. Kdybys tam chtěl přidat CSS preprocesor, kde bys definoval kde hledat zdrojové less nebo sass soubory?

chemix
Nette Core | 1310
+
0
-

@enumag preprocesor resim v jinem tasku, watch. Jelikoz kazdy muze pouzivat jakykoli preprocesor. Treba i dva na jednom projektu (stylus – mé css, sass – foundation)

jinak pak mam latte soubor ve kterem mam vicero css a js (idealni pro vyvoj) a nasledne tam je plugin co najde vyskyty css a js a pripravi cesty pro dalsi ukoly (spojeni + minifikace)

newPOPE
Člen | 648
+
0
-

@enumag je to nieco taketo https://github.com/…grunt-usemin#… tiez som to pouzival a to som do projektu nemusel vobec zasahovat (ziadny update configu atd.) Zo sablony si vytiahne co potrebuje min, concat, … urobi co ma a prepise sablonu. Je to pohodlne a nemusis sa o nic starat len zmenis sablonu ak potrebujes dalsi subor.

@chemix s cim by si potreboval pomoct s extensions? Pripadne napis message.

Editoval newPOPE (18. 9. 2015 14:31)

chemix
Nette Core | 1310
+
0
-

@newPOPE treba uplne „base extension“ ja zatim zadnou nepsal tak netusim co je treba

newPOPE
Člen | 648
+
0
-

@chemix ak dobre rozumiem tak chces generovat extension (dajme tomu nazov, ze zadam nazov a generator vygeneruje)?.

chemix
Nette Core | 1310
+
0
-

@newPOPE ano, zadam nazev a generator vygeneruje takovej skeleton pro extension

kleinpetr
Člen | 480
+
0
-

@chemix Jakým způsobem vygeneruje základ aplikace ? Pokud spustím yo nette v nějakém prázdném adresáři a zadám ve wizardu co potřebuji, tak se nic nestane. Adresář zůstane prázdný..

Díky za nápady

Editoval kleinpetr (4. 11. 2016 11:22)

chemix
Nette Core | 1310
+
0
-

@kleinpetr ahoj, o vikendu na to mrknu. Ja to pouzival na prehistoricke verzi node. Zaktualizuji zavyslosti a aktualizuji obsah.

kleinpetr
Člen | 480
+
0
-

@chemix Díky :) Já jen, že jsem si toho všiml na YT Nette framework, nedošlo mi, že to nemusí být aktuální.