2013-04-22 3 views
5

Согласно папке Package layout conventionsweb должна содержать следующее:Как организовать код дротика в веб-папку

HTML, CSS, изображения, и, черт возьми, наверное, даже некоторые JavaScript. Все это входит в веб-каталог вашего пакета. Вы можете упорядочить содержимое этого контента. Сходите с ума с помощью подкаталогов, если это вас радует.

Так что мой web каталог выглядит примерно так:

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

Теперь, как я управляю всеми этими операторами импорта. Я получаю много заявлений нравятся:

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

Я не люблю использовать, что многие ../ в моем импорте, потому что это является хрупким, и я получаю проблемы всякий раз, когда я что-либо изменить в своей структуре папок.

Есть ли лучший способ организовать код внутри папки web?

или

Есть еще один способ сделать импорт?

ответ

3

К сожалению, нет. Существует открытый feature request, рассматривающий это, но реализация этого может занять некоторое время. Лучший способ обойти это состоит в том, чтобы объединить несколько классов в один файл или несколько файлов в библиотеку - эффективно сократить количество операторов импорта. Я дошел до того, что сделал все свое приложение одной большой библиотекой с операторами part of, поэтому мне не пришлось бы иметь дело с операторами импорта. Хотя это не устраняет основную проблему, она работает сейчас.

Кроме того, рефакторинг вместо простого переименования при изменении изменений структуры папок повлиял на операции импорта, устраняя боль при ручной настройке.

Веб-компоненты могут быть импортированы в библиотеку, чтобы их можно было реэкспортировать с помощью оператора export, таким образом объединив их в один импорт.

+0

Это обходное решение в порядке, но оно не работает с ** веб-компонентами **, поскольку каждый веб-компонент является его собственной библиотекой (см. [Комментарий Криса Бакета] (http : //stackoverflow.com/questions/15999088/dart-library-layout-with-web-component#comment22820794_15999088). –

+0

Надеюсь, что запрос функции, о котором вы упомянули, займет слишком много времени, так как у меня много веб-компонентов. –

+0

Это обходное решение также имеет другие недостатки, такие как замедление работы редактора при увеличении размера проекта. К сожалению, я не знаю никаких других обходных решений. Имхо, импорт сейчас неловко. Тем не менее, если вы должны использовать «../» в своих заявлениях, вы можете изменить структуру папок с помощью рефакторинга - это изменяет операторы импорта, чтобы отразить новую структуру. все еще не элегантный, но он работает ... – MarioP

4

Я положил почти весь код моего приложения в lib, чтобы избежать проблем, которые вы видите. Это работает даже для веб-компонентов.

Смотреть это компоненты из widget.dart: https://github.com/kevmoo/widget.dart/tree/master/lib/components

Я обычно только положить app.dart в веб /, которая просто тянет в библиотеках из библиотеки, и инициализирует приложение.

Смотрите этот пример приложения, которое тянет в пакете паб, который имеет компоненты: https://github.com/sethladd/catpic-app

Это то, что мой HTML файл выглядит следующим образом. Обратите внимание на включение пакетов в путь:

<!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

Мне очень нравится ваша структура проекта. Попробуй это, когда я буду дома. – MarioP

+0

Я должен думать перед публикацией - я также хотел спросить: есть ли какие-либо документы по этому поводу? Даже теперь, когда я знаю, что я ищу, я ничего не могу найти на dartlang.org. Мне понадобилось время, чтобы понять, почему «package: widget/effects.dart» работал (думаю, это потому, что имя приложения «виджет»?) – MarioP

+0

У меня есть некоторые из моих веб-компонентов в lib и импортируйте их, как вы описываете. Но это очень громоздко для отладки: в случае ошибки отладчик переходит к файлу под 'web/out/packages', и это происходит очень часто, когда я редактирую неправильный файл. Затем, если я хочу установить точку останова, трудно найти нужное место для ее установки. –

Смежные вопросы