简体   繁体   English

如何使用 Angular 8 和 single-spa 来更新 publicPath 以加载很棒的字体?

[英]How do I get the publicPath to update using Angular 8 with single-spa to load font awesome?

I'm trying to update webpack_public_path using Angular.我正在尝试使用 Angular 更新webpack_public_path I'm using the single-spa library and I'm having an issue loading font-awesome fonts.我正在使用 single-spa 库,但在加载 font-awesome 字体时遇到了问题。

It's looking for them in the root of our server ('/') but they actually reside in the application folder ('/app1').它在我们服务器的根目录 ('/') 中寻找它们,但它们实际上位于应用程序文件夹 ('/app1') 中。

I've created the a file set-public-path.ts and am importing it inside of main.single-spa.ts.我已经创建了一个文件 set-public-path.ts 并将它导入到 main.single-spa.ts 中。

set-public-path.ts设置公共路径.ts

// @ts-ignore
__webpack_public_path__ = 'https://appURL.net/app1/'

main.single-spa.ts main.single-spa.ts

import './set-public-path.ts'
import { enableProdMode, NgZone } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { ɵAnimationEngine as AnimationEngine } from '@angular/animations/browser'; 
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
import singleSpaAngular from 'single-spa-angular';
import { singleSpaPropsSubject } from './single-spa/single-spa-props';

if (environment.production) {
  enableProdMode();
}

// @ts-ignore
console.log(__webpack_public_path__);

const domElementGetter = () => document.getElementById('application');

const lifecycles = singleSpaAngular({
  bootstrapFunction: singleSpaProps => {
    singleSpaPropsSubject.next(singleSpaProps);
    return platformBrowserDynamic().bootstrapModule(AppModule);
  },
  template: '<app1-root />',
  domElementGetter,
  NgZone,
AnimationEngine,
});


export const bootstrap = lifecycles.bootstrap;
export const mount = lifecycles.mount;
export const unmount = lifecycles.unmount;

When the application runs, it logs the correct URL but the 404 error still says it's looking in the root.当应用程序运行时,它会记录正确的 URL,但 404 错误仍然表示它正在查找根目录。 I'm not sure what I'm doing wrong.我不确定我做错了什么。 I'm using SystemJS to import the applications inside of the index.html file.我正在使用 SystemJS 导入 index.html 文件中的应用程序。

Environment Info:环境信息:

"@angular-builders/custom-webpack": "^8",
"@angular/animations": "~8.2.11",
"@angular/cdk": "~8.2.3",
"@angular/common": "~8.2.11",
"@angular/compiler": "~8.2.11",
"@angular/core": "^8.2.14",
"@angular/forms": "~8.2.11",
"@angular/material": "^8.2.3",
"@angular/platform-browser": "~8.2.11",
"@angular/platform-browser-dynamic": "~8.2.11",
"@angular/router": "~8.2.11",
"@azure/msal-angular": "^0.1.4",
"@microsoft/applicationinsights-web": "^2.0.0",
"@okta/okta-angular": "^1.3.1",
"@types/jest": "^24.0.24",
"hammerjs": "^2.0.8",
"node-sass": "^4.13.1",
"rxjs": "~6.4.0",
"rxjs-compat": "^6.5.3",
"single-spa-angular": "^3.0.1",
"tslib": "^1.10.0",
"zone.js": "~0.9.1"

This worked for me;这对我有用;

set-public-path.js设置公共路径.js

export default function setPublicPath() {
    return Promise.all([getUrl()]).then(values => {
        const [url] =values;
        __webpack_public_path__ = url;
        return true;
    });
}

function getUrl() {
     return window.System.resolve('app8');
}

main.single-spa.ts main.single-spa.ts

import setPublicPath from './set-public-path.js';
setPublicPath();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM