Собранные метаданные содержат ошибку, о которой будет сообщено во время выполнения: Ссылка на неэкспортированную функцию

#javascript #angular #regex #aot #ng-packagr

Вопрос:

Когда я создаю библиотеку пользовательского интерфейса angular с помощью ng-packagr, в файле определено следующее регулярное выражение

 
> /^(?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= 
<>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-
f]{2})*")(?: (?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <
>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f
]{2})*"))*(?:,(?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <
>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f
]{2})*")(?: (?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <>
#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f]
{2})*"))*)*$/.test("CN=abcd,CN=abcd,O=abcd,C=us")
true

 

Чтобы создать библиотеку, мне нужно преобразовать тип регулярного выражения в строковый тип, но при создании библиотеки angular я столкнулся с проблемой.

Поэтому я попытался преобразовать регулярное выражение в строку. но регулярное выражение не находится в удобочитаемом формате. так как мы должны преобразовать все » в «и». «в»»

Поэтому я придумал другое решение, используя метод String.raw, в котором я могу просто передать существующее регулярное выражение в метод String.raw без изменений

 static BASEDN: RegExp = new RegExp(String.raw`^(?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*")(?: (?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*"))*(?:,(?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*")(?: (?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*"))*)*
 #javascript #angular #regex #aot #ng-packagr



Вопрос:

Когда я создаю библиотеку пользовательского интерфейса angular с помощью ng-packagr, в файле определено следующее регулярное выражение
 
> /^(?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= 
<>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-
f]{2})*")(?: (?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <
>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f
]{2})*"))*(?:,(?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <
>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f
]{2})*")(?: (?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <>
#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f]
{2})*"))*)*$/.test("CN=abcd,CN=abcd,O=abcd,C=us")
true

 

Чтобы создать библиотеку, мне нужно преобразовать тип регулярного выражения в строковый тип, но при создании библиотеки angular я столкнулся с проблемой.

Поэтому я попытался преобразовать регулярное выражение в строку. но регулярное выражение не находится в удобочитаемом формате. так как мы должны преобразовать все " в "и". "в""

Поэтому я придумал другое решение, используя метод String.raw, в котором я могу просто передать существующее регулярное выражение в метод String.raw без изменений

);

Но не удалось создать библиотеку пользовательского интерфейса с помощью компилятора ngc. Поскольку компилятор AOT не поддерживает выражения шаблонов с тегами; избегайте их в выражениях метаданных.
https://angular.io/guide/aot-metadata-errors#tagged-template-expressions-not-supported

Столкнувшись с приведенной ниже ошибкой:

 regex.enums.ts:23:10: Metadata collected contains an error that will be reported at runtime: Reference to a non-exported function.
  {"__symbolic":"error","message":"Reference to a non-exported function","line":22,"character":9,"context":{"name":"RegExp"}}

 

Поэтому, чтобы решить эту проблему, у меня есть решение в Интернете, которое мы можем использовать
// @динамическая аннотация к классу/функции, чтобы избежать компиляции

Но @динамическая аннотация устарела с Ivy, учитывая, что ее система метаданных постепенно выходит из строя. Поэтому я не уверен, как решить эту проблему. Пожалуйста, помогите, могу ли я использовать динамическую аннотацию здесь или есть какой-либо другой способ решить эту проблему?

Комментарии:

1. Конструктор регулярных выражений принимает строковый параметр. Вы передаете литерал регулярного выражения. Вам не нужен конструктор, если у вас есть буквальное регулярное выражение.

2. Спасибо за ваш вклад. Отредактировал мой вопрос. Мой файл содержит строку, а не буквальное регулярное выражение, которое я передаю в конструктор регулярных выражений, когда я использую метод String.raw, он работает как шарм. Но когда я его создаю, он терпит неудачу с ошибками метаданных.

3. Попробуйте одну из этих допустимых строк JS // разделители или » разделители или «» разделители