[tsconfigμ λͺ¨λ κ²] Compiler options / Modules
μ΄λ² ν¬μ€ν
μμλ μ§λ [tsconfigμ λͺ¨λ κ²] Compiler options / Type Checking ν¬μ€ν
μ μ΄μ΄ tsconfig
μ μ»΄νμΌ μ΅μ
μ€ λͺ¨λκ³Ό κ΄λ ¨λ μ΅μ
λ€μ λν μ΄μΌκΈ°λ₯Ό ν΄λ³΄λ €κ³ νλ€.
μ΄ μ΅μ λ€μ νμ μ€ν¬λ¦½νΈλ₯Ό μ»΄νμΌν λ λͺ¨λλ€μ΄ μ΄λ€ λͺ¨λ μμ€ν μ λ°λ₯΄λλ‘ ν κ²μΈμ§, μ΄λ€ κ²½λ‘μ μλ νμΌλ€μ μ»΄νμΌ ν κ²μΈμ§, λΉλλ μλ°μ€ν¬λ¦½νΈ νμΌλ€μ΄ μ΄λ€ λͺ¨λ λ°©μμ λ°λ₯΄κ² ν κ²μΈμ§ λ±μ 컨νΈλ‘€ ν μ μλ κ²λ€μΈλ°, μΌλ°μ μΈ μλΉμ€λ₯Ό λ§λλ κ²½μ°λ³΄λ€λ νμ μ€ν¬λ¦½νΈλ‘ μμ±λ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ§λ€ λ μμ£Ό λ€λ£¨κ² λλ μ΅μ λ€μ΄κΈ°λ νλ€.
allowUmdGlobalAccess
κ° | μ€λͺ |
---|---|
true |
umd λͺ¨λλ‘μ μ κ·Όμ νμ©νλ€ |
false (default) |
umd λͺ¨λλ‘μ μ κ·Όμ νμ©νμ§ μλλ€ |
allowUmdGlobalAccess
μ΅μ
μ νμ
μ€ν¬λ¦½νΈ λͺ¨λμ΄ μ μ κ°μ²΄μ λͺ¨λμ ν¬ν¨μμΌ λ΄λ³΄λ΄λ UMD(Universal Module Definition)ννμ λͺ¨λμ μ κ·Όμ΄ κ°λ₯νκ² ν κ²μΈμ§λ₯Ό 컨νΈλ‘€ νλ μ΅μ
μ΄λ€.
λ§μ½ μ΄ μ΅μ
μ΄ κΊΌμ Έ μλ€λ©΄ jQueryμ $
μ κ°μ μ μ λ³μμ κ·Έλ₯ μ κ·Όνλ κ²μ΄ λΆκ°λ₯ν΄μ§κ³ , 무쑰건 import
λ¬Έμ ν΅ν΄μ λͺ¨λμ κ°μ ΈμμΌ νλ€.
UMD λ°©μμ μ¬μ©νμ¬ λ§λ€μ΄μ§ λΌμ΄λΈλ¬λ¦¬λ€μ λ³΄ν΅ μ΄λ° ννμ κΈλ‘λ² νμ μ μΈμ κ°μ§κ³ μλ€.
export const doThing1: () => number;
export const version: string;
export interface AnInterface {
foo: string;
}
export as namespace myLibrary;
μ΄λ κ² νμ
νμΌμ΄ λ€μμ€νμ΄μ€λ₯Ό export νλλ‘ μ μΈλμ΄ μλ κ²½μ°, νμ
μ€ν¬λ¦½νΈλ μ΄ λͺ¨λμ΄ μ묡μ μΌλ‘ μ μ λ³μμΈ myLibrary
μ ν λΉλλ€κ³ νλ¨νλ€. κ·Έλ κΈ° λλ¬Έμ μ΄λ° νμ
μ μΈμ λ΄ μμ€μ ν¬ν¨μν€λ©΄ myLibrary
λΌλ λ€μμ€νμ΄μ€λ₯Ό ν΅ν΄ μ΄ λͺ¨λμ λ΄μ©λ¬Όμ μ κ·Όν μκ° μλ κ²μ΄λ€.
λ§μ½ allowUmdGlobalAccess
μ΅μ
μ΄ κΊΌμ Έμλ μνλΌλ©΄ μ΄λ° μλ¬λ₯Ό λ§λκ² λλ€.
const b = myLibrary.doThing1();
// 'myLibrary' refers to a UMD global, but the current file is a module. Consider adding an import instead.ts(2686)
export {}
μ΄λ allowUmdGlobalAccess
μ΅μ
μ μΌκ² λλ©΄ λ€μμ€νμ΄μ€λ‘ exportλ UMD λͺ¨λμ μ κ·Όνλ κ²μ΄ νμ©λλ€. νμ§λ§ κ΅³μ΄ μ묡μ μΌλ‘ μ μ λ³μμ μ μΈλμ΄μλ λͺ¨λμ μ κ·Όν΄μ μ¬μ©νλ κ²λ³΄λ€ import
ν€μλλ‘ λͺ
μμ μΌλ‘ λͺ¨λμ κ°μ Έμμ μ¬μ©νλ κ²μ΄ λ μμ νλ, νΌμΉ λͺ»νλ κ²½μ°κ° μλλΌλ©΄ κ°κΈμ ν΄λΉ μ΅μ
μ μΌλλλ‘ νμ.
baseUrl
baseUrl
μ΅μ
μ μλ κ²½λ‘λ‘ λͺ¨λμ κ²½λ‘λ₯Ό μ§μ ν λ κΈ°μ€μ΄ λλ μμΉλ₯Ό μ§μ ν μ μλ μ΅μ
μ΄λ€.
myProject
βββ index.ts
βββ utils
β βββ foo.ts
βββ tsconfig.json
μλ₯Ό λ€μ΄ μμ κ°μ μν©μΌ λ, index.ts
μμ μλ κ²½λ‘λ₯Ό μ¬μ©νμ¬ foo.ts
λͺ¨λμ κ°μ Έμ€λ €λ©΄ ./utils/foo
μ κ°μ΄ νμ¬ κΈ°μ€μ΄ λλ μμΉλ₯Ό ./
μ²λΌ μ§μ ν ν ν΄λΉ λͺ¨λμ μ κ·Όνκ² λλ€.
νμ§λ§ μ μκ°ν΄λ³΄λ©΄ μ무리 μλ κ²½λ‘λ₯Ό μ¬μ©νλ€κ³ ν΄λ, κΈ°μ€μ΄ λλ μμΉ μμ²΄κ° λ³νλ κ²½μ°λ λ§μ§ μλ€λ κ²μ μ μ μλ€.
myProject
βββ index.ts
βββ utils
β βββ foo.ts
βββ remotes
β βββ bar.ts
βββ tsconfig.json
λ§μ½ μ΄λ° ꡬ쑰μ νλ‘μ νΈμ remotes/bar
λͺ¨λμμ utils/foo
λͺ¨λμ μ κ·Όνλ €κ³ νλ€λ©΄ κ²°κ΅ ../utils/foo
μ²λΌ νλ‘μ νΈμ 루νΈκΉμ§ μ¬λΌκ° ν λ€μ λ΄λ €μ€λ λ°©μμΌλ‘ μ κ·Όμ νκΈ° λλ¬Έμ΄λ€.
κ·Έλμ baseUrl
μ΅μ
μ μλκ²½λ‘λ₯Ό μ¬μ©ν λλ§λ€ λ°λ³΅λλ β루νΈλ‘μ μ¬μ βμ μμ μ£Όλ μν μ νλ€.
{
"include": ["src/*"],
"compilerOptions": {
"baseUrl": "./"
}
}
μ΄λ baseUrl
μ μ
λ ₯νλ μλ κ²½λ‘μ κΈ°μ€μ tsconfig
κ° μμΉνλ κ³³μ΄κΈ° λλ¬Έμ μΌλ°μ μΌλ‘λ νλ‘μ νΈμ 루νΈκ° λλ€. μ¦, μ΄λ κ² μ€μ ν ν μ°λ¦¬κ° λͺ¨λμ μ κ·ΌνκΈ° μν΄ μλ κ²½λ‘λ₯Ό μ¬μ©νκ² λλ©΄, νμ
μ€ν¬λ¦½νΈλ baseUrl
μ μ
λ ₯λ 루νΈμ μμΉμμλΆν° ν΄λΉ λͺ¨λμ μ°Ύμκ°κ² λλ κ²μ΄λ€.
import { foo } from 'utils/foo'; // μ¬μ€ .(루νΈ)/utils/foo
import { bar } from 'remotes/bar'; // μ¬μ€ .(루νΈ)/remotes/bar
μ΄λ κ² baseUrl
μ΅μ
μ μ¬μ©νλ©΄ λ§€λ² ./
λ ../
λ±μ μ¬μ©νμ¬ λ£¨νΈλ₯Ό λ¨Όμ μ°Ύμ ν λͺ¨λμ μ κ·Όνλ μλ κ²½λ‘λ₯Ό μ λ κ²½λ‘μ²λΌ μ¬μ©ν μ μλ€.
paths
paths
μ΅μ
μ νΉμ ν λͺ¨λ μ΄λ¦μ μ§μ νμ λ μ»΄νμΌλ¬κ° μ΄λμ λΆν° λͺ¨λμ νμν΄μΌ ν μ§λ₯Ό μ§μ ν μ μλ 맡μ μ 곡νλ€.
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"app/*": ["app/*"],
"config/*": ["app/_config/*"],
"environment/*": ["environments/*"],
"shared/*": ["app/_shared/*"],
"helpers/*": ["helpers/*"],
"tests/*": ["tests/*"]
}
}
}
맡μ ν¬ν¨λλ κ²½λ‘λ€μ baseUrl
μ κΈ°μ€μΌλ‘ μλ κ²½λ‘λ‘ κ³μ°λκΈ° λλ¬Έμ, paths
μ΅μ
μ μ¬μ©νκΈ° μν΄μλ λ°λμ baseUrl
μ΅μ
μ κ°μ μ±μμ£Όμ΄μΌ νλ€. μ¦, μ μμμ app/*
λ ./src/app/*
λ₯Ό μλ―Ένλ©°, λͺ¨λμ λΆλ¬μ¬ λ import foo from 'app/math'
μ κ°μ΄ μ κ·Όνκ² λλ©΄, νμ
μ€ν¬λ¦½νΈλ μλμΌλ‘ 맡μ ν΄λΉνλ κ²½λ‘μΈ ./src/app/math
λ₯Ό νμν ν λͺ¨λμ κ°μ Έμ€κ² λλ€.
λ§μ½ paths
μ΅μ
μ μ€μ λ μμΉλ€μ μ λΆ νμνλλ°λ λͺ¨λμ μ°Ύμ§ λͺ» νλ€λ©΄, moduleResolution
μ΅μ
μμ μ€μ ν μ λ΅μ λ°λΌ μΆκ°μ μΈ νμμ μ§ννκ² λλ€.
μ¬μ€ ν¨μ€ 맀ν μ체λ μλ κ°λ¨ν μ€μ μ΄κΈ° λλ¬Έμ ν¬κ² μ΄λ €μΈ κ²μ΄ μμ§λ§, μ’
μ’
ν¨μ€ 맀νμ΄ λ°λμ baseUrl
μ κΈ°μ€μΌλ‘ μμνλ€λ μ μ κΉλ¨Ήμ΄μ μ€μλ₯Ό νκ³€ νλ€.
myProject
βββ src
β βββ index.ts
βββ node_modules
β βββ foo
βββ tsconfig.json
μμ κ°μ ꡬ쑰μ νλ‘μ νΈμμ baseUrl
λ‘ ./src
λ₯Ό μ§μ ν μν©μ μκ°ν΄λ³΄μ. μ°λ¦¬κ° foo
λΌλ ν¨μ€μ node_modules/foo
λ₯Ό 맀ννλ €λ©΄ μ΄λ»κ² ν΄μΌν κΉ?
μ΄λ μμ£Ό νλ μ€μλ tsconfig.json
μ μμΉλ₯Ό κΈ°μ€μΌλ‘ "foo": "./node_modules/foo"
λΌκ³ μ€μ νλ κ²μ΄λ€. μ무λλ λ΄κ° μ§κΈ ν¨μ€ 맀ν μμ
μ νκ³ μλ νμΌμ΄ tsconfig.json
μ΄λ λ³ μκ°μμ΄ νμ¬ νμΌ κΈ°μ€μΌλ‘ κ²½λ‘λ₯Ό μ§μ νλ κ²μ΄λ€.
νμ§λ§ ν¨μ€ 맀νμ baseUrl
μ κΈ°μ€μΌλ‘ μ§νλκΈ° λλ¬Έμ μ΄ κ²½μ°μλ src
λλ ν λ¦¬κ° κΈ°μ€μ μ΄ λλ€. μ¦, "foo": "../node_modules/foo"
λ‘ λ§€νμ μ§νν΄μ£Όμ΄μΌ νλ€λ κ²μ΄λ€.
κ°νΉ μ΄ μ μ μκ³ tsconfig.json
μ μμΉλ₯Ό κΈ°μ€μΌλ‘ ν¨μ€ 맀νμ μ§ννλ€κ° λͺ¨λ νμμ μ€ν¨νλ κ²½μ°κ° μμ μμΌλ μ£Όμνλλ‘ νμ.
module
κ° | μ€λͺ |
---|---|
CommonJS (default) |
CommonJS νμμΌλ‘ λͺ¨λμ μ»΄νμΌνλ€. |
AMD |
Asynchronous Module Definition νμμΌλ‘ λͺ¨λμ μ»΄νμΌνλ€. |
UMD |
Universal Module Definition λμμΈ ν¨ν΄μ μ¬μ©νμ¬ λͺ¨λμ μ»΄νμΌνλ€. |
System |
System.js νμμΌλ‘ λͺ¨λμ μ»΄νμΌνλ€. |
ES6 , ES2015 , ES2020 , ESNext |
ESM(ES Module) λ°©μμΌλ‘ λͺ¨λμ μ»΄νμΌνλ€. |
module
μ΅μ
μ μ»΄νμΌμ λ§μΉ μλ°μ€ν¬λ¦½νΈ λͺ¨λμ΄ μ΄λ€ λͺ¨λ μμ€ν
μ μ¬μ©ν μ§λ₯Ό μ€μ νλ μ΅μ
μ΄λ€.
λ¬Όλ‘ ECMAScriptμμ μ§μ ν 곡μ λͺ¨λ μμ€ν
μ import
, export
ν€μλλ₯Ό μ¬μ©νλ ESM λ°©μμ΄κΈ°λ νμ§λ§, νμ€μ μΌλ‘ μ΄λ¬ν λͺ¨λ μμ€ν
μ μ§μνλ λΈλΌμ°μ κ° μμ§ λ§μ§ μκ³ , NodeJS κ°μ κ²½μ° μ§λ 12.0.0 λ²μ μμ --experimental-modules
νλκ·Έ μμ΄ ESMμ μ¬μ©ν μ μλ κΈ°λ₯μ΄ μΆκ°λκΈ°λ νμ§λ§, μμ§ μνκ³ μ 체μ ESM μμ€ν
μ΄ νΌμ Έμλ μν©μ μλλ€. (NodeJS μ§μμ μμ§ CommonJSλ₯Ό λ§μ΄ μ¬μ©νλ€)
μ΄λ° μ΄μ λ€λ‘ μΈν΄ μ°λ¦¬μ λͺ¨λμ΄ λ¬΄μ‘°κ±΄ ESM μμ€ν μ μ¬μ©νλλ‘ μ»΄νμΌνκΈ°λ νμ€μ μΌλ‘ μ΄λ ΅κΈ° λλ¬Έμ, μ μ ν μν©μ λ§λ λͺ¨λ μμ€ν μ μ νν μ μμ΄μΌ νλ κ²μ΄λ€.
μ΄ ν¬μ€ν μμ μλ°μ€ν¬λ¦½νΈμ λͺ¨λ μμ€ν μ λν λͺ¨λ κ²μ λ€λ£° μλ μμΌλ, κ° λͺ¨λ μμ€ν λ€μ νΉμ§ μ λλ§ κ°λ¨νκ² μμλ³΄κ³ λμ΄κ°λλ‘ νκ² λ€. νλ² κ°λ¨νκ² λ κ°μ λͺ¨λλ‘ κ΅¬μ±λ μ΄ν리μΌμ΄μ μ μμν΄λ³΄μ.
// utils/math.ts
export const add = (x: number) => (y: number) => x + y;
// index.ts
import { add } from './utils/math';
export const add2 = add(2);
μ μ΄ν리μΌμ΄μ
μ index.ts
λͺ¨λμ utils/math.ts
λͺ¨λμμ add
λΌλ ν¨μλ₯Ό κ°μ Έμμ 컀λ§μ ν΅ν΄ add2
ν¨μλ₯Ό μμ±νκ³ λ€μ λ΄λ³΄λ΄λ λͺ¨λμ΄λ€. μ΄μ μ΄ μ΄ν리μΌμ΄μ
μ κ°κ°μ λͺ¨λ μμ€ν
μ μ¬μ©νλλ‘ μ»΄νμΌνλ©΄ index.ts
κ° μ΄λ»κ² λ³κ²½λλμ§, κ·Έλ¦¬κ³ κ° λͺ¨λ μμ€ν
μ νΉμ§μ΄ 무μμΈμ§ μ΄ν΄λ³΄λλ‘ νμ.
CommonJS
"use strict";
exports.__esModule = true;
exports.add2 = void 0;
var math_1 = require("./utils/math");
exports.add2 = (0, math_1.add)(2);
CommonJS
λ Commonμ΄λΌλ μ΄λ¦λ΅κ², μλ°μ€ν¬λ¦½νΈ λͺ¨λμ λΈλΌμ°μ λΏ μλλΌ μλ² νκ²½μ΄λ λ°μ€ν¬ν μ΄ν리μΌμ΄μ
λ΄μμλ μμ λ‘κ² μ¬μ©νλ κ²μ νλ°©νκ³ μλ λͺ¨λ μμ€ν
μ΄λ€.
κ·Έλ° μ΄μ λ‘ μλ² μ¬μ΄λμμ μ£Όλ‘ μ¬μ©νλ λ°νμμΈ NodeJS κ°μ κ²½μ°μλ μμ§κΉμ§ CommonJS μμ€ν μ μ¬μ©νκ³ μλ νκ²½μ΄ λ§κΈ° λλ¬Έμ μλ² μ¬μ΄λμμ μ¬μ©ν λΌμ΄λΈλ¬λ¦¬ λ±μ λ§λ λ€λ©΄ ν΄λΉ CommonJS μμ€ν μ μ¬μ©νλ κ²μ κ³ λ―Όν΄λ΄μΌ νλ€.
CommonJSλ exports
λλ module.exports
κ°μ²΄μ νλ‘νΌν°μ λͺ¨λμ ν λΉνκ³ , μ μν¨μ require
λ₯Ό ν΅ν΄ λκΈ°μ μΌλ‘ λͺ¨λμ μ§μ κ°μ Έμ€λ λ°©μμ μ¬μ©νλ€. μ μμμμλ math_1
μ΄λΌλ λ³μμ require
λΌλ ν¨μλ₯Ό ν΅ν΄ λͺ¨λμ ν λΉνκ³ , exports.add2
νλ‘νΌν°μ add2
ν¨μλ₯Ό λ€μ ν λΉνκ³ μλ κ²μ λ³Ό μ μλ€.
μ΄λ κ² require
ν¨μκ° μ€νλ λ λκΈ°μ μΌλ‘ λͺ¨λμ κ°μ Έμ€λ CommonJSμ νΉμ§ λλΆμ if
λ¬Έμ μ¬μ©νμ¬ βμ΄λ΄ λ A λͺ¨λ, μ λ΄ λ B λͺ¨λμ κ°μ Έμ!β κ°μ μ§μ νλ κ²λ κ°λ₯νλ€.
AMD
define(["require", "exports", "./utils/math"], function (require, exports, math_1) {
"use strict";
exports.__esModule = true;
exports.add2 = void 0;
exports.add2 = (0, math_1.add)(2);
});
AMD(Asynchronous Module Definition)
λ μ΄λ¦μ κ±Έλ§κ² λΉλκΈ°μ μΌλ‘ λͺ¨λμ κ°μ Έμ€λ λ°©μμ μ¬μ©νλ λͺ¨λ μμ€ν
μ΄λ€.
κΈ°μ‘΄μ CommonJSλ λκΈ°μ μΌλ‘ λͺ¨λμ κ°μ Έμ€λ κ²μ μ μ λ‘ κ°λ°λμκΈ° λλ¬Έμ νμ λΉλκΈ°μ μΌλ‘ λͺ¨λμ κ°μ Έμ€λ λ°©μμ ꡬννκΈ° μν νλ°ν λ Όμκ° μμλλ°, μ΄ λ Όμ κ³Όμ μμμ κΈ°μ‘΄μ CommonJSμ μ μ μΈ βλͺ¨λ νκ²½μμ μλνλ μλ°μ€ν¬λ¦½νΈ λͺ¨λβμ 곡κ°νμ§ λͺ»νλ μ¬λλ€μ΄ λμκ³ , μ΄ μ¬λλ€μ΄ λ°λ‘ λ 립νμ¬ AMD κ·Έλ£Ήμ λ§λ€κ² λμλ€.
μ¬μ€ λΈλΌμ°μ νκ²½μ μ μ΄μ μλ²μ λ€λ₯΄κ², νμν λͺ¨λλ€μ μλ²λ‘λΆν° λ°μμμ μ¬μ©ν΄μΌ νλ νκ²½μ΄λ€. κ·Έλ κΈ° λλ¬Έμ νμν λͺ¨λ λͺ¨λμ νλ²μ λ°μμ μ€ννλ κ²λ³΄λ€ λͺ¨λ μ€μμ νμν λΆλΆλ§ μλ²λ‘λΆν° λΉλκΈ°μ μΌλ‘ κ°μ Έμμ μ¬μ©νλ κ²μ΄ λ ν¨μ¨μ μΈ κ²μ΄λ€. νμ§λ§ βλͺ¨λ νκ²½μμ μλνλ μλ°μ€ν¬λ¦½νΈ λͺ¨λβμ λͺ©νλ‘ νλ CommonJS κ·Έλ£Ήμμλ μ΄λ° νκ²½ μ°¨μ΄λ₯Ό ν΅ν©νκΈ°κ° μ½μ§ μμλ€.
μ΄ κ³Όμ μμ βλΈλΌμ°μ λ§μ΄λΌλ μ λλ‘ ν΄λ³΄μβλΌλ μ견μ κ°μ§ μ¬λλ€μ΄ λ 립νμ¬ AMD μμ€ν μ΄ νμνκ² λμκ³ , κ·Έλ° μ΄μ λ‘ AMD μμ€ν μ λΈλΌμ°μ μμμ λΉλκΈ° λͺ¨λ νΈμΆμ μ΄μ μ λ§μΆκ³ κ°λ°λμλ€. (λ¬Όλ‘ CommonJSλ μ΄ν λΉλκΈ° λͺ¨λ λ‘λ© κΈ°λ₯μ λ°λ‘ μΆκ°νλ€)
νμ§λ§ κ²°κ΅ CommonJSμμ λ¨μ΄μ Έ λμ¨ κ·Έλ£ΉμΈλ§νΌ CommonJSμ AMDλ μλ‘ νΈνν μ μλ κΈ°λ₯λ€μ λ§μ΄ μ 곡νκ³ μκΈ° λλ¬Έμ, κΈ°μ‘΄μ CommonJS λͺ¨λμ AMD λ°©μμΌλ‘ λνν΄μ μ¬μ©νλ λ±μ μμ©λ κ°λ₯νλ€.
μ μμμμλ AMD μμ€ν
μ define
ν¨μκ° κΈ°λ³Έμ μΌλ‘ CommonJSμ require
, export
ν¨μλ₯Ό κ°μ Έμμ μ¬μ©νκ³ μλ λͺ¨μ΅μ λ³Ό μ μλ€. κΈ°λ³Έμ μΌλ‘ λ΄λΆ ꡬ쑰λ CommonJSμ λΉμ·νμ§λ§, require
ν¨μλ₯Ό ν΅ν΄ λͺ¨λμ κ°μ Έμ€λ κ²μ΄ μλλΌ, define
ν¨μμ 3λ²μ§Έ μΈμμΈ math_1
μ ν΅ν΄ λͺ¨λμ μ£Όμ
λ°κ³ μλ€λ κ²μ΄ CommonJS μμ€ν
κ³Όμ κ²°μ μ μΈ μ°¨μ΄μ΄λ€.
UMD
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "./utils/math"], factory);
}
})(function (require, exports) {
"use strict";
exports.__esModule = true;
exports.add2 = void 0;
var math_1 = require("./utils/math");
exports.add2 = (0, math_1.add)(2);
});
UMD(Universal Module Definition)
μ λͺ¨λ μμ€ν
μ΄λΌκΈ°λ³΄λ€ λ€μν νκ²½μμ Universal, μ¦, λ²μ©μΌλ‘ μ¬μ©ν μ μλ ννμ λμμΈ ν¨ν΄μ΄λΌκ³ λ³Ό μ μλ€.
κ·Έλ κΈ° λλ¬Έμ UMD ν¨ν΄μ λ³΄ν΅ RequireJS
κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΅ν΄ μ¬μ©νλ AMDλ CommonJSμ λ€λ₯΄κ², μ§μ κ°λ°μκ° μ§μ UMD ν¨ν΄μ μ¬μ©ν μ½λλ₯Ό μμ±ν΄μ€μΌ νλ€. μ½κ² λ§ν΄ μμ μμμ²λΌ IIFE(Immediately Invoked Function Expression, μ¦μμ€νν¨μ)λ₯Ό μ¬μ©νμ¬ κ°λ°μκ° μ§μ μμ€ μ½λ λ΄μμ λΆκΈ°λ₯Ό μ³μ£Όλ κ²μ΄ κ²°κ΅ UMD ν¨ν΄μ΄λΌλ κ²μ΄λ€.
μ μμλ₯Ό 보면 module
κ³Ό module.exports
κ° μ‘΄μ¬νλ€λ©΄ CommonJS μμ€ν
μ, define
ν¨μκ° μ‘΄μ¬νλ€λ©΄ AMD μμ€ν
μ μ¬μ©νλ κ²μ λ³Ό μ μλ€. μ΄μ²λΌ UMD ν¨ν΄μ λͺ¨λμ΄ μ¬μ©λλ νκ²½μ΄ μ΄λ€ λͺ¨λ μμ€ν
μ μ¬μ©νλμ§ μ¬λΆμ μκ΄μμ΄ νμ λμΌν κ²½νμ μ 곡ν μ μλ€λ μ₯μ μ΄ μλ€.
μΆκ°μ μΌλ‘, λͺ¨λμ μ¬μ©νλ νκ²½μ΄ CommonJS, AMD λ μμ€ν
λͺ¨λ μ§μνμ§ μλ κ²½μ°μλ UMD ν¨ν΄μ μ¬μ©νμ¬ μ μ κ°μ²΄μΈ globalThis
, window
, global
λ±μ νλ‘νΌν°λ‘ λͺ¨λμ λ£λ μ΅νμ λ°©λ²λ μκΈ°λ νλ€.
νμ§λ§ μ΄ λ°©λ²μ μ μ μ€μ½νλ₯Ό μ€μΌμν€κΈ° λλ¬Έμ κ°κΈμ μ΄λ©΄ νΌνλ κ²μ΄ μ’κΈ°λ νκ³ , μ΅κ·Όμ μλ°μ€ν¬λ¦½νΈ λ°νμ νκ²½μμ λͺ¨λ μμ€ν μμ²΄κ° μ§μλμ§ μλ νκ²½μ΄ κ°μ λλ κ²½μ°λ νμΉ μμΌλ―λ‘ νμ μ€ν¬λ¦½νΈλ μ΄λ° λ°©λ²κΉμ§λ μ¬μ©νμ§ μλ κ²μΌλ‘ 보μΈλ€.
System
System.register(["./utils/math"], function (exports_1, context_1) {
"use strict";
var math_1, add2;
var __moduleName = context_1 && context_1.id;
return {
setters: [
function (math_1_1) {
math_1 = math_1_1;
}
],
execute: function () {
exports_1("add2", add2 = math_1.add(2));
}
};
});
UMD ν¨ν΄μ΄ βλ€κ° λ μ’μν μ§ λͺ°λΌμ λ€ μ€λΉνμ΄βμ λμμΈ ν¨ν΄ λ²μ μ΄λΌλ©΄, SystemJS
λ μ΄κ±Έ λΌμ΄λΈλ¬λ¦¬λ‘ ꡬνν λͺ¨λ λ‘λμ΄λ€. (ν μ λ λ΄λ€)
μ¦, SystemJSλ λͺ¨λ λ‘λμ΄κΈ° λλ¬Έμ λͺ¨λμ μ΄λ»κ² μ μνλμ§μ λν κ²μ κ΄μ¬νμ§ μκ³ , κ·Έμ μ΄λ―Έ CommonJS, AMD, ESM λ°©μμΌλ‘ μ μλ λͺ¨λμ λ‘λν΄μ£ΌκΈ°λ§ νλ λ μμ΄λ€.
SystemJSλ 2016λ
ECMA μ¬λ¨μ΄ ES6μ 곡μ λͺ¨λ μ€νμΌλ‘ import
, export
ν€μλλ₯Ό μ¬μ©νλ ESM ν¨ν΄μ λ°ννμ λ μ¦μ κ½€λ λ§μ΄ μ¬μ©λλ λ
μμΈλ°, κ·Έ μ΄μ λ μ΄ λΉμ λΈλΌμ°μ λ€μ΄ μ΄ μ€νμ μ§μνμ§ μμκΈ° λλ¬Έμ΄λ€.
λͺ¨λλ§μ λν 곡μ μ€νμ μ ν΄μ‘μΌλ μ μ κ·Έκ±Έ μ€νμν¬ λΈλΌμ°μ λ²€λλ€μ λμμ΄ λ¦λ μν©μ΄λΌ ESMμ μ¬μ©νκ³ μΆμ΄λ ν μκ° μλ μν©μ΄μλλ°, μ΄λ SystemJSκ° μ΄ μ€κ° λ€λ¦¬ μν μ ν΄μ€¬μλ€. λΉμμλ es-module-loaderλΌλ ν΄λ¦¬νμ μ¬μ©νμ¬ ESM λ°©μμ λͺ¨λμ λΆλ¬μ€λλ‘ κ΅¬νλμ΄μμλ€.
κ·Έλ°λ° μ¬κΈ°μ ν κ°μ§ μλ¬Έμ΄ λλ κ²μ΄ βλΈλΌμ°μ κ° μ§μνμ§ μλ λͺ¨λμ λΆλ¬μλ νΈλμ€νμΌλ§μ νμ§ μμΌλ©΄ μ€νμ μν¬ μ μλ κ²½μ°λ μμν λ°, SystemJSλ μ΄ λ¬Έμ λ₯Ό μ΄λ»κ² ν΄κ²°νλ κ±ΈκΉ?βλΌλ κ²μΈλ°, μ λ΅μ μμΈλ‘ κ°κΉμ΄ κ³³μ μμλ€.
κ·Έλ λ€. μ΄ λ°©λ²μ μ°λ©΄ λΆλ¬μ¬ λμ λͺ¨λμ μΈμ΄κ° ES2020λ νμ μ€ν¬λ¦½νΈλΌλ μ무 λ¬Έμ κ° μκ³ , λͺ¨λ μμ€ν μΌλ‘ CommonJSλ₯Ό μ¬μ©νλ AMDλ₯Ό μ¬μ©νλ μ무 λ¬Έμ κ° μλ€. λ¬Όλ‘ μ΄ κΈ°λ₯μ SystemJSμ κΈ°λ³Έ κΈ°λ₯μ΄ μλλΌμ systemjs-babelμ΄λΌλ μ΅μ€ν μ μ μ¬μ©ν΄μΌ νμ§λ§, λ¬Έμ ν΄κ²° λ°©μ μμ²΄κ° μλΉν νλν κ²μ΄ μΈμμ μ΄λ€.
νμ§λ§ λ°νμμ λͺ¨λμ νΈλμ€νμΌλ§νλ€λ κ²μ λ¨μν νΈλμ€νμΌλ§λ§μ λ¬Έμ κ° μλλΌ λͺ¨λ κ°μ μμ‘΄κ΄κ³λ νμ ν΄μΌνκ³ , μ¬μ§μ΄ νμ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ κ²½μ°μλ μ μ νμ 체ν¬λ₯Ό κ±°μΉ μ»΄νμΌκΉμ§ ν΄μΌνκΈ° λλ¬Έμ, λΉμ°ν λΉλ νμμ μ΄λ° λ¬΄κ±°μ΄ μμ μ μνν΄λ²λ¦¬λ©΄ νΌν¬λ¨Όμ€κ° λ¨μ΄μ§ μ λ°μ μλ€.
2021λ νμ¬, λͺ¨λκ° μλ€μνΌ μ΄λ° λ¬΄κ±°μ΄ μμ λ€μ λͺ¨λ λΉλ νμμ μ§νν΄λ μ무 λ¬Έμ κ° μμΌλ, κ΅³μ΄ λ°νμμ μ΄λ° μ§μ λ²μ΄λ SystemJSλ νΉμν μν©μ΄ μλλ©΄ μ°μ΄μ§ μλ λΆμκΈ°μΈ κ² κ°λ€.
ES Module
import { add } from './utils/math';
export var add2 = add(2);
ESM(ES Module)
λ°©μμ ECMA μ¬λ¨μμ 곡μμΌλ‘ μ μν μλ°μ€ν¬λ¦½νΈ μνκ³μ λͺ¨λ μμ€ν
μ΄λ€.
κ·Έλ° μ΄μ λ‘ require
λ define
κ°μ λ³λμ ν¨μμ μμ‘΄νμ¬ λͺ¨λμ λΆλ¬μ€λ CommonJSλ AMDμ λ€λ₯΄κ² import
, export
λΌλ ν€μλλ₯Ό μ¬μ©νμ¬ λͺ¨λμ λΆλ¬μ€λ κ²μ λ³Ό μ μλ€.
2015λ
μ λ±μ₯ν ESMμ 2009λ
λΆν° μ¬μ©νλ CommonJSλ AMDμ λΉνλ©΄ νλ° μ£ΌμμΈ μ£Όμ μ, λͺ¨λμ use strict
λλ ν°λΈκ° λ°λμ ν¬ν¨λμ΄μΌ νλ€λκ°, this
κ° μ μ κ°μ²΄μΈ window
λ₯Ό λ°λΌλ³΄μ§ μλ λ±μ λ³κ²½ μ¬νμ΄ λ§μλ μ€νμ΄κΈ°λ νλ€.
κ·Έλμ μ΄λ° μ μ½μ΄ μλ CommonJSλ AMD μμ€ν μ μ¬μ©νλ μ΄ν리μΌμ΄μ λ€μ΄ μμ½κ² λ§μ΄κ·Έλ μ΄μ μ ν μ μλ μν©μ΄ μλμκ³ , κ·Έ μν©μ΄ μ§κΈκΉμ§λ μ΄μ΄μ Έμ€κ³ μλ€.
κ·Έλ° μ΄μ λ‘ μ€λ λ μλ λ€μ΄ν°λΈ μλ°μ€ν¬λ¦½νΈ νκ²½μμ ESMμ μ¬μ©νκΈ° μν΄μ script
νκ·Έμ type="module"
μμ±μ μΆκ°νκ±°λ, package.json
μ "type": "module"
μ΄λΌλ νλλ₯Ό μΆκ°ν΄μ€μΌ νλ λ± λ³λμ μμ
μ΄ νμν κ²μ΄λ€.
λ¬Όλ‘ μμ μ λΉνλ©΄ μ΅κ·Ό λ§μ λ²€λλ€μ΄ ESMμ μ§μνκ³ μμ§λ§, κ·Έλλ μμ§κΉμ§ ESMμ μμ νκ² μ¬μ©νκΈ° μν΄μλ Webpackμ΄λ Babelκ°μ λ²λ€λ¬μ νΈλμ€νμΌλ¬λ₯Ό μ‘°ν©νμ¬ λΉλ νμμ λͺ¨λ κ°μ μμ‘΄ κ΄κ³λ₯Ό νμ νκ³ λ°νμμ΄ μμλ€μ μ μλ ννλ‘ λ³νν΄μ£Όλ κ³Όμ μ΄ νμνκΈ° λλ¬Έμ, λͺ¨λμ μ¬μ©νλ νκ²½μ΄ μ΄λ€ νκ²½μΈμ§μ λ°λΌμ λλ‘λ μ¬μ©νκΈ° λ²κ±°λ‘μ΄ ν¬λ§·μ΄ λ μ μλ€λ κ²μ μΌλμ λμ΄μΌ νλ€.
λ€λ§ ESMμ μ΄λ° λ¨μ μ λͺ¨λ μΉμ΄λ¨Ήμ μ μμ μ λμ ν κ°μ§ μ₯μ μ κ°μ§κ³ μλλ°, λ°λ‘ WebpackμΌλ‘ λͺ¨λμ λ²λ€λ§ν λ νΈλ¦¬μμ΄νΉμ΄ μμνλ€λ κ²μ΄λ€.
Webpackμ ModuleConcatenationPluginμ λͺ¨λλ€μ νλμ ν΄λ‘μ λ‘ ν΅ν©νμ¬ λΈλΌμ°μ νκ²½μμ λ λμ νΌν¬λ¨Όμ€λ₯Ό λ§λ€μ΄λ΄λλ°, μ΄λ CommonJSμ ESM μ€ μ΄λ€ λͺ¨λ μμ€ν μ μ¬μ©νλμ λ°λΌ κ²°κ³Όλ¬Όμ΄ λ§μ΄ λ¬λΌμ§κ² λλ€.
// CommonJS
(() => {
"use strict";
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12);
var add2 = (0,_utils__WEBPACK_IMPORTED_MODULE_0__/* .add */ .DG)(2);
})();
Webpackμ ν΅ν΄ λ²λ€λ§ νμ λ CommonJS μμ€ν
μ μ¬μ©ν λͺ¨λμ __webpack_require__
λΌλ ν¨μλ₯Ό ν΅ν΄ λΆλ¬μμ§κ² λλλ°, λ¬Έμ λ μ΄κ² λͺ¨λ λ΄λΆμ μλ add
ν¨μλ§ λΆλ¬μ€λ κ²μ΄ μλλΌ μ 체 λͺ¨λμ λ€ λΆλ¬μ€λ μ½λλΌλ κ²μ΄λ€.
λ€μ λΌμΈμΈ (0,_utils__WEBPACK_IMPORTED_MODULE_0__/* .add */ .DG)
λ₯Ό 보면, λΆλ¬μ¨ λͺ¨λμ DG
λΌλ νλ‘νΌν°μ μ κ·Όνκ³ μλ κ²μ λ³Ό μ μλλ°, μ΄ DG
κ° λλ
νλ add
ν¨μμ μ΄λ¦μ΄λ€.
μ μ΄μ CommonJSλ exports
λΌλ μ μ κ°μ²΄μ νλ‘νΌν°μ κ°λ€μ ν λΉνλ λ°©μμ μ¬μ©νκΈ° λλ¬Έμ, βμ΄ λͺ¨λμμ AλΌλ ν¨μλ§ μ¬μ©νλ€βλΌλ κ²μ νμ
νκΈ°κ° μ½μ§κ° μμ κ²μ΄λ€.
νμ§λ§ ESM μμ€ν
μ μ¬μ©ν λͺ¨λμ κ°κ°μ export
ν€μλλ₯Ό μ¬μ©νμ¬ μνλ κ°μ λ°λ‘ λ΄λ³΄λΌ μ μκ³ , κ·Έλ‘ μΈν΄ μμΈν μμ‘΄ κ΄κ³λ₯Ό νμ
νκΈ°κ° νκ²° μμνλ€.
// ESM
/******/ (() => { // webpackBootstrap
/******/ "use strict";
// CONCATENATED MODULE: ./utils/math.js**
var add = (a) => (b) => a + b;
// CONCATENATED MODULE: ./index.js**
var add2 = add(2);
/******/ })();
Webpackμ ν΅ν΄ λ²λ€λ§ν ESM μμ€ν μ λͺ¨λμ 보면, μ μ΄μ λͺ¨λμ λΆλ¬μ€λ μ½λ μμ²΄κ° μκ³ μ¬μ§μ΄ λͺ¨λ λ΄λΆμ μλ ν¨μλ₯Ό μΈλΌμΈμΌλ‘ λ°μλ²λ Έλ€.
λ¬Όλ‘ νμκ° λΆλ¬μ¨ add
ν¨μλ λ§€μ° μμ ν¨μλΌ μ΄λ° μμΌλ‘ ννλ μ μλ κ²μ΄κΈ°λ νμ§λ§, μ€μν μ μ λͺ¨λ λ΄λΆμ μλ βνΉμ ν¨μβλ§ κ°μ Έμλ€λ κ²μ΄λ€.
μμ μ΄μΌκΈ° νλ―μ΄ ESMμ import
, export
ν€μλλ₯Ό ν΅ν μμΈ μμ‘΄ κ΄κ³ νμ
μ΄ μ¬μ΄ νΈμ΄κΈ° λλ¬Έμ λΉλ νμμ ν¨μ¨μ μΌλ‘ μ¬μ©νλ μ½λμ μ¬μ©νμ§ μλ μ½λλ₯Ό λ°λΌλ΄λ κ²μ΄ κ°λ₯νλ€.
μ΄λ κ² νΈλ¦¬μμ΄νΉμ΄ μ½λ€λ κ°λ ₯ν μ΄μ λλ¬Έμ Lodashλ₯Ό μ μΈν μ λͺ
ν λΌμ΄λΈλ¬λ¦¬λ€μ λλΆλΆ ESM λ°©μμ 곡μμ μΌλ‘ μ§μνκ³ μλ€.
moduleResolution
κ° | μ€λͺ |
---|---|
Node |
Node μ λ΅μ μ¬μ©νμ¬ λͺ¨λμ νμνλ€. module μ΅μ
μ΄ CommonJSμΌ λ Default. |
Classic |
Classic μ λ΅μ μ¬μ©νμ¬ λͺ¨λμ νμνλ€. module μ΅μ
μ΄ CommonJSκ° μλ λ Default. |
moduleResolution
μ΅μ
μ νμ
μ€ν¬λ¦½νΈκ° λͺ¨λμ λΆλ¬μ¬ λ μ΄ λͺ¨λμ΄ μ νν 무μμ μ°Έμ‘°νλ μ§λ₯Ό νμΈνλ νλ‘μΈμ€λ₯Ό λ€λ£¨λ μ΅μ
μ΄λ€. μ΄κ±΄ κ·Έλ₯ λ§λ‘ μ€λͺ
νλ©΄ λ무 μ΄λ €μ°λ μ§μ μ½λλ₯Ό 보면μ μμ보λλ‘ νμ.
μ°μ νμ μ€ν¬λ¦½νΈλ ν¬κ² μλ κ²½λ‘μ μ λ κ²½λ‘, 2κ°μ§ λ°©λ²μ μ¬μ©νμ¬ λͺ¨λμ κ²½λ‘λ₯Ό μ μνλ λ°©λ²μ μ¬μ©νκ³ μλ€.
import { add } from './utils/math'; // μλ κ²½λ‘
import { debounce } from 'lodash'; // μ λ κ²½λ‘
μλ κ²½λ‘μ κ²½μ°μλ νμ¬ μμΉλ₯Ό λνλ΄λ .
μ΄λ μμ λλ ν 리λ₯Ό λνλ΄λ ..
λ±μ μλ³μλ₯Ό μ¬μ©νμ¬ νμμ μν κΈ°μ μ μ§μ ν¨μΌλ‘μ¨ μ νν λͺ¨λμ μμΉλ₯Ό λνλΌ μ μλ λ°λ©΄, μ λ κ²½λ‘μ κ²½μ°μλ λ¨μν λͺ¨λμ μ΄λ¦λ§ μ κ³ μκΈ° λλ¬Έμ μ νν λͺ¨λμ μμΉλ₯Ό μ°ΎκΈ° μν΄μ νΉμ ν κ·μΉμ κΈ°λ°μΌλ‘ λͺ¨λμ μ°Ύμλμλ μ¬νμ λ λμΌ νλ€.
λν μλ κ²½λ‘, μ λ κ²½λ‘ λ λ°©λ² λͺ¨λ λͺ¨λμ νμ₯μκΉμ§λ μ κ³ μμ§ μκΈ° λλ¬Έμ, μ΄ λͺ¨λμ΄ math.ts
, math.d.ts
λ± μ΄λ€ νμ₯μλ₯Ό κ°μ§κ³ μλ νμΌμΈμ§λ μμλ΄μ΄μΌ νλ€.
κ·Έλ κΈ° λλ¬Έμ νμ
μ€ν¬λ¦½νΈλ λͺ¨λμ μ νν μμΉλ₯Ό μ°Ύμλ΄λ μ λ΅μ μΈμμΌ νλλ°, μ΄λ moduleResolution
μ΅μ
μΌλ‘ Classicκ³Ό Node μ€ μ΄λ€ μ λ΅μ μ¬μ©ν κ²μΈμ§λ₯Ό μ νν μ μλ κ²μ΄λ€.
μ¬μ€ λ μ λ΅ λͺ¨λ λͺ¨λμ μμΉλ₯Ό μ°Ύλ κΈ°λ³Έμ μΈ λ°©λ² μ체λ ν¬κ² λ€λ₯΄μ§ μλ€.
λ§μ½ import { add } from './math'
μ κ°μ΄ μλ κ²½λ‘λ₯Ό μ¬μ©ν λͺ¨λμ μ°Ύμ λλ μ°Ύμ λ³Ό λλ ν λ¦¬κ° λͺ
ννκΈ° λλ¬Έμ ν΄λΉ λλ ν 리 λ΄μμλ§ νμΌμ μ°Ύμλ³΄κ³ , import { add } from 'math'
μ κ°μ΄ μ λ κ²½λ‘λ₯Ό μ¬μ©ν λͺ¨λμ μ°Ύμ λλ μ°ΎμμΌ ν λλ ν λ¦¬κ° λͺ
ννμ§ μμΌλ, μ°μ ν΄λΉ λͺ¨λμ λΆλ¬μ¨ νμΌμ΄ μμΉν λλ ν 리λΆν° λ€μ Έλ³΄κ³ , μλ€λ©΄ ν λ¨κ³ μμ λλ ν 리λ‘, κ·Έλλ μλ€λ©΄ λ ν λ¨κ³ μμ λλ ν λ¦¬λ‘ κ±°μ¬λ¬ μ¬λΌκ°λ λ°©μμΌλ‘ λͺ¨λμ μ°Ύλλ€.
μ΄λ μ°Ύκ³ μ νλ νμΌμ νμ₯μκ° λ¬΄μμΈμ§, κ·Έλ¦¬κ³ λͺ¨λμ μ°Ύμ λ μ΄λλ₯Ό λ¨Όμ μ°Ύμ보λμ§μ λ°λΌμ Classic μ λ΅κ³Ό Node μ λ΅ κ°μ μ°¨μ΄κ° λ°μνλ€.
Classic
Classic
μ λ΅μ μ¬μ€ μ νμ
μ€ν¬λ¦½νΈμ κΈ°λ³Έ λͺ¨λ νμ μ λ΅μΌλ‘, μμ λΆν° μ¬μ©νλ μ λ΅μ΄κΈ°λ ν΄μ νμ λ²μ μ νμ
μ€ν¬λ¦½νΈκ³Όμ νΈνμ±μ λ§μΆ λμλ μ¬μ©νλ€.
Classic μ λ΅μ μλ κ²½λ‘λ₯Ό μ¬μ©νμ¬ λΆλ¬μ¨ λͺ¨λμ μ°Ύμ λ, ν΄λΉ λͺ¨λμ λΆλ¬μ€λ λͺ¨λμ μμΉλ₯Ό κΈ°μ μΌλ‘ *.ts
, *.d.ts
μ μμλ‘ νμμ μμνλ€.
// /root/src/index.ts
import { add } from './math';
/root/src/math.ts
/root/src/math.d.ts
μμ μ΄μΌκΈ° νλ―μ΄ μλ κ²½λ‘λ₯Ό μ¬μ©ν κ²½μ°μλ μ°Ύμλ΄μΌ νλ λλ ν 리μ μμΉκ° λͺ ννκΈ° λλ¬Έμ νλ³΄κ° λλ νμ₯μλ§ νμμ μ§νν ν, ν΄λΉ λͺ¨λμ΄ μλ κ²½μ° νμμ μ’ λ£νκ² λλ€.
λ°λ©΄ import { add } from 'math'
μ κ°μ΄ μ λ κ²½λ‘λ₯Ό μ¬μ©ν λͺ¨λμ κ²½μ°μλ νμ¬ λͺ¨λμ λΆλ¬μ¨ κ²½λ‘λΆν° μμν΄μ ν λ¨κ³μ© λΆλͺ¨ λλ ν λ¦¬λ‘ κ±°μ¬λ¬ μ¬λΌκ°λ©΄μ νμμ μ§ννκ² λλ€.
// /root/src/index.ts
import { add } from 'math';
/root/src/math.ts
/root/src/math.d.ts
/root/math.ts
/root/math.d.ts
/math.ts
μ λ κ²½λ‘λ₯Ό μ¬μ©ν κ²½μ°, κ°μ₯ μ²μμΌλ‘ λͺ¨λμ λΆλ¬μ¨ νμΌμ΄ μμΉν /root/src
μμλΆν° νμμ μμνλ€. μ΄ν μ΄ λλ ν 리μμ λͺ¨λμ μ°Ύμ§ λͺ» νλ©΄ ν λ¨κ³ μ© κ±°μ¬λ¬ μ¬λΌκ°λ©° λ€μ νμμ μ§ννκ³ , 루νΈκΉμ§ νμνλλ°λ ν΄λΉ λͺ¨λμ΄ μλ κ²½μ° νμμ μ’
λ£νκ² λλ€.
Node
Node
μ λ΅μ μ΄λ¦ κ·Έλλ‘ NodeJSκ° λͺ¨λμ μ°Ύλ λ°©μμ κ·Έλλ‘ λͺ¨λ°©νλ μ λ΅μ΄λ©°, Node μ λ΅μ Classic μ λ΅κ³Ό λ€λ₯΄κ² *.ts
λ *.d.ts
νμ₯μλ₯Ό νμνλ κ²μ λμ΄μμ μ‘°κΈ λ λ€μν ννμ λͺ¨λκΉμ§ νμμ νλ€.
μλ κ²½λ‘λ₯Ό μ¬μ©ν κ²½μ°λ Classic μ λ΅κ³Ό λΉμ·νκ², μ§μ λ λλ ν 리 λ΄λΆμμ λ€μκ³Ό κ°μ μμλ‘ νμΌμ νμνκ² λλ€.
// /root/src/index.ts
import { add } from './math';
/root/src/math.ts
/root/src/math.tsx
/root/src/math.d.ts
/root/src/math/package.json
(types
νλλ₯Ό μ¬μ©νλ κ²½μ°μ νν΄)root/src/math/index.ts
root/src/math/index.tsx
root/src/math/index.d.ts
λκ° λ§μ΄ μΆκ°λ κ² κ°μ§λ§, κΈ°λ³Έμ μΌλ‘λ Classic μ λ΅κ³Ό λ§μ°¬κ°μ§λ‘ μ§μ λ λλ ν 리 λ΄λΆμ νμΌμ μ°Ύλ, *.tsx
νμ₯μλ₯Ό κ°μ§ λͺ¨λκ³Ό package.json
λ΄λΆμ types
μμ±, κ·Έλ¦¬κ³ λͺ¨λ μ΄λ¦κ³Ό λμΌν λλ ν 리μ index.*
νμΌμ μΆκ°λ‘ νμν λΏμ΄λ€.
μ΄μ²λΌ μλ κ²½λ‘λ₯Ό μ¬μ©ν λͺ¨λμ νμν λλ Node μ λ΅κ³Ό Classic μ λ΅ λͺ¨λ λΉμ·ν μμλ‘ λλ ν 리 νΈλ¦¬λ₯Ό νμνμ§λ§, μ λ κ²½λ‘λ‘ μ§μ λ λͺ¨λμ μ°Ύμ λλ μ°¨μ΄κ° 컀μ§λ€.
μλνλ©΄ Node μ λ΅μ Classicκ³Ό λ€λ₯΄κ², μ λ κ²½λ‘λ₯Ό μ¬μ©ν λͺ¨λμ μ°Ύμ λλ node_modules
λλ ν 리λ₯Ό νμνκΈ° λλ¬Έμ΄λ€.
// /root/src/index.ts
import { add } from 'math';
/root/src/node_modules/math.ts
/root/src/node_modules/math.tsx
/root/src/node_modules/math.d.ts
/root/src/node_modules/math/package.json
(types
νλλ₯Ό μ¬μ©νλ κ²½μ°μ νν΄)/root/src/node_modules/@types/math.d.ts
/root/src/node_modules/math/index.ts
/root/src/node_modules/math/index.tsx
/root/src/node_modules/math/index.d.ts
/root/node_modules/math.ts
(λΆλͺ¨ λλ ν λ¦¬λ‘ μ΄λ ν λ°λ³΅)β¦
Node μ λ΅μ μ¬μ©νκ² λλ©΄ κ°μ₯ λ¨Όμ math
λͺ¨λμ νΈμΆν νμΌμ΄ μμΉν /root/src
λλ ν 리μ μλ node_modules
λλ ν 리μμ νμμ μ§ννλ€.
μ΄λ μλ κ²½λ‘μμμ λμΌνκ² *.ts
, *.tsx
, *.d.ts
νμΌκ³Ό package.json
μ types
νλλ₯Ό μ°Ύμ보며, κ·Έ μ΄νμλ @types
λλ ν 리μ λͺ¨λ μ΄λ¦κ³Ό λμΌν μ΄λ¦μ κ°μ§ λλ ν 리 λ°μ μλ index
νμΌμ νμνλ€.
μ΄λ κ² ν λ²μ νμ κ³Όμ μ΄ λλλ μνλ λͺ¨λμ μ°Ύμ§ λͺ»νλ€λ©΄, λΆλͺ¨ λλ ν λ¦¬λ‘ μ΄λν ν μ΄ κ³Όμ μ λ€μ λ°λ³΅νλ€. κ·Έ ν 루νΈμ λλ¬νμ¬ λ‘컬 λ¨Έμ μ μ μ μ€μΉλ λͺ¨λμ΄ μλμ§κΉμ§ νμνλλ°λ ν΄λΉ λͺ¨λμ΄ μλ€λ©΄ νμμ μ’ λ£νκ² λλ€.
μ΄λ¬ν νμ κ³Όμ μ NodeJSκ° λͺ¨λμ μ°Ύλ κ³Όμ κ³Ό λμΌνμ§λ μμ§λ§, λ§€μ° λΉμ·νλ€. NodeJSλ λ¨Όμ λͺ¨λκ³Ό λμΌν μ΄λ¦μ νμΌμ μ°Ύμ ν, package.json
μ main
νλμ μ ν κ²½λ‘μ νμΌμ μ°Ύμ λ³΄κ³ , λ§μ§λ§μΌλ‘ λͺ¨λκ³Ό λμΌν λλ ν 리 λ°μ μλ index
νμΌμ νμνλλ°, νμ
μ€ν¬λ¦½νΈμ Node μ λ΅μ΄ λ°λ‘ μ΄ νμ κ³Όμ μ λͺ¨λ°©ν κ²μ΄κΈ° λλ¬Έμ΄λ€.
νμ μ€ν¬λ¦½νΈ 곡νμλ NodeJSκ° μ¬μ©νλ λ°©μκ³Ό λΉκ΅ν΄μ ν¬κ² 볡μ‘νμ§ μμΌλ κ±±μ λ§λΌκ³ νμ§λ§, μ¬μ€ μ μ΄μ NodeJSκ° μ¬μ©νκ³ μλ ν¨ν€μ§ νμ λ°©μ μμ²΄κ° λΉν¨μ¨μ μ΄κΈ°λ νλ€. κ·Έλ° μ΄μ λ‘ νμ μ€ν¬λ¦½νΈ 4.0 λ²μ λΆν°λ λΆλ¬μ€μ§ μμ λͺ¨λμ λν΄μλ λ μ΄μ μμ κ°μ κ³Όμ μ ν΅ν΄ νμ μ 보λ₯Ό μ°Ύμ§ μλλ‘ μ λ°μ΄νΈκ° λμλ€.
noResolve
κ° | μ€λͺ |
---|---|
false (default) |
μ΄ν리μΌμ΄μ μ ν¬ν¨λ λͺ¨λ λͺ¨λμ ν΄μνλ€. |
true |
λͺ μμ μΌλ‘ μ΄ν리μΌμ΄μ μ ν¬ν¨νκΈ°λ‘ν λͺ¨λλ§ ν΄μνλ€. |
κΈ°λ³Έμ μΌλ‘ νμ
μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ μ΄ν리μΌμ΄μ
μ ν¬ν¨λ λͺ¨λ λͺ¨λμ μ»΄νμΌνλ €κ³ μλνλ€. μ¦, tsconfig 루νΈμ includeλ files νλμ ν¬ν¨νμ§ μμ νμΌμ΄λΌκ³ ν΄λ, μ΄ν리μΌμ΄μ
λ΄μμ μ§μ import
λ¬Έμ΄λ /// <reference path="..." />
κ°μ λλ ν°λΈλ₯Ό μ¬μ©νμ¬ λͺ¨λμ λΆλ¬μλ€λ©΄, κ·Έ λͺ¨λ λν μ»΄νμΌ λμμ΄λΌλ κ²μ΄λ€.
μ΄μ°λ³΄λ©΄ μμμ μΌλ‘ λͺ¨λμ μ»΄νμΌ λμμ ν¬ν¨μν¨λ€λ μ΄μΌκΈ°μΈλ°, μ΄λ noResolve
μ΅μ
μ true
λ‘ μ€μ νλ©΄ μ΄λ° μμμ μΈ λͺ¨λ μ»΄νμΌμ λ§μ μ μλ€.
// tsconfig.json
{
"include": ["src/index.ts"],
"compilerOptions": {
"outDir": "./dist",
"noResolve": true
}
}
// src/index.ts
import { add } from './utils/math';
export const add2 = add(2);
μ μμμ include
νλμλ src/index.ts
λ§ ν¬ν¨λμ΄ μκ³ , utils/math
λͺ¨λμ ν¬ν¨λμ΄μμ§ μλ€.
μ΄λ° κ²½μ°μΌ λ noResolve
μ΅μ
μ κ°μ΄ false
λΌλ©΄ index.ts
μμ μ¬μ©νλ utils/math
λͺ¨λλ μ무 λ¬Έμ μμ΄ μ»΄νμΌλμ§λ§, true
μΈ κ²½μ°μλ ν΄λΉ λͺ¨λμ μ°Ύμ μ μλ€λ μλ¬κ° λ°μνκ² λλ€.
src/index.ts:1:21 - error TS2307: Cannot find module './utils/math' or its corresponding type declarations.
1 import { add } from './utils/math';
μ¦, λ°λμ λͺ
μμ μΌλ‘ include
λ files
νλμ μ μΈλ λͺ¨λλ€λ§ μ»΄νμΌμ νκ³ μλ κ²μ΄λ€. μ΄μ λ§μ°¬κ°μ§ μ΄μ λ‘ /// <reference path="..." />
κ°μ΄ λλ ν°λΈλ₯Ό μ¬μ©νμ¬ λΆλ¬μ¨ λͺ¨λλ€λ ν΄λΉ νλμ ν¬ν¨λμ΄ μμ§ μκΈ° λλ¬Έμ μ»΄νμΌ λμμμ μ μΈλλ€.
noResolve
μ΅μ
μ κ°λ°μκ° νμ
μ€ν¬λ¦½νΈμ μ»΄νμΌ λμμ λͺ
μμ μΌλ‘ μ μΈνκ² λ§λ¦μΌλ‘μ¨ μμν λͺ¨λ κ΄λ¦¬λ₯Ό λμμ£ΌκΈ°λ νμ§λ§, λλ ν°λΈλ₯Ό μ¬μ©νμ¬ λΆλ¬μ¨ λͺ¨λκΉμ§ μ»΄νμΌ λμμμ μ μΈνλ€λ νΉμ± λλ¬Έμ λλ ν°λΈλ₯Ό μ¬μ©νμ¬ νμ
μ μ νμΌμ λΆλ¬μ€λ NextJS κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νκ³ μλ μν©μμλ κ·Έλ₯ κΈ°λ³Έ κ°μΈ false
λ‘ μ¬μ©νλ κ²μ΄ μ μ 건κ°μ μ΄λ‘λ€.
resolveJsonModule
κ° | μ€λͺ |
---|---|
false (default) |
*.json νμ₯μλ‘ λλλ λͺ¨λμ importλ₯Ό νμ©νμ§ μλλ€. |
true |
*.json νμ₯μλ‘ λλλ λͺ¨λμ importλ₯Ό νμ©νλ€. |
resolveJsonModule
μ΅μ
μ μ΄λ¦ κ·Έλλ‘ JSON νμΌλ‘ ꡬνλ λͺ¨λμ λμ΄λ€ μΈ μ μκ² νμ©ν κ²μΈμ§μ λν μ¬λΆλ₯Ό κ²°μ νλ€.
λ§μ½ ν΄λΉ μ΅μ
μ΄ false
λΌλ©΄, JSON λͺ¨λμ κ°μ Έμμ λ νμ
μ€ν¬λ¦½νΈλ ν΄λΉ λͺ¨λμ μ°Ύμ μ μλ€λ μλ¬λ₯Ό λ°μμν¨λ€.
// me.json
{
"name": "evan-moon",
"age": 12,
"role": "Frontend Engineer"
}
import me from './me.json';
// Cannot find module './settings.json'. Consider using '--resolveJsonModule' to import module with '.json' extension.
resolveJsonModule
μ΅μ
μ μΌκ² λλ©΄ μΌλ°μ μΈ νμ
μ€ν¬λ¦½νΈ λͺ¨λκ³Ό λμΌνκ² JSON λͺ¨λμ κ°μ Έμμ μ¬μ©ν μ μκ² λκ³ , μ¬μ§μ΄ ν΄λΉ νμΌμ λΆμνμ¬ μλμΌλ‘ νμ
μΆλ‘ κΉμ§ ν΄μ€λ€.
νμ§λ§ μ΄ κ²½μ° λΉμ°ν Enumμ΄λ Union Typeμ μ¬μ©ν μΆλ‘ μ λΆκ°λ₯νκΈ° λλ¬Έμ λͺ¨λ κ°λ€μ string
μ΄λ number
λ±μ μμ νμ
μΌλ‘ μΆλ‘ λλ€. κ·Έλ¬λ λ§μ½ κ°λ ₯ν νμ
μ μΈμ κ°μ ν΄μΌνλ κ²½μ°λΌλ©΄ JSON λͺ¨λμ΄ μλλΌ νμ
μ€ν¬λ¦½νΈ λͺ¨λμ μ¬μ©νμ¬ λͺ¨λΈμ μ μΈν΄μ£Όλ κ²μ΄ μ’λ€.
rootDir
rootDir
μ΅μ
μ λͺ¨λμ μ»΄νμΌ ν μ΄ν μ΄λ€ λλ ν 리λ₯Ό 루νΈλ‘ νμ¬ νμ¬ κ΅¬μ‘°λ₯Ό μ μ§ν κ² μΈμ§λ₯Ό κ²°μ νλ€.
κΈ°λ³Έμ μΌλ‘ νμ
μ€ν¬λ¦½νΈλ μ»΄νμΌμ μνν λ μ
λ ₯λ λλ ν 리μ ꡬ쑰λ₯Ό κ·Έλλ‘ μ μ§νλ©° μ»΄νμΌλ νμΌλ€μ μΆλ ₯νλλ°, μ΄λ rootDir
μ΅μ
μ μ¬μ©νμ¬ μ΄λ€ λλ ν 리λ₯Ό 루νΈλ‘ μ€μ ν κ²μΈμ§λ₯Ό μ νλ κ²μ΄λ€.
λ§μ½ μ΄ μ΅μ μ λ°λ‘ μ€μ νμ§ μλλ€λ©΄, νμ μ€ν¬λ¦½νΈλ μλμΌλ‘ ν΄λΉ λͺ¨λμ μνΈλ¦¬ ν¬μΈνΈκ° λλ νμΌμ μ°Ύκ³ , ν΄λΉ νμΌμ΄ μμΉν λλ ν 리λ₯Ό 루νΈλ‘ μ€μ νμ¬ μΆλ ₯ λλ ν 리 ꡬ쑰λ₯Ό μ€μ νκ² λλ€.
myProject
βββ src
β βββ index.ts
β βββ utils
β βββ math.ts
βββ tsconfig.json
// tsconfig.json
{
"compilerOptions": {
"outDir": "./dist"
}
}
μμ κ°μ ꡬ쑰μ νλ‘μ νΈκ° μλ€κ³ μκ°ν΄λ³΄μ. rootDir
μ΅μ
μ΄ μ£Όμ΄μ§μ§ μμμ λμ νμ
μ€ν¬λ¦½νΈλ μ΄ μ΄ν리μΌμ΄μ
μ μνΈλ¦¬ ν¬μΈνΈμΈ src/index.ts
λ₯Ό μ°Ύμλ΄κ³ , μ΄ νμΌμ μμΉμΈ src
λ₯Ό 루νΈλ‘ μΈμνκ² λλ€.
κ·Έλ κΈ° λλ¬Έμ μΆλ ₯ λλ ν 리λ 루νΈλ₯Ό src
λλ ν λ¦¬λ‘ νλ λ€μκ³Ό κ°μ ꡬ쑰λ₯Ό κ°μ§κ² λλ€.
dist
βββ index.ts
βββ utils
βββ math.ts
κ·Έλ¬λ λ§μ½ μ΄ μνμμ rootDir
μ΅μ
μ νμ¬ κ²½λ‘λ₯Ό μλ―Ένλ .
λ‘ μ€μ νκ² λλ©΄, μΆλ ₯ λλ ν 리μ κ΅¬μ‘°κ° λ³κ²½λκ² λλ€.
// tsconfig.json
{
"compilerOptions": {
"outDir": "./dist",
"rootDir": "."
}
}
dist
βββ src
βββ index.ts
βββ utils
βββ math.ts
νμκ° λ£¨νΈ λλ ν 리λ₯Ό νμ¬ tsconfig.json
μ΄ μμΉν myProject
λλ ν λ¦¬λ‘ λ³κ²½νκΈ° λλ¬Έμ, μΆλ ₯ λλ ν λ¦¬μΈ dist
λ κΈ°μ‘΄ νλ‘μ νΈ λλ ν 리μ μμ ν λμΌν ꡬ쑰λ₯Ό κ°μ§κ² λκ³ , μ΄λ‘ μΈν΄ λλ ν 리 λ΄λΆμ src
λλ ν 리κΉμ§ ν¨κ» μμ±λ ννλ‘ μΆλ ₯λκ² λλ€.
μ΄μ°λ³΄λ©΄ κ΅μ₯ν κ°λ¨ν λμμ΄μ§λ§, μ΄ μ΅μ
μ μ¬μ©ν λλ ν κ°μ§ μ£Όμν΄μΌ ν μ μ΄ μλ€. λ°λ‘ rootDir
μ΅μ
μ μ»΄νμΌ λμμ μλ¬΄λ° μν₯μ λΌμΉμ§ μλλ€λ κ²μ΄λ€.
μ¦, λ§μ½ rootDir
μ΅μ
μ μ¬μ©νλ€λ©΄ λͺ¨λ μ»΄νμΌ λμ νμΌμ ν΄λΉ λλ ν 리 λ°μ μμΉν΄μΌ νλ€λ κ²μ΄λ€.
myProject
βββ src
β βββ index.ts
β βββ utils
β βββ math.ts
βββ foo.ts
βββ tsconfig.json
{
"compilerOptions": {
"outDir": "./dist",
"rootDir": "./src",
"include": "*"
}
}
μ μ€μ μ μ΄ν΄λ³΄λ©΄ λ£¨νΈ λλ ν λ¦¬λ‘ src
λλ ν 리λ₯Ό μ€μ νκ³ , include
μ΅μ
μ μ¬μ©νμ¬ λͺ¨λ νμΌμ μ»΄νμΌ ν κ²μ΄λΌκ³ μ€μ ν΄μ£Όμλ€.
λ¬Έμ λ μ΄ βλͺ¨λ νμΌβμ λμ μ€ νλμΈ foo.ts
λ src
λλ ν 리μ λ€μ΄κ° μμ§ μμ λ
μμ΄λΌλ κ²μ΄λ€. μ¦, μ€μ μ λͺ¨μμ΄ λ°μν κ²μ΄λ€.
μ΄λ κ² rootDir
μ΅μ
μΌλ‘ λ£¨νΈ λλ ν 리λ₯Ό μ νλ€κ³ ν΄λ, νμ
μ€ν¬λ¦½νΈλ μλμΌλ‘ foo.ts
λ₯Ό μ»΄νμΌ λμμ ν¬ν¨μν€μ§ μκ³ , μ΄λ° μλ¬λ₯Ό λ°μμν¨λ€.
File β/Users/john/myProject/foo.tsβ is not under βrootDirβ β/Users/john/myProejct/srcβ. βrootDirβ is expected to contain all source files.
μ΄ μλ¬λ₯Ό 보면 μ μ μλ―μ΄, rootDir
μ΅μ
μ μ¬μ©νμ¬ λ£¨νΈ λλ ν 리λ₯Ό μ€μ νλ€λ©΄ λ°λμ λͺ¨λ μμ€ νμΌλ€μ λ£¨νΈ λλ ν 리 λ΄λΆμ λ€μ΄μμ΄μΌ νλ©°, λ§μ½ include
λ±μ μ¬μ©νμ¬ λ£¨νΈ λλ ν 리 λ°μ μλ νμΌμ μ»΄νμΌ λμμΌλ‘ μ§μ νλ€κ³ ν΄λ μλμΌλ‘ μ»΄νμΌ ν΄μ£Όκ±°λ νμ§ μλλ€.
rootDirs
rootDirs
μ΅μ
μ μΌμ’
μ κ°μ 루νΈλ₯Ό λ§λ€μ΄ μ€ μ μλ μ΅μ
μ΄λ€. μ΄ μ΅μ
μ λ§λ‘ μ€λͺ
νκΈ° λ³΄λ€ μ½λλ‘ λ³΄λ κ²μ΄ ν¨μ¬ μ΄ν΄κ° νΈνλ, λ°λ‘ μμλ₯Ό 보λλ‘ νμ.
myProject
βββ core
β βββ index.ts
βββ utils
β βββ math.ts
βββ tsconfig.json
λ§μ½ μ΄λ° ꡬ쑰μ μ΄ν리μΌμ΄μ
μ΄ μλ€κ³ μκ°ν΄λ³΄μ. λ§μ½ core/index.ts
μμ utils/math.ts
λͺ¨λμ κ°μ Έμ€κ³ μΆλ€λ©΄ μ΄λ»κ² ν΄μΌν κΉ?
λ§μ½ paths
μ΅μ
μ μ¬μ©νμ§ μμλ€λ©΄, μλ κ²½λ‘λ₯Ό μ¬μ©νμ¬ ν λ¨κ³ μμ λλ ν λ¦¬λ‘ κ±°μ¬λ¬ μ¬λΌκ°μ ν΄λΉ λͺ¨λμ μ κ·Όν κ²μ΄λ€.
// core/index.ts
import math from '../utils/math';
rootDirs
μ΅μ
μ μ΄λ° μν©μΌ λ κ°μμ 루νΈλ₯Ό λ§λ€μ΄μ, core
λλ ν 리μ utils
λλ ν 리 λ΄λΆμ μλ λͺ¨λλ€μ΄ λ§μΉ βνλμ λλ ν 리β λ΄λΆμ μλ κ²μ²λΌ μ¬μ©ν μ μλλ‘ λ§λ€μ΄μ€λ€.
{
"compilerOptions": {
"outDir": "./dist",
"rootDirs": ["core", "utils"]
}
}
// core/index.ts
import math from './utils/math'; // λ§μΉ κ°μ λλ ν 리μ μλ κ²μ²λΌ μ¬μ©νλ€
λ§μ½ core/components/Foo/index.tsx
μ κ°μ΄ λλ ν 리 κΉμ΄κ° κΉλ€κ³ ν΄λ rootDirs
μ ν΄λΉ λλ ν 리λ₯Ό λ±λ‘νκ² λλ©΄, rootDirs
μ λ±λ‘λ λλ ν 리 λΌλ¦¬λ νμ κ°μ λλ ν 리μ μλ κ²μ²λΌ λͺ¨λμ λΆλ¬μ¬ μ μλ€.
κ·Έλ¦¬κ³ rootDirs
μ΅μ
μ μΌμ’
μ βκ°μ λλ ν 리βλ₯Ό λ§λ€μ΄μ μ΄λ° κΈ°λ₯μ ꡬννλ λ°©μμ μ¬μ©νκΈ° λλ¬Έμ, μ»΄νμΌν μ΄νμ μΆλ ₯ λλ ν 리 ꡬ쑰μλ μ ν μν₯μ μ£Όμ§ μλλ€. λ§ κ·Έλλ‘ κ°μμ΄λ€.
μ΄μ²λΌ rootDirs
μ΅μ
μ λλ ν 리μ κΉμ΄κ° κΉμ μν©μλ κ°λ¨νκ² μλ κ²½λ‘λ₯Ό μ¬μ©ν μ μλλ‘ λ§λ€μ΄ μ£ΌκΈ° λλ¬Έμ μ΄μ° 보면 νΈνλ€κ³ μκ°ν μλ μλ€.
νμ§λ§ μ΄λ° μ€μ μ μ¬μ©νκ² λλ©΄ μ€μ λλ ν 리 ꡬ쑰μ μ½λμμ λͺ¨λμ μ κ·ΌνκΈ° μν΄ μ¬μ©νλ κ²½λ‘ κ°μ κ΄΄λ¦¬κ° λ°μνκ² λ¨μΌλ‘μ¨ μ§κ΄μ μΈ μ΄ν΄κ° μ΄λ €μ΄ μ½λκ° λ μλ μμΌλ©°, μ¬μ§μ΄ μ΄ κ΄΄λ¦¬μ μμΈμ νμΈνκΈ° μν΄μλ tsconfig.json
μ κΉλ΄μΌ νλ μ¬ν μν©μ΄ λ°μν μλ μλ€λ μ μ κΌ μΌλμ λλλ‘ νμ.
typeRoots
κΈ°λ³Έμ μΌλ‘ νμ
μ€ν¬λ¦½νΈλ @types
ν¨ν€μ§ λλ ν 리 λ°μ μλ νμΌλ€μ μλμΌλ‘ μ»΄νμΌ λμμΌλ‘ ν¬ν¨νλ€. μ΄λ μμ μ€λͺ
νλ resolve
μ λ΅μ λ°λΌ ./node_modules/@types
, ../node_modules/@types
λ± λλ ν 리λ₯Ό κ±°μ¬λ¬ μ¬λΌκ°λ©΄μ node_modules
λ΄λΆμ μλ @types
λλ ν 리λ₯Ό νμνλ κ²μ΄λ€.
νμ§λ§ typeRoots
μ΅μ
μ μ¬μ©νλ©΄ νμ
μ€ν¬λ¦½νΈκ° μ°Ύμ ν€λ§€λ νμ
νμΌλ€μ΄ νΉμ ν κ³³μ μλ€κ³ μ§μ ν μ μλ€.
{
"compilerOptions": {
"typeRoots": ["./typings", "./node_modules/@types"]
}
}
typeRoots
μ΅μ
μ μ μ©νλ κ²½λ‘λ tsconfig.json
κΈ°μ€μ μλ κ²½λ‘μ΄λ€. λν μ μμμμλ ./node_modules/@types
λλ ν 리λ₯Ό μ΅μ
μ ν¬ν¨μμΌ°μ§λ§, μ¬μ€ μμ΄λ μ무 λ¬Έμ μλ€.
μ΄λ κ² typeRoots
λ₯Ό μ§μ ν κ²½μ°, νμ
μ€ν¬λ¦½νΈλ κΈ°μ‘΄μ λͺ¨λ νμ μ λ΅μ λ²λ¦¬κ³ λ°°μ΄μ λ€μ΄μλ κ²½λ‘μμλ§ νμ
μ μΈ λͺ¨λλ€μ μ°ΎκΈ° λλ¬Έμ, κ³μ λΆλͺ¨ λλ ν λ¦¬λ‘ κ±°μ¬λ¬ μ¬λΌκ°λ©° νμ
μ μΈ λͺ¨λμ μ°Ύλ κΈ°μ‘΄μ λͺ¨λ νμ μ λ΅λ³΄λ€ ν¨μ¨μ μΈ νμ μ λ΅μ κ°μ Έκ° μ μλ€.
types
μμ μ€λͺ
νλ―μ΄ νμ
μ€ν¬λ¦½νΈλ @types
ν¨ν€μ§ λλ ν 리 λ°μ μλ λͺ¨λ νμΌλ€μ μλμΌλ‘ μ»΄νμΌ λμμΌλ‘ ν¬ν¨νκ³ , μ΄ κ³Όμ μμ νμ
μ μΈμ μ μ μ€μ½νμ λΏλ €λ²λ¦°λ€.
μ΄ νμ
μ μΈμ΄ μ μ μ€μ½νμ μ‘΄μ¬νκΈ° λλ¬Έμ μ°λ¦¬κ° @types/node
κ°μ λͺ¨λ λ΄λΆμ ν¬ν¨λ process
κ°μ²΄ κ°μ λ
μλ€μ λ³λμ νμ
μ μΈ μμ΄λ μ¬μ©ν μ μλ κ²μ΄λ€.
νμ§λ§ types
μ΅μ
μ μ¬μ©νλ©΄, νΉμ ν ν¨ν€μ§λ€μ νμ
λ§ μ μ μ€μ½νμ ν¬ν¨μν¬ μ μλ€.
{
"compilerOptions": {
// @types/node, @types/jest, @types/expressλ§ κ°μ Έμ¨λ€
"types": ["node", "jest", "express"]
}
}
μμ κ°μ΄ μ€μ ν κ²½μ°, node
, jest
, express
ν¨ν€μ§μ νμ
μ μ μ μ€μ½νμ ν¬ν¨λμ΄ import express from 'express';
λΌλ κ΅¬λ¬Έλ§ μ μ΄λ μλμΌλ‘ νμ
νκ°κ° μ§νλμ§λ§, μ¬κΈ°μ ν¬ν¨λμ§ μμ λ€λ₯Έ λΌμ΄λΈλ¬λ¦¬λ€μ μ§μ νμ
μ μΈ λͺ¨λμ κ°μ ΈμμΌ νλ€.
μ¬κΈ°μ μ£Όμν΄μΌν μ μ types
μ΅μ
μ λμ μμ²΄κ° μ μ΄μ @types
ν¨ν€μ§ λλ ν 리 λ΄λΆμ μ‘΄μ¬νλ νμ
μ μΈ λͺ¨λλ€μ΄λΌλ κ²μ΄λ€.
μλ₯Ό λ€μ΄ λ μ§ κ΄λ ¨ λΌμ΄λΈλ¬λ¦¬μΈ moment
λ @types/moment
κ°μ νμ
ν¨ν€μ§λ₯Ό μΆκ°μ μΌλ‘ μ€μΉνμ§ μκ³ , μ체μ μΌλ‘ λ΄μ₯νκ³ μλ νμ
μ μΈ λͺ¨λμ μ¬μ©νλ€.
{
"name": "moment",
// ...
"main": "./moment.js",
"jsnext:main": "./dist/moment.js",
"typings": "./moment.d.ts",
// μ체μ μΌλ‘ νμ
μ μΈ νμΌμ ν¬ν¨νκ³ μλ€
}
μ΄λ° κ²½μ°λ import moment from 'moment'
ꡬ문μΌλ‘ μ΄ λΌμ΄λΈλ¬λ¦¬λ₯Ό κ°μ Έμ΄κ³Ό λμμ moment.d.ts
λ μλμΌλ‘ μ»΄νμΌ λμμΌλ‘ ν¬ν¨λλ―λ‘, λΉμ°ν μ λλ‘ νμ
μ μ¬μ©ν μ μλ€.
μ¦, types
μ΅μ
μ λμμ μ΄λκΉμ§λ @types/*
ν¨ν€μ§ λ΄λΆμ ν¬ν¨λ νμ
μ μΈ λͺ¨λμ΄κ³ , νμ
μ€ν¬λ¦½νΈκ° ν΄λΉ νμ
μ μΈ λͺ¨λμ μ μ 곡κ°μ λΏλ¦¬λ κ²½μ°μλ§ ν΄λΉλλ€λ μ μ ν·κ°λ¦¬μ§ λ§μ.
λ§μΉλ©°
μ΄λ κ² tsconfig
3λ²μ§Έ μ리μ¦μΈ Modules
νΈμ λ§λ¬΄λ¦¬ νλ€. λͺ¨λκ³Ό κ΄λ ¨λ μ΅μ
λ€μ κ°μ μ체λ λ§μ§ μμ§λ§, μ무λλ μ»΄νμΌ κ³Όμ μμ μ΄λ€ λͺ¨λ μμ€ν
μ μ¬μ©ν μ§, μ΄λ€ λͺ¨λ νμ μ λ΅μ μ¬μ©ν μ§ λ±μ λ€λ£¨λ μ΅μ
μ΄λ€λ³΄λ λΆμ° μ€λͺ
μ΄ κΈΈμ΄μ§ κ² κ°λ€.
κ·Έλ¦¬κ³ μ¬κΈ°κΉμ§ μ κ³ λμ μμΌμ€λ½κ² λλ μκ°μβ¦
μ¬μ€ tsconfig
μ΅μ
μ΄ λ§μ μ€μ μ΄λ―Έ μκ³ μμμ§λ§ μ΄λ κ²κΉμ§ νλ€ μ€μ μμλ λͺ» νλ€. (κΈ μ°λ€κ° μλͺ©μ΄ μν μ μ λ μ²μβ¦)
λ¬Όλ‘ κ³΅μ λ¬Έμλ₯Ό λ²μνλ λλμΌλ‘ μμ μ¨λ΄λ €κ°λ€λ©΄ κΈλ°© λλ΄κ² μ§λ§, μ μ΄μ μ΄ ν¬μ€ν
μ리μ¦λ₯Ό μμν κ²μ κ·Έ μ λμ μ 보λ₯Ό μν΄μκ° μλλΌ tsconfig
λ₯Ό μμ λΆμν΄λ³΄μλ λͺ©μ μ΄μμΌλ―λ‘ νλ² λ¬λ €λ³΄λλ‘ νκ² λ€.
λ€μ ν¬μ€ν μμλ νμ μ€ν¬λ¦½νΈκ° μΆλ ₯ νμΌμ μμ±ν λμ λμλ€μ λ€λ£¨λ λ°©λ²μ λν μ΅μ λ€μ λν΄μ μ΄μΌκΈ°ν΄λ³Ό μμ μ΄λ€.
μ΄μμΌλ‘ [tsconfigμ λͺ¨λ κ²] Compiler options / Modules ν¬μ€ν μ λ§μΉλ€.
κ΄λ ¨ ν¬μ€ν 보λ¬κ°κΈ°