Получение пути доступного скрипта в Dart

Цель состоит в том, чтобы создать файл конфигурации для серверного приложения Dart, который при необходимости можно импортировать в такие сценарии:

import 'Config/config.dart';

Однако для этого сценария конфигурации важно то, что он знает свое собственное местоположение при доступе к нему с помощью импорта (а не местоположение файла, к которому он обращается). В настоящее время он использует эту строку ниже, чтобы найти путь:

final String ROOT_DIR = dirname(Platform.script.toFilePath());

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

final String PUBLIC_DIR = join(ROOT_DIR, 'Public');
final String VIEWS_DIR = join(ROOT_DIR, 'Views');

Как лучше всего подойти к этому? Я видел это сообщение: Получить путь к сценарию в Dart ( аналог константы __DIR__ в PHP), что является той же ситуацией, однако я не вижу чистого способа использования относительных путей для поиска папки маршрута.

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


person Will Squire    schedule 28.09.2014    source источник


Ответы (1)


Это не поддерживается в Dart. Возможно, Мезони нашел какой-то трюк, чтобы получить эту информацию, которую он упаковал в свой пакет caller_info https://stackoverflow.com/a/24880092/217408.

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

person Günter Zöchbauer    schedule 28.09.2014
comment
Ах, хорошо, так что он даже не будет знать, где будет находиться минимизированный и древовидный каталог/файл? Я отмечу это как ответ, но не могу получить доступ к файлам bash и получить эту информацию? Или вы хотите сказать, что дартс-приложения будут скомпилированы в один файл? (Чего я и ожидаю, прочитав это: code.google.com/ p/dart/issues/detail?id=20090). Спасибо за ваш ответ. - person Will Squire; 03.10.2014
comment
Когда вы запускаете pub build(dart2js/dart2dart), код может заканчиваться одним файлом. Преобразователи могут удалять код и вставлять вновь сгенерированный код. Файлы сценариев можно загружать из временных URI... Dart предоставляет только путь к исходному файлу сценария (содержащему main()). - person Günter Zöchbauer; 04.10.2014