обслуживание .dart-файлов из папки lib /

Это моя (упрощенная) структура папок:

/
  pubspec.yaml
  build/
    client.dart.js, etc
  lib/
    game.dart
  server/
    server.dart
  web/
    client.dart
    canvas.dart
    index.html

Я использую код из примера "dartiverse search" для обслуживания этих файлов (упрощенный):

var buildDirectory = new Http.VirtualDirectory(buildPath);
buildDirectory.jailRoot = false;

// Serve everything not routed elsewhere through the virtual directory.
buildDirectory.serve(router.defaultStream);

// Special handling of client.dart. Running 'pub build' generates
// JavaScript files but does not copy the Dart files, which are
// needed for the Dartium browser.
router.serve("/client.dart").listen((request) {
  Uri clientScript = Platform.script.resolve("../web/client.dart");
  buildDirectory.serveFile(new File(clientScript.toFilePath()), request);
});

router.serve("/canvas.dart").listen((request) {
  Uri clientScript = Platform.script.resolve("../web/canvas.dart");
  buildDirectory.serveFile(new File(clientScript.toFilePath()), request);
});

router.serve("/lib/game.dart").listen((request) {
  Uri clientScript = Platform.script.resolve("../lib/game.dart");
  buildDirectory.serveFile(new File(clientScript.toFilePath()), request);
});

Мой вопрос: есть ли лучший способ обслуживать файлы в проекте с .dart-файлами, разделенными на папки lib / и web /? Показанный выше метод может работать нормально для нескольких файлов, но что, если мой проект вырастет и у меня будет 50 таких файлов .dart?


person TomTasche    schedule 02.02.2014    source источник


Ответы (1)


Обычно я указываю свой VirtualDirectory на web /, поэтому вам не нужно сопоставлять пути к вашим файлам в web /.

Для файлов в lib / редактор Dart (Pub) создает символические ссылки на пакеты в web /, которые указывают на каталог пакетов в вашем проекте. Этот каталог пакетов также содержит содержимое lib /, поэтому вы можете получить доступ к game.dart с помощью /packages//game.dart относительно web /. Пакет, импортируемый в ваш код дротика, также будет использовать этот путь для выборки источника.

Теперь все ваши файлы будут обслуживаться VirtualDirectory, и вам понадобится маршрутизатор только для таких вещей, как веб-сокеты и т. Д.

person lucidd    schedule 18.02.2014
comment
Сначала это казалось идеальным решением, но как насчет файлов .dart.js? Они находятся в папке build / ...: / - person TomTasche; 18.02.2014
comment
Для тестирования с помощью скомпилированных файлов .dart.js вы можете указать VirtualDirectory на build / web /. - person lucidd; 19.02.2014
comment
Но я хочу иметь возможность использовать и файлы .dart, и .dart.js одновременно! :) - person TomTasche; 19.02.2014
comment
Можете ли вы объяснить, что вы имеете в виду, говоря об одновременном использовании обоих? Я не думаю, что это имеет смысл, поскольку файлы .dart и .dart.js содержат одну и ту же логику, только в разных форматах. - person lucidd; 19.02.2014
comment
Я хочу опубликовать веб-приложение, но в настоящее время большинство браузеров не поддерживают Dart. Я хочу, чтобы неподдерживаемые браузеры могли беспрепятственно использовать вместо этого скомпилированную версию JavaScript. Ты знаешь, что я имею в виду? - person TomTasche; 19.02.2014
comment
хорошо, это имеет смысл. Я думаю, поскольку dart2js компилирует все ваши файлы dart в один большой файл .dart.js, вам нужно только скопировать его в каталог web /, где находятся источники dart. ‹Script src = / packages / browser / dart.js› ‹/script› гарантирует загрузку javascript только в том случае, если браузер не поддерживает dart, так что все должно быть в порядке. Я провожу быстрый тест на одном из своих проектов, и он отлично работает. - person lucidd; 19.02.2014
comment
Я попробую, когда буду дома, но насколько я помню, компилятор создает отдельный .dart.js-файл для каждого .dart-файла? В любом случае спасибо за помощь! - person TomTasche; 19.02.2014