본문 바로가기
서버 개발/node

typescript, node.js ,express 서버사이드 환경설정[2020.12.06]

by JIMYEONG 2020. 12. 6.
반응형

1. express, @types/express 모듈, typescript, typescript config 생성

create express, @types/express modules, typescript and typescript config

$ npm init -y && npm express @types/express typescript && tsc --init;

2. 개발폴더 src, 배포폴더 dist 생성

create src folder for resources and dist folder for diployed files

$ mkdir dist && mkdir src

3. src/index.ts, src/Main.ts 생성 후, 내용 채워넣는다.

create src/index.ts and src/Main.ts and then fill them up

$ vi src/index.ts

// src/index.ts

import {Main} from "./Main";

const main = new Main();
main.run();


$ vi src/Main.ts

// src/Main.ts

import * as express from "express";

export class Main{
    private express:any;
    constructor(){

        // express:e e는 호출할 수 있는 유형의 타입이 아니다.
        // "esModuleInterop": true 일때 import 관련해서 나오는 에러임.
        // 참고: https://www.typescriptlang.org/tsconfig#esModuleInterop

        this.express = express();
        this.express.listen(3000,()=>{
            console.log("port 3000 start running")
        });
    }

    run():void{
        this.express.get("/", (req: express.Request, res:express.Response)=>{
            res.send("hello world");
        })
    }
}

4. package.json 에서 scripts 부분, 작성해준다

in your package.json, fill up the "start" property properly

// tsc 로 tsc 파일들 컴파일 한 이후에, js파일로 컴파일되어서 dist 파일에 생성된 index.js를 node 명령어로 실행
"scripts": {
    "start": tsc && node dist
}

5. tsconfig.json 설정

set your tsconfig.json

{
  "compilerOptions": {
    "target": "es6",                          
    "module": "commonjs",                     
    "strict": true,
    "outDir": "dist",
    "esModuleInterop": false,
    "forceConsistentCasingInFileNames": true 
  },

  "include": [
    "src/**/*"
  ]
}


다시 짚고 넘어가고 싶은 부분

looking back

TS2349: This expression is not callable. Type 'typeof e' has no call signatures. Main.ts(1, 1): Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead.

이런 에러를 만났는데, common.js 모듈시스템에서, import * as A from "a" 와 import A from "a" 이게 컴파일될 때 약간의 의미 차이를 가지나 보다. const A = require("a").default , const A = require("a") 이 차이에 대해서 막 영어로 설명하는 데,
commonJS 모듈 시스템에 대한 기본 이해가 없는 나로서는, 한번 읽고 이해하기가 어려워서 일단 넘겼다.

I met this error, I think in common.js modules system, it has a diffrent meaning between import * as A from "a" and import A from "a", but which was a bit hard for me to get it, because it was almost my first time to deal with this modulue system. so I just moved on, thinking about taking a look again tomorrow..

기술 사용 이유

reason to use ts,express,node.js

  • 객체지향에 대해서 더 공부해 보고 싶었다. 사둔 책이 여러권 있다. design pattern과 uml에 대해서 좀 더 알고 싶다. 내가 공부해 본 언어중에(js, java, c, php, typescript) 그럼 java와 typescript, modern php가 남게 된다.
  • I just wanted to study on object oriented programming, there are books I bought for it, actually the books are about uml and design patterns, I want to read them, since I already have had knowledges for js, java, c, php, typescript, I had to choose them there are only two options left.
  • java로 서버사이드를 했으면 가장 좋았을 텐데, 나는 java로는 안드로이드와 문법만 공부를 해봤다. 그리고 학교 공부를 하면서, java로 환경설정하는 게 너무 힘들었다. 어디서 꼬였었는 지, 그 떄 너무너무 헤메서, 가급적 빠르고 간단하게 시작할 수 있는 게 좋았다. 다른 공부해야 할 것도 많이 있기 떄문에, 자바 환경설정에 목매고 싶지 않았다. 그냥 객체지향이고 빠르고 간단하면, 객체지향 공부목적으로 접근하는 나에게는, 더 이상 바랄게 없을 것 같앗다.

  • if I had been able to use java for serverside applicationn, it would have been best for me, but I only have had a experience on java itself(grammer), and android. and acutually, I have not good memory for setting up initial enviroment of backend application with java. so I just wanted to get on with setting it up as soon as possible. I don't want to be tied up to building up java env. that's why I thought nothing would be better, as long as the thing was the way of OOC, and fast and easy to start a project

  • 그런면에서 node는 npm module들을 많이 쓸 수 있어서, 선택했다.

  • that's why I chose them..

참고: lts0606.tistory.com/330

반응형