我在我的應用程式中啟用了 angular Universal,并且能夠對一些靜態路由(如主頁、關于等)進行預渲染。
現在我還需要預渲染一些額外的路由,但是在網站已經部署之后,我需要能夠在需要時執行此操作。一個實時用例是,如果 Airbnb 想要在人們發布新廣告時預先呈現它們。
我想有一個我可以觸發的 Lambda 函式(當為此示例添加廣告時),它會運行預渲染,然后將index.html檔案保存在 s3 存盤桶上(我已經在上面有 CloudFront)。
但是如何在 Lambda 上實際生成檔案呢?我目前在構建時使用:
ng run my-app:prerender
注意:我不想從 lambda 提供檔案,我想生成它們(預渲染)并保存在 s3 上
uj5u.com熱心網友回復:
我設法通過閱讀通用預渲染包的源代碼使其作業,這是有效的:
const { resolve, join } = require('path');
const { setup, render } = require('@nguniversal/builders/src/prerender/worker.js');
const [ route ] = process.argv.slice(2);
const ROOT = resolve(__dirname);
const outputPath = join(ROOT, 'dist', 'browser');
const serverBundlePath = join(ROOT, 'dist', 'server', 'main.js');
setup({
indexFile: 'index.html',
deployUrl: '',
inlineCriticalCss: true,
minifyCss: true
});
render(outputPath, serverBundlePath, route).then(() => {
console.log('Build', route, 'done');
process.exit(0);
}).catch(err => {
console.error(err);
process.exit(1);
});
運行一次后npm run prerender(如 Angular 教程中所述),我現在可以通過執行以下操作來預渲染任何路線node prerender.js /my-route
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/362882.html
