Typescript: ์˜ต์…˜ resolveJsonModule์€ esModuleInterop์—†์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 07์›” 03์ผ  ยท  22์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/TypeScript


TypeScript ๋ฒ„์ „ : 2.9.2, 3.0.0-dev.20180703


๊ฒ€์ƒ‰์–ด:

resolveJsonModule, esModuleInterop

์•”ํ˜ธ

import * as test from './test.json';

tsconfig.json :

{
    "compilerOptions": {
        "module": "commonjs",
        "moduleResolution": "node",
        "target": "es2017",
        "lib": ["es2017"],
        "strict": true,
        "sourceMap": true,
        "noEmitOnError": true,
        "baseUrl": ".",
        "resolveJsonModule": true,
        "outDir": "out"
    }
}

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘ :

์˜ค๋ฅ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™ :

์ปดํŒŒ์ผ ์˜ค๋ฅ˜ :

$ tsc
test.ts:1:23 - error TS2497: Module '"/home/kostya/tmp/resolve-json-test/test"' resolves to a non-module entity and cannot be imported using this construct.

1 import * as test from './test.json';
                        ~~~~~~~~~~~~~

esModuleInterop ์˜ต์…˜์„ tsconfig.json :

diff --git a/tsconfig.json b/tsconfig.json
index 7f1afb8..e949135 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -9,6 +9,7 @@
         "noEmitOnError": true,
         "baseUrl": ".",
         "resolveJsonModule": true,
+        "esModuleInterop": true,
         "outDir": "out"
     }
 }

๊ฐ€์ ธ ์˜ค๊ธฐ ๋ฌธ์„ ๋‹ค์Œ์œผ๋กœ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.

diff --git a/test.ts b/test.ts
index 07bb9b7..dddcffb 100644
--- a/test.ts
+++ b/test.ts
@@ -1 +1 @@
-import * as test from './test.json';
+import test from './test.json';

ํšจ๊ณผ๊ฐ€์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ esModuleInterop ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์ ํŠธ์—์„œ ๋งŽ์€ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š”๋ฐ ์ด๋Š” ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ”Œ๋ ˆ์ด ๊ทธ๋ผ์šด๋“œ ๋งํฌ :

๊ด€๋ จ ๋ฌธ์ œ:

Bug Fixed

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

resolveJsonModule์„ "true"๋กœ ์„ค์ • ํ•œ ํ›„ VS Code (TypeScript 3.2.2, VSCode 1.30.1)์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. VS Code๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ TS ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  22 ๋Œ“๊ธ€

๋˜ํ•œ resolveJsonModule ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ esModuleInterop ์—†์œผ๋ฉด json ํŒŒ์ผ์ด ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

resolveJsonModule์„ "true"๋กœ ์„ค์ • ํ•œ ํ›„ VS Code (TypeScript 3.2.2, VSCode 1.30.1)์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. VS Code๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ TS ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์„ค์ • ํ™•์ธ resolveJsonModule ์— true ๋‚ด์—์„œ tsconfig.json ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ.

VS Code๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

resolveJsonModule์„ "true"๋กœ ์„ค์ • ํ•œ ํ›„ VS Code (TypeScript 3.2.2, VSCode 1.30.1)์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. VS Code๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ TS ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค!

resolveJsonModule์„ "true"๋กœ ์„ค์ • ํ•œ ํ›„ VS Code (TypeScript 3.2.2, VSCode 1.30.1)์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. VS Code๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ TS ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

resolveJsonModule์„ "true"๋กœ ์„ค์ • ํ•œ ํ›„ VS Code (TypeScript 3.2.2, VSCode 1.30.1)์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. VS Code๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ TS ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜ƒ

resolveJsonModule์„ "true"๋กœ ์„ค์ • ํ•œ ํ›„ VS Code (TypeScript 3.2.2, VSCode 1.30.1)์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. VS Code๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ TS ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๋งˆ์›Œ์š”, ๋งค๋ ฅ ๊ฐ™์•˜์–ด์š”!

๋‚˜๋Š” @intelliot ์ฝ”๋“œ ๋Œ€ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ์ธ IntelliJ์—์„œ ๋น„์Šทํ•œ ๋™์ž‘์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์ œ์•ˆ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ์„ esnext ๋กœ ์—…๋ฐ์ดํŠธ ํ•œ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ tsconfig์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
...
"target": "esnext",
"moduleResolution": "๋…ธ๋“œ",
...

๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„ ์ฒ˜์Œ์—๋Š” ํŒŒ์ผ์ด ๋…น์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๊ณ  3 ์ดˆ ํ›„์— ๋‹ค์‹œ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ œ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ chrisj-skinner๋Š” ๋‚˜์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์™œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—์ด ๋ฌธ์ œ๊ฐ€ ์ข…๊ฒฐ ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ฐ€์ง€๊ณ ์žˆ๋‹ค

    "esModuleInterop": true,
    "resolveJsonModule": true,
    "moduleResolution": "node",

๊ณผ
const pkgJSON = require('../../package.json');

- Consider using '--resolveJsonModule' to import module with '.json' extensionts(2732)

์ด๋ฏธ resolveJsonModule์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

WebStorm์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„ ์ฒ˜์Œ์—๋Š” ํŒŒ์ผ์ด ๋…น์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๊ณ  3 ์ดˆ ํ›„์— ๋‹ค์‹œ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ œ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„ ์ฒ˜์Œ์—๋Š” ํŒŒ์ผ์ด ๋…น์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๊ณ  3 ์ดˆ ํ›„์— ๋‹ค์‹œ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ œ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ tsconfig.json์— ์ƒˆ๋กœ ์ƒ์„ฑ ๋œ ํด๋” / ts ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ ๊ธฐ ๋•Œ๋ฌธ์—

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ tsconfig.json์— ์ƒˆ๋กœ ์ƒ์„ฑ ๋œ ํด๋” / ts ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ ๊ธฐ ๋•Œ๋ฌธ์—

๋˜‘๊ฐ™์•„, ๊ณ ๋งˆ์›Œ!

์ œ ๊ฒฝ์šฐ : "ํŒŒ์ผ"-> "์บ์‹œ ๋ฌดํšจํ™” / ๋‹ค์‹œ ์‹œ์ž‘ ..."-> "๋ฌดํšจํ™” ๋ฐ ๋‹ค์‹œ ์‹œ์ž‘", ๋ฌธ์ œ ํ•ด๊ฒฐ

์ œ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

        "moduleResolution": "node"

์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

        "module": "commonjs"

์ œ ๊ฒฝ์šฐ์— ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚  ์ง€ ์—ฌ๋ถ€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ out ๋ฐ src ํด๋”์™€ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— tsconfig.json ๋ฅผ ๋„ฃ์–ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

moduleResolution : node๋ฅผ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. VS ์žฌ์‹œ์ž‘ ํ›„ '์ˆ˜์ •'๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