Skip to content

Latest commit

ย 

History

History
100 lines (67 loc) ยท 3.89 KB

File metadata and controls

100 lines (67 loc) ยท 3.89 KB

tsconfig.json์—์„œ module์ด ๋ญ˜๊นŒ

ts project๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค.

(node:27135) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.

esmodule์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€์ ์ธ ์„ค์ •์ด ํ•„์š”ํ–ˆ๋‹ค. ์„œ์นญํ•ด๋ณธ ๊ฒฐ๊ณผ tsconfig.json์—์„œ module์„ commonjs๋กœ ๋ฐ”๊พธ์–ด์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ด์ฐธ์— tsconfig.json์—์„œ module์„ ์„ค์ •ํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฌด์—‡์„ ํ•ด์ฃผ๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•ด๋ณด์•˜๋‹ค.

tsconfig.json๋ž€?

  • tsconfig.json ํŒŒ์ผ์ด ์œ„์น˜ํ•˜๋Š” ๊ณณ์ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • tsconfig.json์— typescript ์ปดํŒŒ์ผ๋Ÿฌ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

compilerOption

tsconfig.json์—์„œ compilerOption์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. compilerOption์€ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์—์„œ ๋งŽ์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๊ณ , ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋‹ค๋ฃฌ๋‹ค.

  • tsconfig.json

    ```json

    {

    "compilerOptions": {

    "module": "commonjs",

    "declaration": true, // d.ts ํŒŒ์ผ ์ƒ์„ฑ ์—ฌ๋ถ€

    ...

    }

    }

### Module

- ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์„ค์ •ํ•œ๋‹ค. 
- "module"์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ moduleResolution์— ์˜ํ–ฅ์„ ์ค€๋‹ค.

Module์€ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๊ฐ€ esmodule ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ , ์ปดํŒŒ์ผ๋œ ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ค ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ผ์ง€๋ฅผ ์„ค์ •ํ•œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ts ํŒŒ์ผ์€ ์„ค์ •๋œ module system์„ ๋ชฉํ‘œ๋กœ ํ•˜์—ฌ ์ปดํŒŒ์ผ๋œ๋‹ค. 
```typescript=
// @showEmit
// @module: commonjs
// @noErrors
import { valueOfPi } from "./constants";

export const twoPi = valueOfPi * 2;
  • CommonJS
    • ๋ชจ๋“ˆ ์ •์˜๋Š” exports ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜๊ณ , ๋ชจ๋“ˆ ์‚ฌ์šฉ์€ require ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค.

    • node.js ์„œ๋ฒ„์—์„œ๋„ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด๋‹ค.

    • CJS์˜ ๋™์ž‘ ๋ฐฉ์‹

      require()๊ฐ€ ๋™๊ธฐ์ ์ด๋‹ค; ํ”„๋ผ๋ฏธ์Šค๋ฅผ ๋ฆฌํ„ดํ•˜๊ฑฐ๋‚˜, ์ฝœ๋ฐฑ์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค. require()๊ฐ€ ๋””์Šคํฌ์—์„œ๋ถ€ํ„ฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฝ์–ด์™€์„œ ์ฆ‰์‹œ ์‹คํ–‰์‹œํ‚จ๋‹ค. ๊ทธ ์Šคํฌ๋ฆฝํŠธ๋Š” I/O๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ํ›„์— module.exports์—์„œ ์„ธํŒ…ํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    • .js

        "use strict";
        Object.defineProperty(exports, "__esModule", { value: true });
        exports.twoPi = void 0;
        // @showEmit
        // @module: commonjs
        // @noErrors
        const constants_1 = require("./constants");
        exports.twoPi = constants_1.valueOfPi * 2;
  • ES2015
    • ๋ชจ๋“ˆ ์ •์˜๋Š” export, ๋ชจ๋“ˆ ์‚ฌ์šฉ์€ import ๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

    • ESM์˜ ๋™์ž‘ ๋ฐฉ์‹

      ๋ชจ๋“ˆ ๋กœ๋”๋Š” ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ฒ˜์Œ์—” ํŒŒ์‹ฑ์„ ํ•˜๊ฒŒ๋œ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ import์™€ export๋ฅผ ํ˜ธ์ถœํ•œ ๋ถ€๋ถ„์„ ์ฐพ๋Š”๋‹ค(์ฐพ๊ธฐ๋งŒ ํ•˜๊ณ  ์‹คํ–‰์‹œํ‚ค์ง€๋Š” ์•Š๋Š”๋‹ค). ํŒŒ์‹ฑํ•  ๋•Œ, named import์—์„œ์˜ ์˜คํƒ€๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , exception์„ ๋˜์งˆ ์ˆ˜ ์žˆ๋‹ค. ์‹ค์ œ ์˜์กด ์ฝ”๋“œ๋Š” ์‹คํ–‰์‹œํ‚ค์ง€ ์•Š๊ณ ๋„ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

      ํŒŒ์‹ฑ์ด ๋๋‚˜๊ณ  ๋‚˜๋ฉด, ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ๋ฐ›๊ณ , importํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒŒ์‹ฑํ•˜๊ฒŒ ๋œ๋‹ค. ๋”์ด์ƒ importํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ์˜์กด ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” "module graph"๋ฅผ ๊ทธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด๋„ ๋œ๋‹ค๋ฉด, ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

    • .js

        // @showEmit
        // @module: commonjs
        // @noErrors
        import { valueOfPi } from "./constants";
        export const twoPi = valueOfPi * 2;

์ฐธ๊ณ