我有一个带有 angular9 的 Asp mvc 5 站点。
我的 Angular 9 内置在 /Scripts/angularDist 目录中。
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"App": {
"root": "",
"sourceRoot": "src",
"projectType": "application",
"prefix": "app",
"schematics": {},
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "Scripts/angularDist/",
"index": "src/index.html",
"main": "src/main.ts",
我在我的默认 mvc 控制器操作(主页/索引)中返回 angular index.html 文件(src/index.html):
public ActionResult Index()
{
var htmlPath = Server.MapPath("~/Scripts/angularDist/index.html");
return new FilePathResult(htmlPath, "text/html");
}
ngsw-config.json 配置为使用 index.html:
{
"$schema": "./node_modules/@angular/service-worker/config/schema.json",
"index": "/index.html",
"assetGroups": [
{
"name": "app",
"installMode": "prefetch",
"resources": {
"files": [
"/favicon.ico",
"/index.html",
"/manifest.json",
"/*.css",
"/*.js"
],
最后我通过 app.module 中的 ServiceWorker 模块注册了 service worker:
ServiceWorkerModule.register('/Scripts/angularDist/ngsw-worker.js',
{ scope: '/Scripts/angularDist/', registrationStrategy: 'registerImmediately' }),
因此,由于 angular 和 pwa 位于子目录中,因此我设法获取要在服务工作者中注册的相对路径的唯一方法是使用:
ng build --prod --base-href=/Scripts/angularDist/
所以 ngsw.json 中的 url 现在看起来像这样:
"urls": [
"/Scripts/angularDist/1-es2015.a1dd7840a1fc1224a25c.js",
"/Scripts/angularDist/1-es5.a1dd7840a1fc1224a25c.js",
所以应用程序可以正常工作并且服务人员已注册。但是问题是我的网址现在是:
http://localhost:5114/Scripts/angularDist/login
所以我的问题是,如何在不更改我的 url 的情况下将服务工作者中生成的 .js 和 .css 文件的相对路径设置为以我的子目录 (/Scripts/angularDist) 为前缀。
还有其他设置方法吗?
我遇到的问题:
- 我不想/不需要在 url 中显示 /Scripts/angularDist 路径
- 所有 http 调用现在都无法通过 web api,因为相对路径附加到 api 调用
编辑
我尝试使用 ng build --prod --base-href=./ 然后加载没有 /Scripts/angularDist 的 url 并且服务工作者中的相对路径正常工作,但看起来服务工作者的范围没有覆盖根 url 并且应用程序无法离线工作