Внешний файл компонента не найден

Обновлено: 06.07.2024

Здравствуйте! Начиная со среды, 5 февраля, я столкнулся с множеством ошибок обновления. В первую очередь связано с тем, что внешний компонент вызвал исключение или неизвестную ошибку. Когда я смотрю на запросы, кажется, что это связано с подключением папки к файлам mdb/MDB. Я создал очень небольшой тестовый запрос - к этим файлам mdb, и кажется, что когда я выполняю запрос в первый раз или два, все в порядке. Однако, если я попытаюсь выполнить какое-либо преобразование (выбрать столбцы, фильтровать, отформатировать в текст, я получаю сообщение об ошибке ниже.

Одна из моих больших моделей данных, она работала всего 2 дня назад — и теперь, после попытки на нескольких компьютерах и старых файлов резервных копий — эта ошибка продолжает преследовать меня.. 1) Это работало в течение последних 2 дней. 2) Предыдущие резервные копии сначала работают, а затем терпят неудачу. 3) Пробовал на нескольких компах. 4) Я изолировал два запроса mdb в их собственный тестовый файл,

Я в тупике, и мне нужно решение!

Спасибо за ваши мысли!

Я отфильтровал все строки с ошибками (их нет)

Rich_P

  • Отметить как новое
  • Добавить в закладки
  • Подписаться
  • Отключить звук
  • Отправить сообщение другу

Надеюсь, это не двойной пост. Мой последний ответ ошибочен, и я не вижу его в этой теме. Поэтому я пытаюсь снова.

Я начал замечать эту проблему только на этой неделе. Я использую удаленную машину Win 10 VMWare через RDP на сайте клиента. Файл PBI Desktop отлично работал в течение нескольких месяцев. Он подключается к одному запросу в очень маленьком файле Access.accdb (492 КБ).

Сегодня утром я обновился до версии от февраля 2020 года и столкнулся с той же проблемой.

Я пытался убедить клиента, что PBI будет лучше, чем решение Excel, с которым я начал. Они заинтересованы и хотят, чтобы я доработал его некоторыми дополнительными функциями, прежде чем показывать президенту. Эта проблема ставит всех нас, разработчиков, в затруднительное положение. У меня есть еще один клиент, который хочет использовать этот материал внутри И для СВОИХ клиентов! Прямо сейчас мне пришлось бы сказать им, чтобы они стояли наготове.

Я надеюсь, что MS уведомит об этом и быстро найдет решение.

Деллис81

  • Отметить как новое
  • Добавить в закладки
  • Подписаться
  • Отключить звук
  • Отправить сообщение другу

Привет, Рич! Я с вами по срочности и нужно, чтобы все были счастливы. Такие задержки только ослабляют энтузиазм тех, кого мы обещаем.

Технический специалист руководил и поощрял меня использовать драйвер OBCD. По мере выполнения шагов вам будет предложено указать Excel или доступ. Для моего простого теста это решение сработало.

Часть моей задачи заключается в том, что я подключаюсь через папку с несколькими файлами доступа. Это решение OBDC подходит для одного файла/запроса. У меня есть 10-15 файлов, и я не в восторге от краткосрочной операции, не зная, будет ли исправление быстрым или месяцами.

Технический специалист должен был вернуться ко мне, как только они закончат этап расследования.

Rich_P

  • Отметить как новое
  • Добавить в закладки
  • Подписаться
  • Отключить звук
  • Отправить сообщение другу

Спасибо за подсказку. Технический специалист по какой-либо причине рекомендовал использовать ODBC, а не OLE DB?

Я правильно понимаю, что вы подключаетесь к 10-15 базам данных в папке? Если да, поможет ли это вам создать новый файл базы данных и связать его с соответствующими таблицами в каждом из 10–15 файлов, чтобы вы могли объединить их в единый источник в отношении PBI?

  • Отметить как новое
  • Добавить в закладки
  • Подписаться
  • Отключить звук
  • Отправить сообщение другу

У меня завтра утром сеанс демонстрации экрана с представителем службы поддержки MS, экспертом Power BI и экспертом Sharepoint. Я получаю эту ошибку при подключении к папке Sharepoint и извлечении таблиц из файлов Excel в этих папках и добавлении этих таблиц вместе в Power BI.

