Skip to content

Commit dd8a215

Browse files
committed
fix universal deploy
1 parent f603cf6 commit dd8a215

4 files changed

Lines changed: 61 additions & 13 deletions

File tree

_sls_lambda_universal/copy-dist.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/usr/bin/env node
2+
// Copies ../dist into ./dist, replacing any previous copy.
3+
// Using a Node.js script instead of copyfiles for reliable cross-platform behavior with .. paths.
4+
5+
const fs = require('fs');
6+
const path = require('path');
7+
8+
const srcDir = path.resolve(__dirname, '../dist');
9+
const destDir = path.resolve(__dirname, 'dist');
10+
11+
if (!fs.existsSync(srcDir)) {
12+
console.error(`Source directory not found: ${srcDir}`);
13+
console.error('Run the Angular production build first.');
14+
process.exit(1);
15+
}
16+
17+
if (fs.existsSync(destDir)) {
18+
fs.rmSync(destDir, { recursive: true });
19+
}
20+
21+
function copyRecursive(src, dest) {
22+
const stat = fs.statSync(src);
23+
if (stat.isDirectory()) {
24+
fs.mkdirSync(dest, { recursive: true });
25+
for (const item of fs.readdirSync(src)) {
26+
copyRecursive(path.join(src, item), path.join(dest, item));
27+
}
28+
} else {
29+
fs.copyFileSync(src, dest);
30+
}
31+
}
32+
33+
copyRecursive(srcDir, destDir);
34+
console.log(`Copied ${srcDir}${destDir}`);

_sls_lambda_universal/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"main": "index.js",
66
"scripts": {
77
"test": "echo \"Error: no test specified\" && exit 1",
8-
"copy": "npx copyfiles ../dist/**/*.* dist",
8+
"copy": "node copy-dist.js",
99
"deploy-develop": "npm run copy && sls deploy --verbose",
1010
"deploy-master": "npm run copy && sls deploy --verbose --stage prod"
1111
},
Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1-
const serverlessExpress = require('@vendia/serverless-express')
2-
const server = require('./dist/web/server/main');
3-
const app = server.app();
1+
const serverlessExpress = require('@vendia/serverless-express');
42

5-
module.exports.handler = serverlessExpress({
6-
app,
7-
logSettings: {
8-
level: 'debug'
9-
},
10-
binarySettings: {
11-
contentTypes: ['*/*']
3+
let cachedHandler;
4+
5+
module.exports.handler = async (event, context) => {
6+
if (!cachedHandler) {
7+
const { reqHandler } = await import('./dist/web/server/server.mjs');
8+
cachedHandler = serverlessExpress({
9+
app: reqHandler,
10+
binarySettings: {
11+
contentTypes: ['*/*']
12+
}
13+
});
1214
}
13-
});
15+
16+
return cachedHandler(event, context);
17+
};

src/server.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,23 @@ const angularApp = new AngularNodeAppEngine();
2525
*/
2626

2727
/**
28-
* Serve static files from /browser
28+
* Serve static files from /browser.
29+
* Hashed files (JS/CSS bundles) get a long cache; SW-critical files must never be cached
30+
* so the service worker can detect new deployments.
2931
*/
32+
const NO_CACHE_FILES =
33+
/\/(ngsw\.json|ngsw-worker\.js|pydt-service-worker\.js|safety-worker\.js|worker-basic\.min\.js|index\.html)$/;
34+
3035
app.use(
3136
express.static(browserDistFolder, {
3237
maxAge: "1y",
3338
index: false,
3439
redirect: false,
40+
setHeaders: (res, filePath) => {
41+
if (NO_CACHE_FILES.test(filePath)) {
42+
res.setHeader("Cache-Control", "no-cache");
43+
}
44+
},
3545
}),
3646
);
3747

0 commit comments

Comments
 (0)