ts-node에서 TypeScript+node 빠른 실행

node에서 TypeScript를 시원하게 실행하고 싶을 때 babel이나 웹팩으로transpile를 실행하는 것은 불편하다.그리고 금형을 고려하지 않습니다.
이 경우 사용ts-node을 통해 파일을 생성한 후 먹지 못하게 해도 바로 실행할 수 있기 때문에 간단하다.유형

사용 방법


종속성 추가:
npm install --save typescript ts-node
tsconfig.json 생성:
> ./node_modules/.bin/tsc --init

message TS6071: Successfully created a tsconfig.json file.
적절한 코드를 적어 보십시오.
src/main.ts
const main = () => {
    console.log('It works!');
};

main();
이동 시도:
> ./node_modules/.bin/ts-node src/main.ts

It works!
느낌이 좋아, 곧 실행할 거야.
물론 형식이 틀리면 오류가 발생하고 원본 파일에 대한 정보를 표시합니다.
src/main.ts
const main = (str: string) => {
    console.log('It works!');
};

main(1111);
TSError: ⨯ Unable to compile TypeScript:
src/main.ts:5:6 - error TS2345: Argument of type '1111' is not assignable to parameter of type 'string'.

5 main(1111);
       ~~~~

별칭

import some from '../../a/b.ts' 같은 것은 복잡하기 때문에 경로 별명을 자주 등록합니다.
tsconfig.json
{
  "compilerOptions": {
    // ...
    "baseUrl": "./",
    "paths": {
      "#/*": ["src/*"]
    },
    // ...
  }
}
이 예에서
src/x.ts
import some from '#/a/b.ts';
// <=> import some from './a/b.ts';
src/i/j/k.ts
import some from '#/a/b.ts';
// <=> import some from '../../a/b.ts';
하계.진전이 있군요.
현재 스크립트의 차원이 어떻든 import 원본 디렉터리에서 온 경로로 설명할 수 있기 때문에 명확하고 이해하기 쉽다.VScode도 별명이 유효하고 느낌이 좋아요.
Vue도 @/components/a.ts 에서 참조할 수 있는 별명으로 비슷한 느낌을 줍니다.(그것은 웹 팩의 별명인 것 같다.)
예:
src/mod-a/build.ts
export default (): string => 'mod-a';
src/mod-b/repeat.ts
import build from '#/mod-a/build';

export default (number: number): string => {
    let queue = [];
    const value = build();
    for (let i = 0; i < number; ++i) {
        queue.push(value);
    }

    return queue.join(' | ');
}
src/main.ts
import repeat from "#/mod-b/repeat";

const main = () => {
    console.log(repeat(5));
};

main();
그럼 별명으로 읽을 수 있겠네요
나는 실행하고 싶다.
> ./node_modules/.bin/ts-node src/main.ts

Error: Cannot find module '#/mod-b/repeat'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
    at Function.Module._load (internal/modules/cjs/loader.js:507:25)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/Users/user/Sandbox/my-ts-project/src/main.ts:1:1)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Module.m._compile (/Users/user/Sandbox/my-ts-project/node_modules/ts-node/src/index.ts:473:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Object.require.extensions.(anonymous function) [as .ts] (/Users/user/Sandbox/my-ts-project/node_modules/ts-node/src/index.ts:476:12)
    at Module.load (internal/modules/cjs/loader.js:599:32)
그러나 이것은 import 해결할 수 없는 잘못이다.왜요?
이 문제
추가tsconfig-paths, require
npm install --save tsconfig-paths
> ./node_modules/.bin/ts-node --files -r tsconfig-paths/register src/main.ts

mod-a | mod-a | mod-a | mod-a | mod-a
tsconfig-paths, 현재 require에 정의된 별명 해결tsconfig.json을 사용할 수 있습니다.
하지만 넣을 때마다 번거롭기 때문에 importpackage.jsonscripts에 한 번에 추가하면 된다.
package.json
{
  // ...
  "scripts": {
    "start": "ts-node --files -r tsconfig-paths/register",
    "test": "echo \"Error: no test specified\" && exit 1"
  }
}
npm start src/main.ts

유형 정의


유형 정의npm start가 있는 경우 *.d.ts에도 추가합니다.
tsconfig.json
{
  "compilerOptions": {
    // ...
    "typeRoots": ["./src/types"],
    // ...
}

테스트


다른 항목에서 테스트를 설명했습니다.마찬가지로 바베tsconfig.json를 사용하지 않고 금형을 활용하면서 간단하게 테스트할 수 있다.
👉 TypeScript를 Jest(ts-jest)로 테스트합니다.
이렇게 하면 TypeScript로 수중에 있는 적당한 코드를 이동하고 싶을 때부터 일괄 처리 등으로 삐걱삐걱 이동하고 싶을 때 간단하게 대응할 수 있다.

좋은 웹페이지 즐겨찾기