Этот процесс работает уже полтора года, и примерно с 10 февраля у меня не было ни одного успешного обновления в Power BI Desktop. Я обострил проблему, так что завтра со мной свяжутся 3 человека по одному звонку. Надеюсь найти решение.

Буду держать вас в курсе.

Rich_P

  • Отметить как новое
  • Добавить в закладки
  • Подписаться
  • Отключить звук
  • Отправить сообщение другу

Удачно с экспертами?

  • Отметить как новое
  • Добавить в закладки
  • Подписаться
  • Отключить звук
  • Отправить сообщение другу

Эксперт, с которым я разговаривал, попросил меня установить Fiddler, и ему нужен след неудачного обновления. К сожалению, в это время я не могу пользоваться интернетом, а мой отчет работает больше часа, поэтому я не могу сидеть на работе и ничего не делать в ожидании обновления. Я пытаюсь найти удобное время, чтобы получить для них эту трассировку Fiddler, чтобы они могли диагностировать проблему.

Деллис81

  • Отметить как новое
  • Добавить в закладки
  • Подписаться
  • Отключить звук
  • Отправить сообщение другу

Привет, Рич. Нет, последнее сообщение со службой поддержки поступило в конце прошлой недели. 27/28 февраля - или около того. Дело все еще находится в стадии расследования, дата решения неизвестна.

Я попытался пойти по маршруту ODBC на PBI для настольных ПК — и, похоже, работает лучше. Однако с периодическими икотами. Затем я рискнул попытаться выполнить процесс импорта с использованием соединителя ODBC в потоке данных службы, и в моем простом тестовом случае — без сбоев обновления.

Спасибо за ваше предложение по связыванию файлов. Тем не менее, я "зеленый" в этом деле, и мои исследования не продвинулись очень далеко. Но да, связывание файлов было бы решением. Когда данные обновляются, каков процесс «перезагрузки» даты в связанный файл mdb. Это делается вручную?

У меня есть годовые файлы mdb с потенциально более чем 20-летними данными. Но пока я ограничиваю свой импорт 4 годами (файлы). Но проблема в том, что мне нужны две таблицы в файле mdb, что удваивает запросы на импорт. Со старым разъемом «папка» процесс был прямолинейным. У меня есть 3 разных набора годовых файлов mdb, с которыми нужно иметь дело. (3 набора*x2таблицы x 4 года) = 24 потенциальных запроса.

Буду держать всех в курсе. Я надеялся, что техник свяжется со мной после того, как в эти выходные я получил электронное письмо, в котором информировал ее о моих попытках ODBC.

В некоторых случаях может потребоваться включить в приложение Vue дополнительный сценарий JavaScript. Для этого может быть любая причина — вы хотите применить дизайн материалов для определенного компонента, хотите иметь пользовательский интерфейс Kendo или что-то еще. Действительно ли вам нужно внедрить внешний скрипт в компонент Vue, мы обсудим позже, а сегодня мы здесь по одной причине — узнать, как загрузить внешний скрипт в Vue.js.

Существует два подхода к внедрению скриптов JavaScript:

  • Вы загружаете его из внешнего источника — CDN или из отдельного файла.
  • Вы вставляете скрипт внутрь HTML-элемента.

Для нашего примера нет никакой разницы, вставляете ли вы скрипт из отдельной CDN или используете скрипт, который находится в папке проекта. Оба они работают просто отлично. И при последнем подходе включать весь скрипт в документ — плохая идея, поэтому обсуждать его не будем.

Итак, как загрузить внешний скрипт в компонент Vue?

Вы не можете просто включить скрипт в свой компонент. Когда вы попытаетесь это сделать:

Вы получите сообщение об ошибке:

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

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

Быстрый способ внедрить скрипт — сделать это непосредственно в компоненте с помощью смонтированной функции. Если вы не знакомы с mount, функция выполняет код перед загрузкой страницы. Так что в нашем случае скрипт будет добавлен до загрузки страницы. Скажем так, у нас есть только что созданный проект Vue, и мы добавляем к нему смонтированную функцию:

Что происходит внутри смонтированной функции? Ничего особенного: определяется переменная с именем externalScript и ей присваивается элемент скрипта. Затем присваивается атрибут src со ссылкой на скрипт, и, наконец, элемент добавляется как дочерний элемент HTML-заголовка. И код приводит к желаемому результату:

Загружен внешний скрипт в Компонент Vue

Вам действительно нужно внедрить внешний скрипт в компонент Vue?

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

