Можно ли дать другое имя зависимости пакета в pubspec

Мне удалось добавить зависимость относительного пути в моем приложении

name: myapp
description: A sample app
dependencies:
  mylib:
    path: ../mylib

а затем импортировать его в мой исходный код

import 'package:mylib/mylib.dart';

Однако имя «mylib» взято из пакета библиотеки pubspec, и если я хочу его изменить (например, «mynewlib»), мне нужно изменить имя везде (исходный код pubspec И dart)

Это также предотвращает наличие двух пакетов с одинаковыми именами (да, я знаю, это странно, но я не контролирую то, что люди помещают в pub.dartlang.org). То, что я хотел бы сделать, это что-то вроде

name: myapp
description: A sample app
dependencies:
  mylib:
    path: ../mylib
    name: mynewlib

и иметь в исходном коде

import 'package:mynewlib/mylib.dart';

Однако я не могу найти правильный синтаксис и возможно ли это. (Пример кода, готовый для тестирования, находится здесь: https://github.com/alextekartik/dart-test/tree/master/lib_test). Обратите внимание, что здесь я говорю не об имени библиотеки, а об имени пакета (и название пакета mylib может сбивать с толку)


person alextk    schedule 28.05.2013    source источник


Ответы (2)


Невозможно определить другое имя для самого пакета (насколько я знаю - если есть, мне тоже было бы интересно).

Однако в качестве обходного пути вы можете переобернуть его. Например, предположим, что у вас есть два пакета «mylib».

Создайте новое библиотечное приложение «mylib1». Там вы импортируете первую «mylib» и реэкспортируете ее, используя export. Создайте еще одно библиотечное приложение «mylib2» для другого «mylib». Тогда у вас есть разные имена пакетов для использования в одном и том же приложении.

Да, это немного неудобно, но пока нет лучшего способа...

person MarioP    schedule 29.05.2013
comment
Спасибо за подтверждение. Я создал запрос функции code.google.com/p/dart/issues. /detail?id=10940 - person alextk; 29.05.2013

Вы можете разрешить конфликты имен при импорте с помощью:

import 'package:mylib/mylib.dart' as Foo;

Это создаст имя верхнего уровня для доступа к API библиотеки:

Foo.bar();
person John Evans    schedule 28.05.2013
comment
Как я сказал в конце своего вопроса, я говорю не об имени библиотеки, а об имени пакета. Действительно здорово разрешить «как Xxx» для имени библиотеки иметь что-то похожее на пространство имен. Однако, если у меня есть 2 пакета с одинаковым именем или если я хочу изменить имя пакета, не просматривая все файлы, я не могу найти решение. - person alextk; 28.05.2013