2013-04-22 10 views
5

Secondo la cartella Package layout conventionsweb dovrebbe contenere le seguenti:come organizzare il codice dardo all'interno della cartella web

HTML, CSS, immagini, e, diamine, probabilmente anche un po 'di JavaScript. Tutto ciò va nella directory web del tuo pacchetto. Sei libero di organizzare i contenuti di questo a tuo piacimento. Impazzisci con le sottodirectory se questo ti rende felice.

Quindi il mio elenco web simile a questa:

web/data_access 
web/model 
web/ui 
web/ui/navigation 
etc. 

Ora, come ho gestire tutte quelle dichiarazioni di importazione. Ho un sacco di affermazioni del tipo:

import '../../model/my_model.dart'; 
import '../../data_access/mock_dao.dart'; 
etc. 

non mi piace utilizzare che molti ../ nei miei importazioni perché questo è fragile e ottengo problemi ogni volta che cambia nulla nella mia struttura di cartelle.

C'è un modo migliore per organizzare il codice all'interno della cartella web?

o

C'è un altro modo di fare le importazioni?

risposta

3

Sfortunatamente, no. È disponibile un feature request aperto, ma l'implementazione potrebbe richiedere del tempo. Il modo migliore per ovviare a questo problema consiste nel raggruppare più classi in un unico file o più file in una libreria, riducendo in modo efficace il numero di istruzioni di importazione. Sono andato fino a rendere la mia intera applicazione una grande libreria con le dichiarazioni part of in modo da non dover gestire le istruzioni di importazione. Mentre questo non elimina il problema di fondo, funziona per ora.

Inoltre, il refactoring anziché la semplice ridenominazione quando si modifica la struttura della cartella cambia le istruzioni di importazione interessate, eliminando il fastidio di regolarle manualmente.

I componenti Web possono essere importati in una libreria, solo per essere riesportati utilizzando la dichiarazione export, quindi raggruppandoli in un'unica importazione.

+0

Questa soluzione è ok, ma non funziona con ** ** Web Components in quanto ogni componente Web è la sua propria biblioteca (vedi [commento di Chris Bucket] (http : //stackoverflow.com/questions/15999088/dart-library-layout-with-web-component#comment22820794_15999088). –

+0

Spero che la funzione richiesta che hai citato non impiegherà troppo tempo dal momento che ho molti componenti Web. –

+0

Questa soluzione ha anche altre carenze, come rallentare l'editor quando il progetto si ingrandisce. Purtroppo, non conosco altre soluzioni alternative. Imho, le importazioni sono un po 'imbarazzanti al momento. Detto questo, se devi usare "../" nelle tue dichiarazioni, puoi cambiare la struttura delle cartelle con il refactoring - questo cambia le istruzioni di importazione per riflettere la nuova struttura. ancora non elegante, ma funziona ... – MarioP

4

Ho messo quasi tutto il codice della mia app in lib, per evitare i problemi che stai vedendo. Funziona anche per i componenti web.

vedere questo componenti da widget.dart: https://github.com/kevmoo/widget.dart/tree/master/lib/components

Io di solito solo messo in app.dart web /, che prende semplicemente nelle biblioteche da lib e inizializza l'applicazione.

vedere questo esempio di un app che tira in un pacchetto pub che ha componenti: https://github.com/sethladd/catpic-app

Questo è ciò che il mio file HTML assomiglia. Si noti l'inserimento di pacchetti nel percorso:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Your life is complete</title> 
    <link rel="components" href="packages/catpic/components/cat_pic.html"> 
    <link rel="components" href="packages/frame/components/frame.html"> 
    <link rel="stylesheet" href="styles.css"> 
</head> 
+0

Mi piace molto la struttura del tuo progetto. Lo proveremo anche io quando sono a casa. – MarioP

+0

Devo pensare prima di postare - volevo anche chiedere: c'è qualche documentazione su questo? Anche ora che so cosa sto cercando, non riesco a trovare nulla su dartlang.org - Mi ci è voluto un po 'per capire perché "package: widget/effects.dart" ha funzionato (La mia ipotesi è perché il nome dell'applicazione è "widget"?) – MarioP

+0

Ho alcuni dei miei componenti web in lib e li importa come descrivi. Ma è molto ingombrante per il debug: In caso di errore, il debugger salta al file in 'web/out/packages' e succede molto che modifico il file sbagliato. Quindi, se voglio impostare un punto di interruzione, è difficile trovare il posto giusto per impostarlo. –

Problemi correlati