Это полностью зависит от вас, нужно ли вам загружать внешний скрипт JavaScript в компонент Vue или использовать его во всем приложении в соответствии с вашими потребностями.

Однако я имею в виду сценарии JavaScript, которые загружаются из внешних CDN. Итак, если вы пытаетесь реализовать известную библиотеку, есть шанс, что вы сможете получить ее в виде пакета npm.

Совет: если вам не нужен сценарий исключительно для одного компонента, вы можете включить его для всего приложения.

Допустим, вы хотите, чтобы скрипт был доступен в компоненте. В другом моем уроке я объяснил, как добавить Bulma CSS в приложение. Я не буду вдаваться в подробности здесь, поскольку это не тема, но я приведу простой пример.Поэтому, когда вы устанавливаете пакет npm с помощью Vue CLI или Vue UI, если вы хотите его использовать, единственное, что вам нужно, это добавить что-то подобное внутри элемента:

Что касается этого конкретного примера, то в HTML-документ будет внедрен скрипт Bulma. Несмотря на то, что это файл CSS, то же самое работает и со сценарием — просто убедитесь, что вы добавляете его внутрь элемента в своем компоненте. Я использовал этот файл CSS только в качестве примера.

Однако другие компоненты, не связанные с этим компонентом, могут его не видеть. Но вот решение для этого. Поместите это в файл main.js:

И вы будете иметь это во всем приложении. Опять же, это просто пример, я упоминал об этом, поскольку имел дело с этим в прошлом. Но механизм одинаков для любого скрипта JS.

Вывод: узнайте, доступен ли скрипт JS в виде пакета npm. Если это так, обратитесь к его инструкциям по установке, и вам может не понадобиться решение, представленное в этой статье.

В каких случаях лучше использовать глобальный сценарий, а не компонентный

И напоследок, глобальная загрузка внешнего скрипта в компоненте Vue не является хорошим решением:


Несмотря на широкую доступность пакетов npm, иногда нам может понадобиться использовать несколько внешних библиотек, которые требуют импорта некоторых файлов JS.

Для функций, используемых во всем приложении, мы можем просто добавить файлы JS в заголовок с помощью тега в нашем глобальном файле index.html.

Однако для функций, которые используются в определенных компонентах, это не имеет смысла. Поскольку React не поддерживает тег в компоненте , вот несколько способов добавления файлов JS к определенным компонентам.

Это самый простой способ загрузки файлов JS для новичка.

React-script-tag — это пакет npm, содержащий тег React, поддерживающий универсальный рендеринг. Поддерживаются все стандартные атрибуты, такие как async , src , type и defer, включая обратные вызовы onLoad и onError.

У нас также есть флаг isHydrating, который является логическим значением. По умолчанию оно равно false и должно быть равно true, если клиент использует функцию hydr() для рендеринга сервера.

Подробнее о Hydrate() можно прочитать в документации React.

Helmet — это компонент React, который управляет всеми вашими изменениями в заголовке документа. Это еще один простой, удобный для начинающих пакет, поддерживающий отрисовку как на стороне сервера, так и на стороне клиента.

Helmet принимает простые теги HTML и выводит простые теги HTML.

Примечание: React Helmet тяжелее, чем react-script-tag, поэтому я бы не рекомендовал его использовать, если ваша единственная цель — использовать теги script.

Несмотря на то, что вышеперечисленные решения просты в реализации, они требуют от нас добавления дополнительных пакетов, которые могут увеличить объем нашего приложения. Если у вас есть опыт программирования, вы можете сделать следующее:

Если вы добавляете файлы JS более чем в один компонент, лучше иметь собственный файл, который возвращает функцию для этого.

В вашем компоненте:

Если вы не хотите сохранять добавленный файл JS при перенаправлении/перезагрузке страницы, вам следует удалить скрипт в методе жизненного цикла componentDidUnmount. Для этого:

И в вашем компоненте:

Если вы являетесь поклонником хуков в React, то useEffect — отличный способ добавить внешние файлы JS. Вы можете прочитать мою статью об использовании хука эффектов.

Если кратко, useEffect похож на методы жизненного цикла componentDidMount и componentDidUpdate в компонентах класса React.

Если ваш эффект возвращает функцию, React запустит ее, когда придет время очистки, в основном метод жизненного цикла componentDidUnmount. Здесь мы удалим добавленный скрипт.

