Интеграция Angular 7 с проблемой StencilJS - Не удается найти модуль 'test-components/dist/loader'
Я пытаюсь интегрировать свой проект Angular 7 с StencilJS, чтобы я мог использовать пользовательские веб-компоненты / элементы, и я следую руководству по интеграции на веб-сайте StencilJS здесь.
Я на инструкции, которые говорят:
Коллекция компонентов, созданная с помощью Stencil, включает в себя основную функцию, которая используется для загрузки компонентов в коллекцию. Эта функция называется
defineCustomElements()
и он должен быть вызван один раз во время начальной загрузки вашего приложения. Одним из удобных мест для этого являетсяmain.ts
в качестве таких:
Я пытался импортировать defineCustomElements()
в моем main.ts
файл следующим образом:
Но я получаю следующую ошибку:
[ts] Cannot find module 'test-components/dist/loader'
Нужно ли устанавливать этот модуль, используя npm install
?
Если так, то почему руководство не включает эту инструкцию?
1 ответ
Вот как я это сделал:
$ npm я в соцсетях
$ В модуле приложения / функциональном модуле в вашем приложении добавьте CUSTOM_ELEMENTS_SCHEMA:
@NgModule({
imports: [
.........
],
schemas:[CUSTOM_ELEMENTS_SCHEMA]
})
Тогда наконец в main.ts
import { defineCustomElements } from 'web-social-share/dist/loader';
.....
defineCustomElements(window);
Я столкнулся с той же ошибкой.
Для меня я опубликовал свой трафаретный веб-компонент в npm, а затем установил его в свой проект.
У меня был тот же "Не удается найти модуль", когда я забыл запустить npm run build
до npm publish
,
Stencil еще не поддерживает импорт отдельных компонентов модулем ES2015, что означает, что мы должны сконфигурировать CLI для копирования всех статических файлов JavaScript для использования во время выполнения.
В.angular-cli.json вам нужно добавить объект конфигурации в настройки ресурсов
"assets": [
"assets",
"favicon.ico",
{ "glob": "**/*", "input": "../node_modules/stencil-demos/dist", "output": "./assets/stencil-demos" }
]
Проверьте эту статью для того, чтобы настроить: https://coryrylan.com/blog/using-stencil-web-components-in-angular-and-the-angular-cli
@Kingamere Да, вам нужно сначала установить веб-компонент в вашем проекте. Шаги для интеграции трафаретной веб-компоненты должны быть следующими:
- Установить компонент в угловом проекте (
npm install <module-name>
) - Включить пользовательскую схему элемента в app.module.ts (
schemas: [CUSTOM_ELEMENTS_SCHEMA]
) - компонент импорта в app.component.ts (
import * as <name> from 'test-components/dist/loader';)
- Зарегистрировать компонент в реестре (
<name>.defineCustomElements(window);
) - Используйте селектор вашего трафаретного компонента, где вы хотите в своем проекте