Aurelia: ошибка: попытка зарегистрировать элемент, если элемент с таким именем уже существует.Имя: н.- происходит только в производственной сборке webpack - PullRequest
0 голосов
/ 08 сентября 2018

Я недавно разделил свои сборки веб-пакетов на отдельные конфигурационные файлы и объединил их с одним общим.

Единственное отличие между конфигурациями, кроме mode, - это глобально определенный BASE_URL

* 1006.*

До этого я использовал один webpack.config и опцию --mode production из CLI.

В моем коде я вижу правильный BASE_URL в обоих комплектах, ноработает только development один;другой выдает ошибку: Error: Attempted to register an Element when one with the same name already exists. Name: n., что очень бесполезно, так как у меня нет элемента с именем n.

РЕДАКТИРОВАТЬ: ошибка появляется при автоматической регистрации глобальных ресурсовв частности, для этого моего DateFormat конвертера значений:

date-format.ts

export class DateFormatValueConverter {
    toView(value: string) {
        return new Date(value).toLocaleString();
    }
}

index.ts

import { FrameworkConfiguration } from 'aurelia-framework';
import { DateInputFormatValueConverter } from './value-converters/date-input-format';
import { DateFormatValueConverter } from './value-converters/date-format';

export function configure(config: FrameworkConfiguration) {
    config.globalResources(
        [
            DateInputFormatValueConverter,
            DateFormatValueConverter
        ]
    )
}

EDIT2: похоже,все, что выделено глобально, за исключением первой записи.

EDIT3: Кажется, что если я объявляю глобальные ресурсы через строки (и PLATFORM.moduleName), работает.Это может быть то, что команда Aurelia должна изучить.

export function configure(config: FrameworkConfiguration) {
    config.globalResources(
        [
            PLATFORM.moduleName('./value-converters/date-input-format'),
            PLATFORM.moduleName('./value-converters/date-format'),
            PLATFORM.moduleName('./value-converters/delay-format'),
            ...
        ]
    )
}

1 Ответ

0 голосов
/ 09 сентября 2018

Причина в том, что имя класса было искажено на 1-2 буквы. как это:

export class DatePicker {}
// turned into
// when inspecting the class for static resources declaration, name of the resource will be "n"
let n = class{}
exports.DatePicker = n;

Исправление - дать им явное имя:

// either
@customElement('date-picker')
// or
export class DatePicker {
  static $resource = {
    name: 'date-picker',
    type: 'element'
  }
  // if it's custom element, no need to specify type
  static $resource = 'date-picker';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...