React позволяет нам создавать собственные хуки, которые позволяют извлекать логику компонентов в повторно используемые функции. Логика добавления внешнего JS-файла к компоненту может быть сохранена как пользовательский хук, как показано ниже:

абстракция в синем

Маловероятно, что вы будете разрабатывать новую систему без использования внешних программ. На самом деле, добавляя функциональность в существующую систему, разработчики часто используют существующие компоненты, чтобы обеспечить некоторые или все новые функции. В этом контексте внешние компоненты относятся к программному обеспечению, «не описанному здесь», например:

  • Программное обеспечение, приобретаемое в виде готовых компонентов, платформ и приложений.
  • Сторонние библиотеки с открытым исходным кодом или проприетарные библиотеки.
  • Виджеты и гаджеты добавляются или загружаются во время выполнения как часть веб-проекта.
  • Доступ к некоторым функциям, предоставляемым компонентом, которым вы планируете воспользоваться (например, доступ к веб-службе, обеспечивающей федеративную аутентификацию)
  • Программное обеспечение, разработанное другой командой в вашей организации.
  • Программное обеспечение, разработанное вашей командой ранее (возможно, в то время, когда подход к безопасности не был таким зрелым, как сейчас)

Эти компоненты могут быть включены в виде двоичных файлов, библиотек и исходного кода или могут существовать просто как API.

Распространенная поговорка о безопасности программного обеспечения заключается в том, что, по возможности, функциональность должна быть достигнута за счет повторного использования проверенных и надежных частей ранее протестированного и проверенного программного обеспечения, а не разработки каждый раз с нуля. Важным отличием является то, что вновь включаемое программное обеспечение действительно было опробовано, протестировано и признано соответствующим вашим текущим стандартам безопасности программного обеспечения. Решение «использовать, а не создавать» означает, что программное обеспечение в целом наследует недостатки безопасности, ограничения безопасности, ответственность за обслуживание и модель угроз того, что вы включаете. Это наследование может привести к дефициту безопасности, который необходимо решить, смягчить или учесть, когда система будет завершена. «Модель угроз» системы представляет собой представление состояния безопасности системы, когда учитываются все возможные угрозы, определяются меры по их устранению и выявлены уязвимости.

Убедитесь, что вы выделили время в своей методологии разработки программного обеспечения, чтобы учесть влияние на безопасность вашей системы при включении внешнего компонента:

  • Как внешний компонент меняет модель угроз всей системы? Увеличивает ли это поверхность атаки? Изменяет ли он точки входа в систему, которые уже учитывались в его собственной модели угроз?
  • Были ли добавлены новые функции, возможности или интерфейсы, даже если вы их не используете? Можно ли отключить эти неиспользуемые функции?
  • Включаемый внешний компонент также включает в себя другие внешние компоненты со своими недостатками безопасности?
  • Получили ли вы внешний компонент из известного и надежного источника?
  • Предоставляет ли внешний компонент документацию по безопасности, которая может помочь вам лучше понять его модель угроз и влияние его конфигурации на безопасность?

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

Примеры потенциальных проблем безопасности со сторонними компонентами включают следующее:

Кажется, невозможно импортировать внешние библиотеки и работать с ними в пользовательских компонентах реагирования. Я зафиксировал проблему в Webpack, который не включает импортированные библиотеки в окончательный вариант JS, используемый dash в Python.

Ожидаемое поведение

Код, который нормально работает с помощью команды «npm run start», можно преобразовать в допустимый код Python с помощью команды «npm run build:all». Затем можно использовать python Usage.py для отображения кода с помощью Dash.

Реальное поведение

Код работает нормально, используя "npm run start". Его можно преобразовать в компонент тире, однако при использовании этого компонента, вызывающего «python use.py», отображается сообщение: «Ошибка загрузки зависимостей». Консоль браузера показывает, что компонент из внешней библиотеки не найден (TypeError: Cannot read property 'Map' of undefined).

Этапы воспроизведения

  1. Запустите шаблон и создайте пример компонента.
  2. Импортировать внешнюю библиотеку в пользовательский компонент и вызывать ее в App.js
  3. Убедитесь, что он запускается в режиме "npm run start".
  4. Преобразование в Python с помощью команды «npm run build:all»
  5. Вызовите 'pythonusing.py'

