2014-10-02 4 views
0

У меня есть эта установка:Dart скрипты, которые вызывают скрипты путем импорта

├── bin 
│   ├── all.dart 
│   ├── details 
│   │   ├── script1.dart 
│   │   └── script2.dart 
| | ..... 

all.dart просто импортирует script1.dart и script2.dart и называет их основной. Цель состоит в том, чтобы иметь кучу скриптов под подробностями, которые можно запускать индивидуально. Кроме того, мне нужен отдельный сценарий all.dart, который может запускать их все сразу. Это упростит отладку отдельных сценариев, но все же позволит запускать все сценарии.

all.dart

import 'details/script1.dart' as script1; 
import 'details/script2.dart' as script2; 

main() { 
    script1.main(); 
    script2.main(); 
} 

script1.dart

main() => print('script1 run'); 

script2.dart

main() => print('script2 run'); 

Итак, это работает, и я вижу утверждения печати, ожидаемые при запуске all.dart, но у меня есть две проблемы.

Во-первых, я должен связаться со мной пакетами под подробнее. Очевидно, паб не распространяет программные ссылки пакетов на подпапки. Ожидается ли это или есть обходное решение?

Во-вторых, есть ошибки, отмеченные в all.dart в точке второго оператора импорта. Ошибка анализатора:

The imported libraries 'script1.dart' and 'script2.dart' should not have the same name '' 

Так я думаю, так как я импортировать другие сценарии, как будто они являются библиотеками и так как они не имеют сценария библиотеки [12]; Оператор в верхней части они оба имеют одинаковое имя - пустое имя?

Примечание: Первоначально я имел все эти под Lib и я мог запускать их как сценарии, задающих подходящий --package-корень в командной строке, даже если они были библиотеки с основным. Но затем, чтобы отлаживать, мне нужно запустить редактор Dart Editor, поэтому я переведу их до bin. Возможно, редактор должен разрешить библиотеки под lib с главным, которые будут запускаться как сценарий, так как они отлично работают за пределами редактора? Фактические различия между скриптом/библиотекой кажутся немного ненужными (поскольку другие языки сценариев позволяют файлам быть обоими).

Как его очистить?

ответ

1

Я не уверен, каков фактический вопрос.

  • Если в библиотеке нет инструкции библиотеки, пустая строка используется как имя. Просто добавьте инструкцию библиотеки с уникальным именем, чтобы исправить это.

  • Добавление символических ссылок в подкаталоги решает проблему импорта скриптов в подкаталоги. Я делаю это регулярно.
    Было упомянуто несколько раз в dartbug.com, что символические ссылки должны уходить полностью, но я понятия не имею, сколько времени это займет.

  • Я никогда не пытался помещать файлы сценариев с основным в lib, но это противоречит соглашениям о компоновке пакетов, и я думаю, именно поэтому DartEditor не поддерживает его.

+0

Как очистить предупреждения и не поддерживать связь? На третьем этапе возникает вопрос о реальной разнице между скриптом и lib. Почему у вас проблемы с библиотекой с основным, но у меня нет проблем с скриптом с основным (и по соглашению компоновки пакетов, а не с lib), требующим инструкции библиотеки сверху, чтобы избавиться от предупреждений? Не знаете, как редактор определяет, может ли он работать; но одним решением будет редактор, который проверяет * main *, а если присутствует, запускает * dart --package-root '* устанавливает в пакетную папку пакетов. Тогда никакие программные ссылки, необходимые * и * ничего, кроме основного (даже библиотеки), также могут выполняться как сценарий. – user1338952

+0

Я не знаю о 'lib', но в противном случае вы сможете создать конфигурацию запуска для своего скрипта и добавить пользовательские аргументы, такие как' --package-root'. Немного громоздко, потому что вам нужна конфигурация для каждого файла. Уникальное имя библиотеки необходимо для канонизации AFAIK. –

+1

Нет, слишком много. Я буду придерживаться внутреннего названия скриптов (libs) и делать softlink на данный момент, поскольку он работает без предупреждений анализа. – user1338952

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