Skip to content

Commit e63f684

Browse files
committed
basic serverless configuration for ssr
1 parent 5f4a98d commit e63f684

15 files changed

+7548
-0
lines changed

velog-ssr/.gitignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# package directories
2+
node_modules
3+
jspm_packages
4+
5+
# Serverless directories
6+
.serverless
7+
8+
# Webpack directories
9+
.webpack
10+
dist

velog-ssr/.prettierrc.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// .prettierrc.js
2+
module.exports = {
3+
printWidth: 100,
4+
parser: "typescript",
5+
singleQuote: true,
6+
useTabs: false, // Indent lines with tabs instead of spaces.
7+
printWidth: 80, // Specify the length of line that the printer will wrap on.
8+
tabWidth: 2, // Specify the number of spaces per indentation-level.
9+
trailingComma: "es5"
10+
};

velog-ssr/package.json

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"name": "velog-ssr",
3+
"version": "1.0.0",
4+
"description": "Serverless webpack example using Typescript",
5+
"main": "handler.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1",
8+
"dev": "NODE_PATH=dist nodemon dist/local.js --watch ./dist",
9+
"deploy": "sls deploy"
10+
},
11+
"dependencies": {
12+
"koa": "^2.5.2",
13+
"koa-bodyparser": "^4.2.1",
14+
"koa-router": "^7.4.0",
15+
"serverless-http": "^1.6.0",
16+
"source-map-support": "^0.5.0"
17+
},
18+
"devDependencies": {
19+
"@types/aws-lambda": "8.10.1",
20+
"@types/koa": "^2.0.46",
21+
"@types/koa-router": "^7.0.31",
22+
"@types/node": "^8.0.57",
23+
"nodemon": "^1.18.3",
24+
"serverless-offline": "^3.25.6",
25+
"serverless-webpack": "^5.1.1",
26+
"ts-loader": "^4.2.0",
27+
"tslint": "^5.11.0",
28+
"tslint-config-airbnb": "^5.9.2",
29+
"tslint-config-prettier": "^1.14.0",
30+
"typescript": "^2.8.1",
31+
"webpack": "^4.5.0"
32+
},
33+
"author": "The serverless webpack authors (https://github.com/elastic-coders/serverless-webpack)",
34+
"license": "MIT"
35+
}

velog-ssr/serverless.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
service:
2+
name: velog-ssr
3+
4+
# Add the serverless-webpack plugin
5+
plugins:
6+
- serverless-webpack
7+
- serverless-offline
8+
9+
provider:
10+
name: aws
11+
runtime: nodejs8.10
12+
region: ap-northeast-2
13+
14+
functions:
15+
app:
16+
handler: src/serverless.handler
17+
events:
18+
- http:
19+
method: ANY
20+
path: /
21+
- http:
22+
method: ANY
23+
path: /{any+}

velog-ssr/source-map-install.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
require('source-map-support').install();

velog-ssr/src/handler.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { APIGatewayEvent, Callback, Context, Handler } from 'aws-lambda';
2+
3+
export const hello: Handler = (event: APIGatewayEvent, context: Context, cb: Callback) => {
4+
const response = {
5+
statusCode: 200,
6+
body: JSON.stringify({
7+
message: 'Go Serverless Webpack (Typescript) v1.0! Your function executed successfully!',
8+
input: event,
9+
}),
10+
};
11+
12+
cb(null, response);
13+
}

velog-ssr/src/local.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import Server from './server';
2+
3+
const server = new Server();
4+
server.listen(5000);

velog-ssr/src/router/index.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import * as Router from 'koa-router';
2+
import { Context } from 'koa';
3+
4+
const router = new Router();
5+
6+
router.get('/', (ctx: Context) => {
7+
ctx.body = 'I am alive!';
8+
});
9+
10+
export default router;

velog-ssr/src/server.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import * as Koa from 'koa';
2+
import router from './router';
3+
4+
class Server {
5+
app: Koa;
6+
constructor() {
7+
this.app = new Koa();
8+
this.setup();
9+
}
10+
setup() {
11+
this.app.use(router.routes()).use(router.allowedMethods());
12+
}
13+
listen(port: number) {
14+
this.app.listen(port);
15+
console.log(`Listening to port ${port}`);
16+
}
17+
}
18+
19+
export default Server;

velog-ssr/src/serverless.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { APIGatewayEvent, Context, Callback } from 'aws-lambda';
2+
import * as serverlessHttp from 'serverless-http';
3+
import Server from './server';
4+
5+
const server = new Server();
6+
7+
export const handler = (
8+
event: APIGatewayEvent,
9+
context: Context,
10+
cb: Callback
11+
) => {
12+
// something to do before serverlessHttp
13+
return serverlessHttp(server.app)(event, context, cb);
14+
};

0 commit comments

Comments
 (0)