В приложении к этому отчету вы найдете файлы, необходимые для воспроизведения проблемы с библиотекой реактивных листовок. Включены следующие файлы: ['usage.py', 'webpack.config.js', 'App.js', 'index.js', 'DashLeaflet.js', 'index.js', 'package.json']. Убедитесь, что вы установили как react-leaflet, так и leaflet, используя npm. Кроме того, загрузчик файлов необходим для чтения внешнего листа css для листовки.

Текст был успешно обновлен, но возникли следующие ошибки:

chschoenenberger прокомментировал 13 марта 2019 г. •

Привет, Алекс
Спасибо за быстрый ответ. Поэтому я попробовал ваши подходы и вот что нашел.

Это то, что я попробовал первым. Однако при этом я получаю сообщение «Uncaught TypeError: Object(.) is not a function». Трассировка стека указывает на некоторую ошибку в __webpack_require__ . Вот почему я поместил его во внешние. (Возможно) в результате этого выдается вторая ошибка: Ошибка: dash_leaflet не найден.

chschoenenberger прокомментировал 13 марта 2019 г.

Обновление:
я добавил 'react-leaflet.min.js' и 'react-leaflet.js' в папку 'dash_leaflet' и добавил < 'relative_package_path': 'react-leaflet.min.js' , 'пространство имен': package_name >, < 'relative_package_path': 'react-leaflet.js', 'namespace': package_name >, to _js_dist.Я по-прежнему получаю сообщение об ошибке "Ошибка загрузки зависимостей", а в консоли отображаются две ошибки:

  • Uncaught TypeError: l.createContext не является функцией
  • Uncaught TypeError: React.createContext не является функцией

Не уверен, что это проблема из библиотеки react-leaflet или dash.

alexcjohnson прокомментировал 14 марта 2019 г.

@chschoenenberger Я пытался использовать файлы в вашем zip-архиве, но не смог даже заставить npm run начать работать. Я попытаюсь еще раз взглянуть позже, но я бы посоветовал отследить проблему с помощью первого подхода, который, вероятно, будет самым простым и лучшим в долгосрочной перспективе.

Если вы придерживаетесь второго подхода, не делайте отдельные записи для пакетов dev и minified. Используйте относительный_пакет_путь и dev_package_path в одной и той же записи. Я не знаю, что вызвало вашу последнюю ошибку, но именно поэтому у вас есть две совпадающие ошибки (с React во второй уменьшен до l в первой)

chschoenenberger прокомментировал 14 марта 2019 г.

@alexcjohnson Я создал репозиторий, чтобы вы могли правильно воспроизвести его. Это репо настроено, как вы предложили сначала, с пакетом, не указанным как внешний. Вы можете найти это здесь. Я тоже посмотрю еще раз и дам вам знать, если что-нибудь найду.

chschoenenberger прокомментировал 18 марта 2019 г. •

@alexcjohnson Итак, у нас получилось работать со вторым подходом. Нам пришлось сделать некоторые дополнительные вещи, которые, вероятно, были связаны с библиотекой react-leaflet.

  1. Настройте файлы, как указано в вашем комментарии (глобальная запись реагирующего листка в реагирующем компоненте, справочная библиотека как внешняя в конфигурации веб-пакета, скорректированные _js_dist и _css_dist)
  2. Скопируйте весь код из leaflet.js и вставьте его в начало файла react-leaflet.js.
  3. Добавьте только что созданный файл react-leaflet.js в папку, содержащую файл Python компонента.

С этими шагами компонент работает в среде Python. Однако он не будет работать в npm, так как не может найти глобальную запись react-leaflet. Я внес изменения в репозиторий с прошлого раза (здесь). Часть проблемы, вероятно, связана с библиотекой листовок реагирования. Однако я думаю, что есть некоторая проблема с включением внешних библиотек при работе с шаблоном, который вы, возможно, захотите изучить.

Я оставлю это на ваше усмотрение, если вы хотите закрыть вопрос или оставить его пока открытым. Спасибо за помощь.

Прокомментировал Michael-fore 31 августа 2020 г.

Есть ли отдельные шаги для реагирующих пакетов, использующих jquery? или это должно работать с полки?

Вы не можете выполнить это действие в данный момент.

Вы вошли в другую вкладку или окно. Перезагрузите, чтобы обновить сеанс. Вы вышли на другой вкладке или в другом окне. Перезагрузите, чтобы обновить сеанс.

Читайте также: