【问题标题】:Angular Universal deployed to AWS Lambda using serverless not picking up js files in dist/browserAngular Universal 使用无服务器部署到 AWS Lambda,而不是在 dist/browser 中获取 js 文件
【发布时间】:2021-05-18 17:12:09
【问题描述】:

我正在关注this 部署到 lambda 函数的教程。当我使用无服务器离线运行它时,它会为每个编译的 js 显示 404 错误,但在部署时它会显示 403 错误。我检查了我的 s3 存储桶,压缩文件夹包含 dist/ 所需的所有内容 live link 我试图通过在构建时包含--base-href=/dev 来更改基本href。当我作为 SSR 应用程序构建和运行时,一切都正常输出。 这是我的 serverless.yml:

service: anime-trending
plugins:
  - serverless-apigw-binary
  - serverless-offline
provider:
  name: aws
  runtime: nodejs12.x
  memorySize: 192
  timeout: 10
package:
  exclude:
    - ./**
  include:
    - "node_modules/aws-serverless-express/**"
    - "node_modules/@vendia/**"
    - "node_modules/binary-case/**"
    - "node_modules/type-is/**"
    - "node_modules/media-typer/**"
    - "node_modules/mime-types/**"
    - "node_modules/mime-db/**"
    - "dist/**"
    - "lambda.js"
custom:
  apigwBinary:
    types:
      - "*/*"
functions:
  api:
    handler: lambda.handler
    events:
      - http: GET /

我的 tsconfig.serverless.json:

{
  "extends": "./tsconfig.app.json",
  "compilerOptions": {
    "outDir": "./out-tsc/serverless",
    "target": "es2016",
    "types": [
      "node"
    ]
  },
  "files": [
    "src/main.server.ts",
    "serverless.ts"
  ],
  "angularCompilerOptions": {
    "entryModule": "./src/app/app.server.module#AppServerModule"
  }
}

我的 serverless.ts:

import 'zone.js/dist/zone-node';
import { ngExpressEngine } from '@nguniversal/express-engine';
import * as express from 'express';
import { join } from 'path';
import { AppServerModule } from './src/main.server';
import { APP_BASE_HREF } from '@angular/common';
import { existsSync } from 'fs';
export const app = express();
const distFolder = join(process.cwd(), 'dist/anime-trending/browser');
const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index';
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
app.engine('html', ngExpressEngine({
  bootstrap: AppServerModule,
}));
app.set('view engine', 'html');
app.set('views', distFolder);
// Example Express Rest API endpoints
// app.get('/api/**', (req, res) => { });
// Serve static files from /browser
app.get('*.*', express.static(distFolder, {
  maxAge: '1y'
}));
// All regular routes use the Universal engine
app.get('*', (req, res) => {
  res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] });
});
export * from './src/main.server';

我的地区: [![在此处输入图片描述][1]] [1]:https://i.stack.imgur.com/S8NcS.png

我的 main.server/ts:

import { enableProdMode } from '@angular/core';

import { environment } from './environments/environment';

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

export { AppServerModule } from './app/app.server.module';
export { renderModule, renderModuleFactory } from '@angular/platform-server';

【问题讨论】:

    标签: angular amazon-web-services express aws-lambda serverless


    【解决方案1】:

    您的基本 href arg 有一个非常小的错字。而不是--base-href=/dev, 尝试--base-href=dev/,在斜线之前而不是之后使用前缀。我为我的部署做了这个并且编译的文件正确加载,但是角度应用程序中的路由被破坏了。

    【讨论】:

      猜你喜欢
      • 2018-10-11
      • 2020-08-29
      • 2017-03-10
      • 1970-01-01
      • 2020-08-14
      • 2020-10-08
      • 2020-02-17
      • 1970-01-01
      • 2019-04-17
      相关资源
      最近更新 更多