如何在 Ionic4/Angular 构建中包含 @ionic/pwa-elements
How to include @ionic/pwa-elements in an Ionic4/Angular build
我是 Ionic4 的新手,但已经使用 Angular 一段时间了,所以目前正在试验 Ionic4/Angular 应用程序。
我一直在寻求集成电容器以从 PWA 访问本机功能,并且我已经对相机插件进行了一些测试,但是我必须在我的脚本中包含对外部 pwa-elements 脚本的引用index.html 根据:https://capacitor.ionicframework.com/docs/getting-started/pwa-elements/
如果我希望该应用程序能够离线工作,这是不好的,所以我试图将其导入并捆绑在 Ionic/Angular 构建中,但文档中不清楚如何在 Angular 上下文中执行此操作。
我添加了“导入‘@ionic/pwa-elements’;”到我的 app.module.ts,但这似乎不起作用(我刚得到 this issue)。我尝试在我的 angular.json 文件的脚本部分手动引用 ionicpwaelements.js 脚本,但是 ionicpwaelements.js 引用了节点模块中 'ionicpwaelements' 子目录中的一堆其他 js 文件,它无法找到(并且将它们全部引用起来太费力了)。
如何将 ionic/pwa-elements 导入 Ionic4/Angular 应用程序?
我想你已经在 Github thread 上看到了我的回答,但是 post 在这里是为了其他不想浏览该主题的人:
由于 @ionic/pwa-elements
是 Stencil 网络组件,它可以通过 Angular integration with Stencil:
中概述的过程包含在 Ionic 4 + Angular 项目中
src/main.ts
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
import { defineCustomElements } from '@ionic/pwa-elements/dist/loader';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.log(err));
defineCustomElements(window);
CameraModal 组件依赖于一些用于图标和相邻脚本的 svg 文件。
angular.json 可以修改为在构建时包含这些资产:
angular.json
/* ... */
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
/* ... */
"assets": [
{
"glob": "**/*.svg",
"input": "node_modules/@ionic/pwa-elements/dist/ionicpwaelements/icons",
"output": "icons"
},
/*** Including the scripts below breaks Ionic Modals, but without them, you'll get a 404 error ***/
{
"glob": "**/*.js",
"input": "node_modules/@ionic/pwa-elements/dist/ionicpwaelements",
"output": "ionicpwaelements"
},
/* ... */
Ionic Modals 被破坏也发生在 index.html 中的外部脚本引用中,因此这似乎是一个尚未解决的 separate issue。
感谢您提出这个问题,我挣扎了将近 2 个小时。
在我的例子中,问题是导入命令,需要像这样:
import { defineCustomElements } from '@ionic/pwa-elements/loader';
直到它的加载器路径。
我是 Ionic4 的新手,但已经使用 Angular 一段时间了,所以目前正在试验 Ionic4/Angular 应用程序。
我一直在寻求集成电容器以从 PWA 访问本机功能,并且我已经对相机插件进行了一些测试,但是我必须在我的脚本中包含对外部 pwa-elements 脚本的引用index.html 根据:https://capacitor.ionicframework.com/docs/getting-started/pwa-elements/
如果我希望该应用程序能够离线工作,这是不好的,所以我试图将其导入并捆绑在 Ionic/Angular 构建中,但文档中不清楚如何在 Angular 上下文中执行此操作。
我添加了“导入‘@ionic/pwa-elements’;”到我的 app.module.ts,但这似乎不起作用(我刚得到 this issue)。我尝试在我的 angular.json 文件的脚本部分手动引用 ionicpwaelements.js 脚本,但是 ionicpwaelements.js 引用了节点模块中 'ionicpwaelements' 子目录中的一堆其他 js 文件,它无法找到(并且将它们全部引用起来太费力了)。
如何将 ionic/pwa-elements 导入 Ionic4/Angular 应用程序?
我想你已经在 Github thread 上看到了我的回答,但是 post 在这里是为了其他不想浏览该主题的人:
由于 @ionic/pwa-elements
是 Stencil 网络组件,它可以通过 Angular integration with Stencil:
src/main.ts
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
import { defineCustomElements } from '@ionic/pwa-elements/dist/loader';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.log(err));
defineCustomElements(window);
CameraModal 组件依赖于一些用于图标和相邻脚本的 svg 文件。 angular.json 可以修改为在构建时包含这些资产:
angular.json
/* ... */
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
/* ... */
"assets": [
{
"glob": "**/*.svg",
"input": "node_modules/@ionic/pwa-elements/dist/ionicpwaelements/icons",
"output": "icons"
},
/*** Including the scripts below breaks Ionic Modals, but without them, you'll get a 404 error ***/
{
"glob": "**/*.js",
"input": "node_modules/@ionic/pwa-elements/dist/ionicpwaelements",
"output": "ionicpwaelements"
},
/* ... */
Ionic Modals 被破坏也发生在 index.html 中的外部脚本引用中,因此这似乎是一个尚未解决的 separate issue。
感谢您提出这个问题,我挣扎了将近 2 个小时。
在我的例子中,问题是导入命令,需要像这样:
import { defineCustomElements } from '@ionic/pwa-elements/loader';
直到它的加载器路径。