# 7125์ ํผ๋๋ฐฑ์ ์ผ๋ถ ์ฌ๋๋ค์ด ์ค์ ๋ก ๊ธ๋ก๋ฒ ๋ฐ ๊ฐ์ ธ์จ UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํผํฉํ๊ณ ์ผ์น์ํค๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ด๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ๊ฐ๋ฅํ ์๋๋ฆฌ์ค๋ก ๊ฐ์ฃผํ์ง ์์์ต๋๋ค.
์ธ ๊ฐ์ง ๊ทธ๋ด๋ฏํ ์ต์ :
์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ์ง๋ง ์๋ง๋ ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค.
์ ๋ ๋จ์ํจ์ ์ํด ์ต์ 3์ ์ ํธํ์ง๋ง ๋ ผ๋ฆฌ์ ์์น์์ ์ฌ์ฉํ ์์๋ ํฉ๋ฆฌ์ ์ผ๋ก ์ข์ ๊ตฌ๋ฌธ์ด๋ ๊ตฌ์ฑ์ด ์์ผ๋ฉด ์ต์ 2๋ฅผ ๋ณผ ์ ์์ต๋๋ค. TSLint ๊ท์น์์ UMD ์ ์ญ ์ฌ์ฉ์ ๊ฐ์งํ๋ ๊ฒ์ ๋๊ตฐ๊ฐ์ด ์์ ์ ์ํํ๋ ค๋ ๊ฒฝ์ฐ ๊ฐ๋จํฉ๋๋ค.
ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ต์
3์ ๊ตฌํํ๋ ๊ฒ์
๋๋ค. ์ฌ๋๋ค์ด "๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์์ด ๋ฒ๋ ธ์ต๋๋ค"๋ผ๋ ์ค๋ฅ๋ฅผ ์์ฃผ ๋ฒํ๋ ๊ฒ์ผ๋ก ๋ฐํ์ง๋ฉด ํ์ฉ๋๋ UMD ์ ์ญ์ ๋ช
์ ์ ์ผ๋ก ์ง์ ํ๋ tsconfig ์ต์
globals: []
์ ์ถ๊ฐํฉ๋๋ค.
์ปจํ
์คํธ์ ๊ด๊ณ์์ด ๋ชจ๋ UMD ์ ์ญ์ ๋ํ ์ก์ธ์ค๋ฅผ ํ์ฉํ๋ ๋์ UMD ๋ชจ๋์ด ///<reference types=<>>
๊ตฌ๋ฌธ์ ํตํด ๋ช
์ ์ ์ผ๋ก "์ฐธ์กฐ"(๊ฐ์ ธ ์ค๊ธฐ๋์ง ์์) ๋ ๊ฒฝ์ฐ UMD ์ ์ญ์ ๋ํ ์ก์ธ์ค ๋ง ํ์ฉํ๋ ๊ฒ์ด ๋ ๊ฐ๋จํ์ง ์์๊น์? , ๋๋ tsconfig.json์ types
๊ตฌ์ฑ์ ํตํด?
์ฆ, ๋ชจ๋ ๋ด์์ ///<reference types=<>>
๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
/// <reference type="x" />
๊ฐ x
๊ฐ _everywhere_ ์ ์ญ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค๋ฉด, ์ด๋๊ฐ์์๋ ์ผ๋ถ .d.ts ํ์ผ์ด ์ค์ ๋ก ์ ์ญ์ด ์๋ ๊ฒ์ ์๋ชป ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ๊ฐ ์์ฃผ ๋ฐ์ํฉ๋๋ค ( DefinitelyTyped์ 2.0 ๋ธ๋์น๋ฅผ ๊ด๋ฆฌํด ์๊ณ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์ค๋ฅ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋งํ ์ ์์ต๋๋ค.)
๋ฐ๋๋ก _ ํด๋น ํ์ผ์์๋ง ์ฌ์ฉํ ์ ์๋ค๋ฉด ์ฐธ์กฐ ์ง์๋ฌธ์ ๋ชจ๋ ๊ณณ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ ๋ฃ์ด์ผํฉ๋๋ค. ์ ๋ง ์ง์ฆ๋ฉ๋๋ค. ์ด๋ฌํ ์ง์๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฉฑ๋ฑ ์ฑ์ด๊ธฐ ๋๋ฌธ์ ํ์ผ ํน์ ๋์์ ๋์ ํ๋ ๊ฒ์ด ์ด์ํฉ๋๋ค.
๋ด๊ฐ ์ฐธ์กฐ. ๊ธ์, ์ด๊ฒ์ด ๋ค๋ฅธ ์ฌ๋์๊ฒ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค๋ฉด ์๋ง๋ ํ์ฌ ํ๋์ ์ ์งํ๋ ๊ฒ์ด ๋ซ์ต๋๋ค. ๋ชจ๋๋ก ๊ฐ์ ธ ์ค๋์ชฝ์ผ๋ก ์์ ํ ์ ํํด์ผํฉ๋๋ค.
ํธ์ง : ์ด๊ฒ์ด ๋ ์ธ์ ๋ง์ ์ฌ๋๋ค์๊ฒ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ๋ณด๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค.
ํ์ฌ ์ด๋ก ์ ์ฌ๋๋ค์๊ฒ ๋ชจ๋์ ์ฌ์ฉํ์ฌ ๋ง์ด๊ทธ๋ ์ด์ ํ๋๋ก ์์ฒญํ๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด์ด ๋ฌธ์ ์ ๋ถ๋ชํ๋ฉด ๋ ์์ธํ ์กฐ์ฌ ํ ์ ์๋๋ก ์ ํํ ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ์๊ฒฌ์ ๋จ๊ฒจ์ฃผ์ธ์.
๋๋ ์์ฒด ํ์ดํ๊ณผ ํจ๊ป ์ ๊ณต๋์ง ์๋ lodash๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ํ ๋ฐํ์ ํ๊ฒฝ์์ ์๋ ๊ฒฝ๋ก ๊ฐ์ ธ ์ค๊ธฐ ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ฌ์ด ์ํฉ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ก์ปฌ ์๋ ๊ฒฝ๋ก ๋ฐ ํด๋ ์๋ ( './foo'๋ฐ 'N / bar')๊ฐ์๋ import ๋ฌธ ์กฐํฉ์ด ์์ต๋๋ค.
@types/lodash/index.d.ts
์ node_modules/lodash/
์๋์ผ๋ก ๋ณต์ฌํ๋ฉด ์ ํ ๊ฒ์ฌ๋ฅผ ํ ์ ์์ต๋๋ค.
์ง๊ธ๊น์ง ๋ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ///<amd-dependency path='../lodash' name="_">
( import
๋ฌธ ์์)์ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ต๋๋ค. ์ด ์ฝค๋ณด๋ฅผ ์ฌ์ฉํ๋ฉด @ types / lodash ์ ์๊ฐ ์ปดํ์ผ๋ฌ์ ์ํด '์ ์ญ ์ ์ผ๋ก'ํ์๋๊ณ ๋ด ๋ณด๋ธ JS์ ์ฌ๋ฐ๋ฅธ ์๋ ๊ฒฝ๋ก ( ../lodash
)๊ฐ ์์ต๋๋ค.
์ด ๋ฌธ์ ์ ์ถฉ๋ถํ ๊ฐ๊น์ด ์๋๋ฆฌ์ค ์์ผ๋ฉด ์ข๊ฒ ์ด์.
๋ช ํํ ํ ์ ์์ต๋๊น
๋ํ ๋ฐํ์ ํ๊ฒฝ์์ ์๋ ๊ฒฝ๋ก ๊ฐ์ ธ ์ค๊ธฐ ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ฌ์ด ์ํฉ์ด ์์ต๋๋ค.
๊ณผ
@types/lodash/index.d.ts
์node_modules/lodash/
์๋์ผ๋ก ๋ณต์ฌํ๋ฉด ์ ํ ๊ฒ์ฌ๋ฅผ ํ ์ ์์ต๋๋ค.
๋ถ๋? ์ด ์๋๋ฆฌ์ค์ ์ต์ํ์ง ์์๋ฐ ๊ทธ ๋ชฉ์ ์ ๋ฌด์์ด๋ฉฐ ์ ๋์์ด๋ฉ๋๊น?
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ,
ํ์ฌ @types/bluebird
์ ์ธ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ
์ ์ฐพ๋ ์ค์
๋๋ค (์ฝ๋ ๋ฐ ์๊ฐ์ ์๋นํ์ง ๋ง์ญ์์ค). .d.ts์ export as namespace Promise;
์ ์ถ๊ฐํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๋ ๊ฒ์ ์์์ง ๋ง์ด github ๋ฌธ์ ์์ ์ค๋ช
ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์์ปจ๋, ๋ค์ ์์ ์ ์ํฉ๋๋ค.
git clone -b vanilla-es5-umd-restriction-problem https://github.com/d-ph/typescript-bluebird-as-global-promise.git
cd typescript-bluebird-as-global-promise
npm install
export = Bluebird;
์ค ์์ export as namespace Promise;
node_modules/@types/bluebird/index.d.ts
์ ์ถ๊ฐํ์ฌ export = Bluebird;
ํฉ๋๋ค.npm run tsc
ํ์ฌ ๊ฒฐ๊ณผ :
๋ช ๊ฐ์ง 'Promise' refers to a UMD global, but the current file is a module. Consider adding an import instead.
์ค๋ฅ.
์์ ๊ฒฐ๊ณผ:
์ปดํ์ผ์ด ์ฑ๊ณตํฉ๋๋ค.
์ด ๋ฌธ์ ๋ ๊ฐ๋ฐ์ ์ฝ๋์ ํ์ฌ ์ฝ๋ (์ด ๊ฒฝ์ฐ RxJS) ๋ชจ๋์์ Promise
์ฌ์ฉ์ผ๋ก ์ธํด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ํนํ ์ด๋ ต์ต๋๋ค. ํ์๋ Promise
๊ฐ ์ ์ญ (JS ํ์ค์ ์ํด ์ ๊ณต๋จ)์ด๋ผ๊ณ ๊ฐ์ ํ๋ฏ๋ก import Promise from std; // (not that "std" is a thing)
์ฌ์ฉ์ผ๋ก ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
UMD ๋ชจ๋์ ๊ฐ์ ธ ์ค๊ธฐ ๊ฐ๋ฅํ ๋ชจ๋๊ณผ ์ ์ญ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ง ๊ณ ๋ง๊ฒ ์๊ฐํฉ๋๋ค.
๊ฐ์ฌ.
----------------------------- ์ ๋ฐ์ดํธ
์ ๋์ด ๋ฌธ์ ๋ฅผ ๋ค๋ฅด๊ฒ ํด๊ฒฐํ์ต๋๋ค (์ฆ, Promise
๋ฐ PromiseConstructor
์ธํฐํ์ด์ค ํ๋).
"globals": []
tsconfig ์ต์
์ ๋ชจ๋ ๊ณณ์์ ๋ณผ ์ ์๋๋กํ๋ ๊ฒ๋ณด๋ค ์ ํธ๋ฉ๋๋ค. UMD ์ ์ธ์ด ํ์ค์ด๋๋ฉด์ ์ค์๋ก ๋ชจ๋์ ๊ฐ์ ธ ์ค๋ ๊ฒ์ ์์ด ๋ฒ๋ฆด ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ํ์ฌ ๋์์ ์ ์งํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ์ค๋ฅ ์ฌ์ผํฉ๋๋ค.
์ผํ๋ก ํฌ์ธํธ ๋ฆด๋ฆฌ์ค์์ ๊ธ๋ก๋ฒ window.moment
๋ณ์๊ฐ ์ ๊ฑฐ๋์์ ๋๋ฅผ ๊ธฐ์ตํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ชจ๋ ๊ณณ์์ ์ ์คํ๊ฒ ์์
ํ๊ณ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ฝ 5 ๊ณณ์ ์์์ต๋๋ค.
๋ฌผ๋ก UMD ํจํค์ง๋ ๋ฐํ์์ ์ ์ญ ๋ฒ์์์ ์ฌ์ฉํ ์ ์์ง๋ง ์ฌ์ฉํ ์์๊ฒ๋๋์๊ธฐ๋ ๋ค๋ฅธ ๋ชจ๋์ด๋ก๋๋๋ ์์์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
์ด๊ฒ์ +1. SystemJS์ ํจ๊ป React๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋๋ฐ React๊ฐ ์ ๋ฒ๋ค๋ง๋์ง ์์๊ธฐ ๋๋ฌธ์ CDN์์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ก ์ง์ ๋ก๋ํ๊ธฐ ๋๋ฌธ์ React / ReactDOM ๊ฐ์ฒด๋ฅผ ์ ์ญ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก๋ก ์ฝ๋๋ฅผ ๋ชจ๋๋ก ์์ฑํ๊ณ ์์ง๋ง๋ก๋์ ์คํ๋๋ ํ๋์ ๋ฐํ์ ์คํฌ๋ฆฝํธ๋ก ๋ฒ๋ค (๋กค์
)๋ฉ๋๋ค. import from
react / react-dom์ ์ํ ํ ๋ค์ ๋ก๋๊ฐ "์ง์ง๊ฐ ์๋๋๋ค. ์ด๋ค์ ์ ์ญ์
๋๋ค"(https : /์ ์ ๊ณต๋ ์์ WebPack ๊ตฌ์ฑ๊ณผ ์ ์ฌ)๋ผ๊ณ ๊ตฌ์ฑํ๋ ๊ฒ์ ๊ณ ํต์ค๋ฝ๊ณ ๊ฑฐ์ง๋ง์
๋๋ค. /www.typescriptlang.org/docs/handbook/react-&-webpack.html). ๋ด ๋ชจ๋์์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ ์ญ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ๊ณ ์ ํํ ๊ฒ์
๋๋ค. ๋ด๊ฐ ์๋ํ ๋จ๊ณ๋ ์ง๊ด์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค.
npm install --save-dev @types/react @types/react-dom
"jsx": "react", "types": ["react", "react-dom"]
export function MyComponent() { return <div>{"Hello, world"}</div>; }
ReactDOM.render(...)
๊ทธ๋ฌ๋ ์ด๋ก ์ธํด React refers to a UMD global, but the current file is a module. Consider adding an import instead
์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด๊ฒ์ด ํจ๊ณผ๊ฐ ์์๋ค๋ฉด ์ฝ๋์์ ๋ชจ๋ ์ธ ์ฒํ๊ณ ๊ทธ๋ ์ง ์์ ๋ก๋ / ๋ฒ ๋ค๋ฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๊ฐ๋จ ํ ๊ฒ์ ๋๋ค. (๋๋ ์๋์ ํฌํจ ๋ ํ์ผ์ ์ถ๊ฐํ์ฌ ์์ ํ๋๋ก ์ํํ์ต๋๋ค. ์ด์ ๋ด ๋ชจ๋์ React & ReactDOM์ ์ค๋ฅ์์ด ์ ์ญ์ผ๋ก ์ฌ์ฉํ ์ ์์ง๋ง ๋ค์ ์ถ์ ํ๊ฑฐ๋ ํด์ปค์ ๋๋ค. ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด์์ ์ ์์ต๋๋ค. ๋์ณค๋ค) :
import * as ReactObj from "react";
import * as ReactDOMObj from "react-dom";
declare global {
var React: typeof ReactObj;
var ReactDOM: typeof ReactDOMObj;
}
๋ํ ์ต์ 3๊ณผ ์ ์ญ : [] ๋ฐฑ์ ์ ๋์ํฉ๋๋ค. ์ด๋ ์ ๊ท ๋ฐ ๊ธฐ์กด ์ฌ์ฉ์์๊ฒ ๋งค์ฐ ์ง๊ด์ ์ผ๋ก ๋ณด์ด๋ฉฐ ์ฌ๋๋ค์ด ํ์๋กํ๋ ์ ํํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋๋ ์ฝ๋์ ๋ํ ์ ๋ฌธ๊ฐ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ 2๊ฐ ๋ ๋์์ง ์๋์ง๋ ๋งํ ์ ์์ง๋ง ๊ตฌ์ฑ์ด ๊ฐ๋จํ๋ค๋ ์ ์ ๊ฐ์ํ ๋ ์ง๊ด์ ์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ฌํ ์์ ์ ๊ตฌํํ๋ ๋ฐ ๋์์ ๋ฐ๊ณ ์ถ๋ค๋ฉด ์ด๋๋ก ๊ฐ์ผํฉ๋๊น?
์ด๊ฒ์ ์ ๋ง๋ก ๊น๋ฐ ๋ค์ ์์ด์ผํฉ๋๋ค. ์์ฒญ๋ ๋ฆฌํฉํ ๋ง ์ํ์ ๋๋ค. ํ๋๊ทธ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก true๋ก ์ง์ ๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์๋ ์๋๋ฆฌ์ค์์ ๊ณ์ ์๋ํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด UMD ์ ์ธ์ ์ฃผ์ ์ด์ ์ ์๊ณ ์์ต๋๋ค.
React๋ ์ ๋ฌถ์ด์ง ์์ต๋๋ค.
@billti ์์ธํ
import from
react / react-dom์ ์ํ ํ ๋ค์ ๋ก๋๊ฐ "์ง์ง๊ฐ ์๋๋๋ค. ์ด๊ฑด ๊ธ๋ก๋ฒ์ ๋๋ค"๋ผ๊ณ ๊ตฌ์ฑํ๋ ๊ฒ์ ๊ณ ํต์ค๋ฝ๊ณ ๊ฑฐ์ง๋ง์ ๋๋ค.
๋ด๊ฐ ํํ ๋ฆฌ์ผ์์ ์ด ์ ์ผํ ์ด์ ๋ externals
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒ๋ค ์๊ฐ์ด ์ค์ด๋ค ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ํฌํธํ์ง ์๊ณ ์ ์ญ React
๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ค์ ๋ชจ๋๋ก ์ฝ๊ฒ ์ ํ ํ ์ ์์ง๋ง ์ํฌํธ๋ ์ฃผ์ด์ง ๋ก๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
๋ฒ๋ค๋ง์ ์ต์ ํํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ด์ฐฐ ๋ ํฌ๊ธฐ์ ๋ํ ํ ๊ฐ์ง ์๋์ด ๋ฌธ์ (https://github.com/rollup/rollup/issues/855)๋ฅผ ์ฐธ์กฐํ์ธ์. ๋ด ์ค์ ์์ ํจ๊ณผ์ ์ผ๋ก (๋กค์ ์ ์ฌ์ฉํ์ฌ) React๋ฅผ ๋ฒ๋ค๋งํ๋ ์ต์ ํฌ๊ธฐ ์ฆ๊ฐ๋ฅผ ๋ณด์์ผ๋ฏ๋ก CDN์์ ์ ๊ณตํ๊ณ ์ถ์ต๋๋ค. ๋์๊ฒ๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ด ์์ต๋๋ค.
a) ๋ด ์ฌ์ดํธ์ ๋ํ ๋ ์ ์ ์์ฒญ (๋ฐ ๋์ญํญ).
b) ๋น๋ ์ฒด์ธ์ ๋ฒ๋ค๋งํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์ค์ด ๋ญ๋๋ค.
c) ๋ณ๊ฒฝ ์ฌํญ์ ํธ์ ํ ๋๋ง๋ค ํด๋ผ์ด์ธํธ์ ๋ค์ ๋ค์ด๋ก๋ ํ ์ฝ๋๊ฐ ์ ์ต๋๋ค (๋ด ์ฝ๋ ๋ง ๋ค์ ๋ค์ด๋ก๋๋๋ ๋ฒ๋ค์ ์๊ณ React๋ ์์ ๋์ง ์์ ์ํ๋ก ํด๋ผ์ด์ธํธ ์บ์์ ๋จ์ ์์ผ๋ฏ๋ก 304s๋ฅผ ์ป์).
์ฌ์ดํธ๋ฅผ๋ก๋ ํ ๋ Chrome ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ดํด๋ณด๋ฉด GZipped HTTP ์ฐ๊ฒฐ์์ React ๋ฐ React-dom (์ต์ํ ๋ ๋ฒ์ )์ 47kb์ ๋คํธ์ํฌ ํธ๋ํฝ์ผ๋ก ์ฌ์ดํธ์ ๋๋ถ๋ถ์ ์ด๋ฏธ์ง๋ณด๋ค ์ ์ผ๋ฏ๋ก ๊ทธ๋ ์ง ์์ต๋๋ค. ์ ๋ง ํฐ ์ด๋ (์ : 50 % ๊ฐ์)์ด ์๋ค๋ฉด ์ด์จ๋ ๊ทธ ์ ๋๋ฅผ ์ค์ด๋ ๊ฒ์ ๋ํด ๊ฑฑ์ ํ์ต๋๋ค.
๋ถ๋ก์ผ๋ก : ๋ํ์ด ์ต์ ์ด ์์ผ๋ฉด TypeScript ์ปดํ์ผ๋ฌ ์์ฒด๊ฐ "์ด ๋ชจ๋์ ์ค์ ๋ก ์ ์ญ ์ "์ด๋ผ๊ณ ๋งํ๋ ๊ตฌ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ ๊ฑฐํ๋ ๋ฒ ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋๋ก ๊ฐ์ํ๊ณ ์์ต๋๋ค. ๋ฐํ์์ ํด๊ฒฐ๋์ง ์๋ ๋ชจ๋์ ๋ํ ๊ฐ์ ธ ์ค๊ธฐ (๋๋ ํ์ ๋๋ ์ ์)๋ฅผ ๋ด ๋ณด๋ ๋๋ค.
@billti SystemJS๋์ด ์๋๋ฆฌ์ค๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํฉ๋๋ค. ๊ฐ๋ฐ ์ค์ ๋ก์ปฌ๋ก ์ค์น๋ ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ํ๋ก๋์ ์์ CDN์ ์ฌ์ฉํ๋ ๊ฒ ์ฌ์ด๋ฅผ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๋ํ ๋ชจ๋ ๊ฐ์ ธ ์ค๊ธฐ๊ฐ ์ค์ ๋ก ํ ๋ฒ ๊ฐ์ ธ ์์ ์ฒ์ ํ์ํ ๋ ์ฐฝ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋๋ ์ ์ญ ๋ณ์์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ํ๋ด๋๋ก ์ง์ ํ๋ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํฉ๋๋ค. ํ๋ก๋์ ์์๋ CDN์์ ์ฌ ์ ์์ต๋๋ค. ๋๋ ๋ฐ์์ผ๋ก ์ด๊ฒ์ํ์ง ์์์ง๋ง ๊ฐ๋ 1.x๋กํ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค @aluanhaddad . ํฅ๋ฏธ๋กญ๊ฒ๋ ... ์ ๋ ์ค์ ๋ก ์ ๋ฅผ์ด ์ฅ์ ๋ฌผ๋ก ์ด๋ ๋น์ทํ ์์ ์ํ๋ ค๊ณ ํ์ง๋ง ์์๋ผ ์ ์์๊ธฐ ๋๋ฌธ์ ์ค๋ ์์นจ SystemJS ์ ์ฅ์์ ์ง๋ฌธ์ํ์ต๋๋ค. https://github.com/systemjs/systemjs/issues/1510 ๋ฌ์ฑ ๋ฐฉ๋ฒ์ ๋ตํ ์ ์๋ค๋ฉด ์ ๋ง ๋์์ด ๋ ๊ฒ์ ๋๋ค :-)
์ฐธ๊ณ : ๋ด ๋ค๋ฅธ ์๊ฒฌ์ ์ฌ์ ํ โโTypeScript ์์ฒด์ ์ํ ๋ฐฉ์ถ์ ์ฝ๋ ์คํ์ ์ํด ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ ์ญ์ผ๋ก ๋งคํํ๊ธฐ ์ํด SystemJS / WebPack / Rollup ๋ฑ๊ณผ ๊ฐ์ ๊ฒ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์์ ์์ ๋ฅผ ๋ง๋ค ์ ์๋์ง ์ดํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฝค ์ค๋ซ๋์ ํด๋ณธ ์ ์ด์๊ณ ๋น์์ ๊ฐ์ง๊ณ ์๋ ์์ค ์ฝ๋์ ์ก์ธ์ค ํ ์ ์์ง๋ง 100 % ํ์ ํฉ๋๋ค. ์์ ์์๋ค.
๋ ๋ฒ์งธ ์์ ์ ๋ฐ๋ก SystemJS๊ฐํ๋ ์ผ์ ๋๋ค. ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ๊ธ๋ก๋ฒ์ ๋งคํํ๊ณ ๊ธ๋ก๋ฒ์ด ์ค์ ๋ก ์์ฒญ๋๊ณ ์ด๋ฏธ๋ก๋๋์์์ ์ดํดํฉ๋๋ค. ์ถ๋ ฅ์ ํ์คํ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฐธ๊ณ : SystemJS API๋ฅผ ์ฌ์ฉํ์ฌ SystemJS์์์ด ์์ ์ ์ํํ๊ณ https://github.com/systemjs/systemjs/issues/1510์ ์๋ฃจ์ ์ ์ถ๊ฐํ์ต๋๋ค. ๊ฐ์ฌ.
๋ ๋ฒ์งธ ์์ : ์, ์ด๊ฒ์ด ๋ฐ๋ก ๋ก๋๊ฐ ํ ์์๋ ์ผ์ ๋๋ค. ๋ด ์์ ์ ๊ฐ์ ธ์จ ๋ชจ๋์ ์ ์ญ์ ๋งคํ ํ ์ ์์ง๋ง TypeScript๋ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐํ์์ ์ฝ๋๋ฅผ ์ ํจํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ก๋๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๊ฒ์ ์๋ ๋ฌธ์ ์ catch-22์ ๋๋ค. ์ฌ๊ธฐ์ ์ ์ญ (์ด ๊ฒฝ์ฐ React)์ ๋ชจ๋์์ ์ฌ์ฉํ ์ ์๋ค๊ณ ์ ์ธ ํ ์ ์์ต๋๋ค. ๋ง์น ๋ชจ๋ ์ธ ๊ฒ์ฒ๋ผ ๊ฐ์ ธ์์ผํฉ๋๋ค (์๋์). .
๋ด ๋ค๋ฅธ ์๊ฒฌ์ ์ฌ์ ํ โโTypeScript ์์ฒด์ ์ํ ๋ฐฉ์ถ์ ์ฝ๋ ์คํ์ ์ํด ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ ์ญ์ ๋งคํํ๊ธฐ ์ํด SystemJS / WebPack / Rollup ๋ฑ๊ณผ ๊ฐ์ ๊ฒ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
@billti ์ดํด๊ฐ ์ ๋ผ์. ๋ชจ๋์ ๊ธ๋ก๋ฒ ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ผํ ์ต์ ์ด์ง๋ง TypeScript๊ฐ์ด๋ฅผ ํ์ฉํ์ง ์๋ ์๋๋ฆฌ์ค๋ ๋ฌด์์ ๋๊น? ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ญ ๋ฐ ๋ชจ๋ ๋ชจ๋ ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์๋๋ฆฌ์ค ๋ง ๋ณด์์ต๋๋ค.
@DanielRosenwasser ์ ๋ React๊ฐ ์ค์ ๋ก๋ก๋๋๋ ๋ฐฉ์ ๋๋ฌธ์ ์ ์ญ ๊ฐ์ฒด์ ๊ตฌ์ฑ์์์์ ๊ฐ์ด ๋ฐํ์์ ์ ์ญ์ด๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@billti ํ๋ฅญ ํฉ๋๋ค.
๋ ๋ฒ์งธ ์์ : ๋ฌด์จ ๋ป์ธ์ง ์๊ฒ ์ต๋๋ค.
๋ด ๋๋์ ๋ธ๋ผ์ฐ์ ์๋๋ฆฌ์ค์์ RequireJS์ ๊ฐ์ ๋ก๋ ๋๋ Webpack๊ณผ ๊ฐ์ ํจํค์ ๋ฅผ ์ฌ์ฉํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ชจ๋์ ์ง์ํ์ง ์์ง๋ง ์๋ฌด๋ฐ ์ฐจ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. (๋๋ Chakra๊ฐ ๊น๋ฐ ๋ค์ ์ฌ์ฉํ ์ ์๋ค๊ณ ๋ค์์ต๋๋ค). ๋ฐ๋ผ์ ์ถ๊ฐ ๋๊ตฌ ์์ด๋ ์ฝ๋๋ฅผ ์ ํ ์คํํ ์ ์์ต๋๋ค. define
, require
๋๋ System.register
๋ฅผ ํฌํจํ๋ ์ถ๋ ฅ์ด ๋ด ๋ณด๋ธ _JavaScript_ ์ฝ๋๊ฐ ์ด์ ๊ฐ๋ฅํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ์๋ฏธ์
๋๋ค. ๊ทธ๋ฌ๋ ๋๋ "๋ชจ๋๊ณผ ๋ชจ๋์ด ์๋"๊ตฌ๋ณ์ ์ค์์ฑ์ ์๊ณ ์์ต๋๋ค.
์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ "๋ชจ๋"์ ํ ๋ฒ ์ด์ ์ฐธ์กฐ ํ ์ ์์ต๋๋ค.
_shims.d.ts_
import __React from 'react';
declare global {
const React: typeof __React;
}
๊ทธ๋ฐ ๋ค์ ๊ฐ์ ธ ์ค์ง ์๊ณ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ํ React๊ฐ ๊ธ๋ก๋ฒํ๋์์ผ๋ฉฐ ๋ ์ด์ ๊ฐ์ ธ์ฌ ํ์๊ฐ์๋ ์ด์ ์ด๊ธฐ๋ํฉ๋๋ค.
๋ค์ shims.d.ts, ๋ช ๊ฐ์ ๊ฒ์๋ฌผ์ ์ฌ๋ฆฌ๋ฉด ๋ด๊ฐ ์ง๊ธ ํ ์ผ์์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค (์๋ํ ๋ง์์ ๋น์ทํ๊ฒ ์๊ฐํฉ๋๋ค) ;-)
์ด์ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ ์ค ํ๋๋ก ์๋ํ๋๋ก ํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ ์์ ์ด ์๋๋๋ค. ์ฐ๋ฆฌ๋ TypeScript๋ฅผ ์ฑํํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ณ ์ฌ์ฉ์๊ฐ ์ ๋ง์ ๊ตฌ๋ฉ์ด๊ฐ ์๋ ์ฑ๊ณต์ ๊ตฌ๋ฉ์ด์ ๋น ์ง๋๋ก ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์ด๋ฅผ ์ผ๋์๋๊ณ TypeScript๋ฅผ ์ฌ์ฉํ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ ๋ ์ข ์ข ๋ ๊ฐ์ง ์ง๋ฌธ์ํฉ๋๋ค. a) ์ ํจํ ์ฝ๋์ ๋๊น, b) ๊ณ ๊ฐ์ด์ด๋ฅผ ์๋ํ๊ณ ์ํ ํ ๊ฒ์ ๋๊น?
๋๋ต ์ ๋ ฅํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ต์ ์ผ๋ก Babel์์ ์ํ๋ ์์ ์ ์ํํ๋ (๋น TypeScript) ๋ฒ์ ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ์ ํจํ๋ค๊ณ ๋งํ๋ ๊ฒ์ด ํ๋นํ๋ค๊ณ ์๊ฐํฉ๋๋ค. React ๋ฌธ์์ ์ค์น ํ์ด์ง์ CDN์ ์คํฌ๋ฆฝํธ ํ๊ทธ ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ด ๋์
TypeScript๊ฐ ์ฝ๋ ์์ฑ์ ํน์ ์ ํจํ ํจํด์ ์ง์ํ์ง ์์ ๊ฒฝ์ฐ ์ฆ์ ๋ช ํํ๊ฒ ๋ง๋ค๊ณ ์ฌ๋๋ค์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ดํด์ผํฉ๋๋ค (์ค๋ฅ ๋ฉ์์ง ๋๋ ๊ฐ๊ฒฐํ ๋ฌธ์์์ ์ํํ๊ธฐ ์ด๋ ค์ด ์์ ์ ๋๋ค). ๊ทธ๋ฌ๋ ๊ฐ์ธ์ ์ผ๋ก TypeScript๊ฐ ํจํด์ ์ง์ํ์ง ์์์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํจํด์ด "๋ชจ๋ฒ ์ฌ๋ก"๋๋ "ํ์ค"์ด๋ผ๊ณ ์๊ฐํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฝ๋๊ฐ ์ ํจํ๊ณ ์ผ๋ถ JavaScript ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๋ ๊ฒฝ์ฐ TypeScript๊ฐ์ด๋ฅผ ์ง์ํด์ผํฉ๋๋ค. TypeScript๊ฐ ์๋ํ๋๋ก ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ๋น๋ ํ์ดํ ๋ผ์ธ์ ์ฌ๊ตฌ์ฑํด์ผํ ์๋ก (์ : ์ฌ์ํ ์ฑ์ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๋ฐ ๊ถ์ฅ ๋จ) ๊ฐ๋ฐ์๋ ๋ ์ ๊ฒ ์ด๋ํฉ๋๋ค.
์๋ฃจ์
์ ๊ดํด์๋ ... ์ฌ๊ธฐ์์ ๊ทธ๋ฅ ๋ฑ์ด ๋ด์ง ๋ง ์๋ง๋ ํ๋ก์ ํธ ์ ์ฒด์์ ์ฌ์ฉํ ์์๋ API๋ฅผ ์ด๋ฏธ ํจ๊ณผ์ ์ผ๋ก ์ ์ํ๋ "lib"์ปดํ์ผ๋ฌ ์ต์
์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ญ ์ ์ผ๋ก ์ถ๊ฐ ํ ์ ์๋๋ก @types/name
ํ์ ๊ฐ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. (๊ทธ๋ฆฌ๊ณ ์ด์ฉ๋ฉด ์๋ ๊ฒฝ๋ก๋ฅผ ์ง์ํ ์๋ ์์ต๋๋ค).
์ฐ๋ฆฌ๋ TypeScript๋ฅผ ์ฑํํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ณ ์ฌ์ฉ์๊ฐ ์ ๋ง์ ๊ตฌ๋ฉ์ด๊ฐ ์๋ ์ฑ๊ณต์ ๊ตฌ๋ฉ์ด์ ๋น ์ง๋๋ก ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ์ฑ๊ณต์ ๊ตฌ๋ฉ์ด์ ์ฌ์ฉ์๋ฅผ์ง๋ํ๋ ค๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋์ด ์กฐ๊ฑด๋ถ๋ก ์ ์ญ์ ์ ์ํ๋ ๊ฒฝ์ฐ ์ค์๋ก ์ฌ์ฉ์๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒ์ ์ฌ์ฉํ๋๋ก ์๋ดํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ๋ช ๊ฐ์ง ๋ค๋ฅธ ์ต์ ์ด ์์ต๋๋ค.
export as namespace foo
๊ตฌ์ฑ์ ๋ง๋ญ๋๋ค.@billti
๋ค์ shims.d.ts, ๋ช ๊ฐ์ ๊ฒ์๋ฌผ์ ์ฌ๋ฆฌ๋ฉด ๋ด๊ฐ ์ง๊ธ ํ ์ผ์์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค (์๋ํ ๋ง์์ ๋น์ทํ๊ฒ ์๊ฐํฉ๋๋ค) ;-)
๋ฏธ์ ํด์, ๋๋ฌด ์ข์์ด์;)
TypeScript๊ฐ ํจํด์ ์ง์ํด์๋ ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ํจํด์ด "๋ชจ๋ฒ ์ฌ๋ก"๋๋ "ํ์ค"์ด๋ผ๊ณ ์๊ฐํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋๋ TypeScript๊ฐ ์ฌ๊ธฐ์์ ๊ท๋ฒ ์ ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ผ๋ฉฐ, ๊ทธ๊ฒ์ด ์ฃผ์ฅํ๋ ๊ฒ์ ์ํํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์์ฒด์ ์ผ๋ก ์ ์ญ์ผ๋ก๋ก๋ ํ ๋ค์ ES ๋ชจ๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐ๋ชจ ๋ฐ ์์ต์๊ฐ ์์ต๋๋ค. ์ด๋ ๊ฒํด์ ๊ทธ๋ค์ด ์๋ํ ์๋ฏผ์ด๋ผ๊ณ ์๊ฐํ์ง๋ ์์ง๋ง ๊ทธ๊ฒ์ ๋ ๋ค๋ฅธ ๋ ผ์์ ๋๋ค.
์ฆ, ๋ชจ๋์ด ์ฃผ๋ก ์ ์ญ์ ๋ํด _ ์ง๊ฐ ๋ _ ๊ตฌ๋ฌธ ์คํ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ๊ตฌ๋ฌธ ์คํ์ด ์ ํ ์๋๊ธฐ ๋๋ฌธ์ ์คํจ๊ฐ ๊ฐ๊น์์ง๋๋ค. ์ค์ ์ฝ๋ ๊ฒฉ๋ฆฌ, ์คํฌ๋ฆฝํธ ํ๊ทธ ์ค๋ฉ์ผ๋ก๋ถํฐ์ ์์ , ๋ช ์ ์ ์ข ์์ฑ ์ ์ธ, ๊ธ๋ก๋ฒ ๋ค์ ์คํ์ด์ค ์ง์ฅ์ผ๋ก๋ถํฐ์ ํ์ถ ๋ฐ ๊ธฐํ ์ด์ ๊ณผ ๊ฐ์ ์ด์ ์ ์ํด ์๋นํ๋ ๊ตฌ๋ฌธ ์ ์๊ธ (์๋ง ์ธ๊ธ?) ์ผ ๊ฒฝ์ฐ. ๋ชจ๋์ ๊ตฌ๋ฌธ์ ์ธ์ฒด ๊ณตํ์ ์ด์ง ์๊ณ ๊ธฐ๊ปํด์ผ ์ฅํฉํ์ง๋ง ๊ฐ์น๊ฐ์๋ ๊ฒ์ ๋ชจ๋์ ์๋ฏธ์ ๋๋ค.
์ฌ๋๋ค์ด ์ ์ด๋ .ts
ํ์ผ์์ TypeScript๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๊ฐ๋ ฅํ ์ ์ ์ฝ๋ ๋ถ์์ ์ด์ ์ ์ป๊ณ ์ถ์ดํ๋ค๊ณ ์๊ฐํฉ๋๋ค. Babel์ React๊ฐ ์กด์ฌํ์ง๋ง ๊ทธ๊ฒ์ ๋ํ ์ง์์ด ์๋ค๊ณ ๊ฐ์ ํ์ฌ์ด๋ฅผ ์ํํ์ง ์์ต๋๋ค. ์ด๋ ES ๋ชจ๋์ด ์ ์ ๋ถ์์ ์ํ ํ ์ ์๋๋ก ์๋์ ์ผ๋ก ์ง์ ๋์๋๋ผ๋ ์ฌ์ค์
๋๋ค.
์๋ ํ์ธ์.
๋ชจ๋์์ ๊ฐ์ ธ ์ค์ง ์์ ๊ฒฝ์ฐ์๋ง ํ์๋๋ ๋ค์ ์คํ์ด์ค foo ๊ตฌ์ฑ์ผ๋ก ์ฆ๊ฐ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ๋ง๋ญ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ์ฌ ์์ ์ค์ธ ํ๋ก์ ํธ์์ ๋ก์ปฌ ํฌํจ (๋๋ถ๋ถ ์ญ์ฌ์ ์ธ ์ด์ ๋ก)์ npm ๋ชจ๋๊ณผ ํผํฉํฉ๋๋ค. ๊ฒฐ๊ตญ ๋ชจ๋ ๊ฒ์ด Rollup ๋๋ Browserify๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐํฉ๋๋ฏ๋ก ๊ด์ฐฎ์ต๋๋ค.
์ฝ๋๋ฒ ์ด์ค์ ๋ณต์ฌ ํ emojione ํ๋ก์ ํธ์ .js ํ์ผ์ ์ฌ์ฉํฉ๋๋ค. ๋์ค์ DefinitelyTyped์ ์ ํ ์ ์ธ์ ์ถ๊ฐํ์ต๋๋ค. https://github.com/DefinitelyTyped/DefinitelyTyped/pull/13293 ์ด์ ๋จ์ํ ์ ํ์๋ก๋ ํ ์ ์๊ณ ๋ชจ๋ ๊ฒ์ด ์๋ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ TypeScript๋ ๋ด๊ฐ ์ ์ญ์ ์ก์ธ์คํ๋๋ก ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ด๊ฐ npm ๋ชจ๋๋ก ์ด๋ํ์ง ์๋ ์ด์ ๋ npm ๋ชจ๋์ด ์ฌ๋ฌ ๋ฉ๊ฐ ๋ฐ์ดํธ์ ์คํ๋ผ์ดํธ์ PNG๋ฅผ ๋ฒ๋ค๋ก ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋๋ค. 200KiB ์คํฌ๋ฆฝํธ ํ๋๋ง ์์ผ๋ฉด๋ฉ๋๋ค. ์ ํ ์ ์ธ ํฌํจ.
AngularJS์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ declare var angular: ng.IAngularStatic
์
๋๋ค. ํ์ง๋ง ๋ค์ ์คํ์ด์ค์์๋ ์๋ํ์ง ์์ต๋๋ค.
@dbrgn ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ชจ๋์ด ์ค์ ๋ก ์ ์ญ์ด๋ฉด ์ ํ ์ ์๊ฐ ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค. ์ ์ญ์ ์ ์ธํ์ง๋ ์๊ณ UMD ์คํ์ผ ์ ์ธ๋ ์๋๋๋ค (์ด๊ฒ์ UMD ์คํ์ผ ์ ์ธ์ ๊ดํ ๊ฒ์ ๋๋ค). ์ค์ ๋ก ์์ํ ES ๋ชจ๋ ๋ง ์ ์ธํฉ๋๋ค.
๋ชจ๋์ด ์ ์ญ์ ๋ํ๋ด๋ ๊ฒฝ์ฐ ํ์ผ์ ์ต์์ ์์ค์์ ๋ด ๋ณด๋ด์ง ๋ง์ญ์์ค. ๊ทธ๋ฌ๋ฉด ๋ชจ๋์ด๋ฉ๋๋ค.
AngularJS์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ var angular : ng.IAngularStatic์ ์ ์ธํ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ๋ค์ ์คํ์ด์ค์์๋ ์๋ํ์ง ์์ต๋๋ค.
๋ค์ ์คํ์ด์ค์ ํจ๊ป ์๋ํฉ๋๋ค.
๋์์ธ ํ์์์ ๋ ผ์ํ ๊ฒฐ๊ณผ๋ ํญ์ UMD๋ฅผ ํ์ฉํ๊ณ ํ์ฌ ์ ํ์ ์ ์ฉํ๋ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ คํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ ํ์ UMD ์ ์ญ์์ ์ ํ์ ์ก์ธ์คํ๋ ์์ ์๋ ํ์ฅ๋ฉ๋๋ค.
์ด๊ฒ์ ๋ํด ๋ ๋ง์ด ์๊ฐํ์ง๋ง, ๋๋ ์ฌ์ ํ ์๋ก์ด ์ ์ธ ์ข ๋ฅ๋ฅผ ๋ง๋๋ ๊ฒ์ด ๋ ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด ํ๋๊ทธ๋ ์ ์ธ ํ์ผ ์์ฑ์๊ฐ ํ ๋ฒ๋ง ์์ฑํ๋ฉด๋๋ ์ ๊ตฌ๋ฌธ๋ณด๋ค ๊ฒ์ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ต๋๋ค.
์ด๊ฒ์ ๊ธฐ์กด ์ฝ๋์ ๋๊ตฌ์ ์ ์คํ ํ์ํฉ๋๋ค. ์๋ฐ ์คํฌ๋ฆฝํธ๊ฐ ๋น ๋ฅด๊ฒ ์ฌ์์ ๋ฉ์ถ๊ณ ๋ชจ๋ ์์คํ ์์ ํจ๋ฐฐ ํ ๋๊น์ง ์ฝ๋๊ฐ์๋ ๊ทธ๋๋ก ์ ์ฐํ๊ฒ ์์ ํ ์ ์์ด์ผํฉ๋๋ค. ๊ฒฝ๊ณ ๋ฅผ ๋ด๋ณด๋ด์ง๋ง ๋น๋๋ฅผ ์คํจํ์ง ๋ง์ญ์์ค. ๋กค์ ๊ณผ ํ์ดํ ์คํฌ๋ฆฝํธ๋ก ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ๋ฉ์ง๊ฒ ๋ง๋๋ ๋ฐ ๋ฉฐ์น ์ ๋ญ๋นํ์ต๋๋ค.
UGH.
์๋ฐ๋ฅผ ๋น์๋ ๊ฒ์ ์ข์ํ๋ ์ฌ๋๋ค์ด ๋ง์ง๋ง ๊ธฐ๋ณธ ์๋ฐ ๋ชจ๋์ ์ ์ด๋ ์๋ํฉ๋๋ค. ํญ์๋ฆฌ ์๋
14 ๊ฐ์ ์๋ก ๋ค๋ฅธ ์์ ๋ชจ๋ ํ์ค์ ๋ง์ถ ํ์๊ฐ ์์ผ๋ฉฐ, ๊ทธ๋ ์ ๋กค์ / ๋ฒ๋ค๋ง ๋๊ตฌ๊ฐ ์ค์ ๋ก ์ฌ์ฉํ๋ ํ์์ผ๋ก ์์ค ํ์ผ์์ js ๋ชจ๋์ ์๋ํ๊ณ ์ปดํ์ผ ํ ํ์๊ฐ ์์ผ๋ฉฐ ๋ชจ๋ ํ์๋ ์์ฑํฉ๋๋ค. Typescript ๊ฐ์ ธ ์ค๊ธฐ / ๋ด๋ณด๋ด๊ธฐ ๋ฌธ ๋ฐ ํ์ฌ d.ts ํ์ผ๊ณผ ์ ์ด์ธ๋ฆฌ๋ฏ๋ก TSC๋ ์ค์ ๋ก "๋จ์ง ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ธ๊ณ๊ฐ ๋ ๊ฒ์ ๋๋ค."๋ผ๊ณ ์ง์ง ๋๋ ๋์ ์ฝ๋๋ฅผ ๋น๋ํ๊ธฐ๋ก ๊ฒฐ์ ํฉ๋๋ค. ์คํ ์๊ฐ ".
shims.d.ts ํดํน์ด ์ ์๋ํฉ๋๋ค. ํ์ง๋ง ์ด.
Webpack https://github.com/Microsoft/TypeScript/issues/11108#issuecomment -285356313์ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ฅผ์ํ ์์ ์๋ฃจ์
์ํ๋ UMD ์ ์ญ์ผ๋ก externals
์ webpack.config.js
์ ์ถ๊ฐํฉ๋๋ค.
externals: {
'angular': 'angular',
'jquery': 'jquery'
"react": "React",
"react-dom": "ReactDOM"
}
๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค๋ฅผ๋ณด๋ค ์ฝ๊ฒ โโ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
jQuery๊ฐ ์ ์ญ์ผ๋ก ํฌํจ๋๋ requirejs๋ก ๊ตฌํ ๋ ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค. ์ ์ญ์ผ๋ก ๋ฐ๊ฒฌ๋๋ ๊ฒฝ์ฐ์๋ง jQuery๋ฅผ ํ์ฅํ๋ ์ผ๋ถ ํ๋ฌ๊ทธ์ธ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ผ๋ถ ๋ชจ๋์ ์ฝ๋๋ ํด๋น ํ๋ฌ๊ทธ์ธ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ jQuery๋ฅผ ๋ชจ๋๋ก ๊ฐ์ ธ์จ ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ์์ ์ ์ํํ๋ ค๋ฉด ๋ชจ๋๋ก๋ก๋ ๋ jQuery์ ํจ๊ป ์๋ํ๋๋ก ๋ชจ๋ ํ๋ฌ๊ทธ์ธ์ ์์ ํ๊ณ ๋ชจ๋๋ก๋๋ก๋ํด์ผํฉ๋๋ค (ํ์ํ ์์น๋ฅผ ์ถ์ธก).
๊ฒ๋ค๊ฐ ๋ชจ๋ ๋ก๋์์ด ์๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ํ์ด์ง๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ํ๋ฌ๊ทธ์ธ์ ์ ์ญ ๋ฐ ๋ชจ๋ ๋ชจ๋์์ ์๋ํด์ผํฉ๋๋ค.
jQuery ์ธ์๋ ๋ น์์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ์๋ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ๊ฐ ์์ต๋๋ค. ์ด๋ก ์ธํด ํ๋ก์ ํธ ๋ง์ด๊ทธ๋ ์ด์ ์ด ๋งค์ฐ ์ด๋ ค์์ก์ต๋๋ค. ๋๋ ํ์ค์ ์ธ ๊ด์ ์์ ์คํ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๋ฌผ๋ก ์ด๊ฒ์ด ์ต์ ์ ํจํด์ ์๋๋ฉฐ ์ ํ๋ก์ ํธ์์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค. ํ์ง๋ง ๋๋ง์ด ๋ฌธ์ ๊ฐ์๋ ๊ฒ ๊ฐ์ง๋ ์์
types
์์ tsconfig.json
types
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ด์น์ ๋ง์ต๋๊น? ์๋ฅผ ๋ค์ด types
์ค์ ํ์ง ์์ผ๋ฉด ํ์ฌ ์์ ์ ๋์์ ์ป๊ณ types
์ค์ ํ๋ฉด ๋ฌธ์ ๊ทธ๋๋ก "์ด๊ฒ๋ค์ ์ ์ญ ์ ์
๋๋ค"๋ผ๊ณ ๋งํ๊ณ UMD ๋ค์ ์คํ์ด์ค๋ฅผ ์ ์ญ ์ ์ผ๋ก ํ์ ํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ด ์ค๋๋ ์กด์ฌํ๋ ํ๋์ ์ข
๋ฅ์
๋๋ค (์ ์ญ ์ ํ ๋นผ๊ธฐ). ์ด๊ฒ์ ์๋ก์ด globals
์ต์
์ ๋์
ํ๋ ๊ฒ๊ณผ ๋ฐ๋๋ฉ๋๋ค.
์ข์ ์๊ฐ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ ๊ฒฝ์ฐ์๋ UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ญ์ผ๋ก ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ๋ฅผ ๋ชจ๋๋ก ์ฌ์ฉํ๋ ์คํฌ๋ฆฝํธ๊ฐ ์์ต๋๋ค. ๊ฐ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ ๊ฐ์ ๋ค๋ฅธ tsconfig.json์ผ๋ก์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ ๋ง ๊ฐ๋จํฉ๋๋ค.
@blakeembrey types
์ฌ์ฉํ๋ ๊ฒ์ด ์ด์น์ ๋ง์ง๋ง , ์ด๋ฏธ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ณผ๋ถํ๋ผ๋ ๊ฐ๋
์ ๋๋ฌด ์ด์คํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด <reference types="package" />
๊ตฌ์ฑ์๋ ์ด๋ฏธ "paths"
์ง์ํ์ง ์๋๋ค๋ ์ ํ์ด ์์ต๋๋ค. "package"
๋ @types
์ ํด๋ ์ด๋ฆ์ ์ฐธ์กฐํด์ผํฉ๋๋ค.
์ด ๋ํ๋ฅผ ๋ฐ๋ผ๊ฐ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช๊ณ ์์ต๋๋ค. ์ด์ ๋ํ ์ ๋ฐ์ดํธ ๋๋ ๊ณํ๋ ํด๊ฒฐ์ฑ ์ด ์์ต๋๊น? lodash๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ํ์์ ์ธ ๋ถ๋ถ์ด๊ฑฐ๋ ๋ ๋ง์ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฐฝ์ ์์กดํ๋ ๋์ ๋ ๋ชจ๋ํ ๋ ๊ตฌ์กฐ๋ก ๋ณํ๋๋ ๊ฒฝ์ฐ์ ๊ฐ์ ์๋๋ฆฌ์ค์์ ์ ์ฉ ํ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํ ๊ณํ๋ ๋ฐฉ๋ฒ์ด ์๊ฑฐ๋ ์ ์ด๋ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆด๋ฆฌ์ค์์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผํ๋ ๋ฐฉ๋ฒ์ ๋ฌธ์ํ ํ ๊ณํ์ด ์์ต๋๊น?
์๋
ํ์ธ์ @mochawich ์ ๋ React๋ฅผ ์ธ๋ถ๋ก ์ ์ํ๊ณ declare global
๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ง ์์ ๋ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
TS2686: 'React' refers to a UMD global, but the current file is a module. Consider adding an import instead.
@cantux TypeScript๋ Webpack ๊ตฌ์ฑ์ ์ฝ์ง ์์ต๋๋ค. React๋ฅผ ์ ์ธ๊ณ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์๋ค๋ฉด declare
ํ ์ ์์ง๋ง ๋ชจ๋์ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
@aluanhaddad ์ฃผ๋ก ๊ฐ์ ธ ์ค๊ธฐ ํธ์ถ๋ก ์ํ ํ ์์ ๊ณผ ํผ๋ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋๋ ๋ช ๊ฐ์ง๋ฅผ ๋ง์ก๋ค. ๋ค์ ์ง์ ์ด ๋ง์ต๋๊น?
์ฐ๋ฆฌ๋ ๋ชจ๋์ ๊ฐ์ ธ์ฌ ๋ ์ฝ๊ฐ์ ์์ฒญ ๋น์ฉ์ ์ง๋ถํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ์ฉํ ์ ์๋์ง ํ์ธํฉ๋๋ค. ์ด์ ์ ์์ฒญํ ๊ฒฝ์ฐ ๋ชจ๋์ด ์บ์์์๋ก๋๋๊ณ ๋ชจ๋์ด ์กด์ฌํ์ง ์์ผ๋ฉด ๊ฐ์ ธ์ต๋๋ค. ์ด ์์ฒญ์ ํผํ๋ ค๋ฉด ๋ฌด์ธ๊ฐ๋ฅผ ์ ์ญ์ผ๋ก ์ ์ํ๋ฉด Typescript๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๊ณ ๋งน๋ชฉ์ ์ผ๋ก ์ ๋ขฐํฉ๋๋ค (์ค๋งํธ ๋ฒ ๋ค๋ฌ ๊ฐ์ ธ ์ค๊ธฐ ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋์ฒด / ์ ๊ฑฐ ํ ์๋ ์์).
์ด๊ฒ์ด ๋ง๋ค๋ฉด ๊ฐ๊ฒฐ์ฑ์ ์ํด ์ฃผ์์ ์ ๊ฑฐ ํ ์ ์์ต๋๋ค. ์ค๋ ๋๋ ๊ทธ๋๋ก ๊ฑฐ๋ํฉ๋๋ค.
@codymullins ๊ฐ ์์์ ์ง๋ฌธํ๋ฏ์ด
๋ด ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ด์ ์์ ํ์ค์ ๋ฐ๋ฅด๊ธฐ ์ํด typedef ํ์ผ์ ํดํนํ๋ ๊ฒ์ด์์ง๋ง ๋ ๋ง์ typedef ํ์ผ์ด ์์๋๊ธฐ ์์ํ๋ฉด ์คํ ๊ฐ๋ฅํ์ง ์์ต๋๋ค.
๋ด ์๋๋ฆฌ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์์ ์ธ๊ธ ํ shim ์์ ๋ ์๋ํ์ง๋ง vscode๊ฐ ์ค๋ฅ๋ก ๊ฐ์กฐ ํ์ํ์ง๋ง (์์ง๋ ์ ๋๋ก ์๋ฃํ๋๋ผ๋!)
๋ชจ๋์์ UMD ์ ์ญ์ ์ก์ธ์ค ํ ๋ ์ค๋ฅ๋ฅผ์ฃผ์ง ๋ง์ญ์์ค. ์ ๊ฐ ์์
ํ๊ณ ์๋ ๋๊ท๋ชจ ํ๋ก์ ํธ๋ AngularJS์์ ์ํ๋์์ผ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์
์ Typescript๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ๋ฌผ๋ก angular
UMD ์ ์ญ ๋ฐ @types/angular
Angular ์ ํ์ ๋ํด ์๊ธฐ ์ํด์๋ Typescript๊ฐ ํ์ํฉ๋๋ค. ๋น์ ์ ์ถ๊ฐํ๋ ๊ฒ๋ง ํผ ์ฝ๊ฒ ๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ ๊ฒ "angular"
์ types
์์ tsconfig.json
ํ์ง๋ง, ์ด๋ค ์ด์ , ๊ทธ๊ฒ์ํ์ง ์๊ณ , TSC ๋๋ฅผ ๋น๋ช
. ๋ชจ๋ NPM ํจํค์ง๊ฐ ์์ํ Typescript ์์ผ๋ฉดํ๋๋งํผ ๋๋ถ๋ถ์ ์ผ๋ฐ JS์ด๋ฉฐ ์ค๋ซ๋์ ์ ์ง ๋ ๊ฒ์
๋๋ค. UMD ์ ์ญ์ด ์กด์ฌํ๋ค๊ณ d.ts
๊ฐ์ ธ์ฌ ๋ TSC๊ฐ ์ข
๋ฃ ํ ์์๋ ์ด์ ๋ฅผ ์ ๋ง๋ก ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์ด ์ํฉ์ ํํ ์ผ์ด ์๋๋๋ค. ์ ๊ฐ ์์
ํด๋ณธ ๋ชจ๋ Typescript ํ๋ก์ ํธ๋ ๋ด๊ฐ ๋ฌถ์ด์ ํ์
์ ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฐธ์กฐํด์ผํ๋ ํ๋ ์ด์์ JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๊ฒ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
๋ด ์ฌ์ฉ ์ฌ๋ก : CDN์ ๋ง์ด ์ฌ์ฉํ๋ ๊ธฐ์กด์ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์์ ์์
ํ๊ณ ์์ต๋๋ค. ๊ณตํต ์ ํธ๋ฆฌํฐ๋ ์ฌ๋ฌ ํ์ด์ง (์ : clipboardjs, lodash)์์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ํตํด ๊ฐ์ ธ์ต๋๋ค. ํด๋น ์ ์ญ ๋ณ์๋ ํ์ด์ง์์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ฐธ์กฐํ๊ณ ์ถ์ต๋๋ค. ๋ชจ๋์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๊ด๋ จ ์์ค ํ์ผ์ ๋งจ ์์ /// <reference type="$name" />
๋ฅผ ์ฌ์ฉํ์ฌ typescript ์ปดํ์ผ์ ์ํํ๋ ๊ฒ์ด ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ชจ๋์ ๋ง๋ค๋ ค๊ณ ํ ๋ ์๋์ ๋ฉ ์ถฅ๋ ๋ค.
์ค๋ ๋์์ ์ ์ ๋ ๋ ๊ฐ์ง ์ ๊ทผ๋ฒ์ด์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
/// <reference type="$name" />
๊ฐ์ ธ ์ค๊ธฐ ํ ํฐ์ ํ์ฌ ํ์ผ์ ๋ค์ ์คํ์ด์ค๋ก๋ง ๊ฐ์ ธ์ต๋๋ค.
tsconfig.json
์ ์ปดํ์ผ๋ฌ ์ต์
/ ๊ตฌ์ฑ ๋ณ์ (์ : "globals"
, "types"
)
๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ด ๋ชจ๋ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค. @RyanCavanaugh ์ ์ต์ 1์ ๋ํ ๋นํ์ ๋์ํ์ง๋ง :
๋ฐ๋๋ก ํด๋น ํ์ผ์์๋ง ์ฌ์ฉํ ์์๋ ๊ฒฝ์ฐ ์ฐธ์กฐ ์ง์๋ฌธ์ ๋ชจ๋ ๊ณณ์์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ ๋ฃ์ด์ผํ๋๋ฐ, ์ด๋ ์ ๋ง ์ฑ๊ฐ์ ์ผ์ ๋๋ค.
ํ์ฌ ๋์์ผ๋ก ์ธํด UMD ์ ์ญ๊ณผ ํจ๊ป ๋ชจ๋์ ์ ํ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ด ํจ์ฌ ๋ ์ฑ๊ฐ์ ์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ผ๋ถ ํด๊ฒฐ ๋ฐฉ๋ฒ์์๋ ๊ฒ๋ณด๋ค ๋ซ์ต๋๋ค.
์ด ๋ฌธ์ ๊ฐ ์ฌ์ ํ ๋ฏธ๊ฒฐ์ ๋๊น? ๊ทธ๋ ๋ค๋ฉด ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
@types
ํจํค์ง๋ฅผ ์ค์นํ๋ฉด ๋ชจ๋๋ก ๊ฐ์ ธ ์ค์ง ์์ ํจํค์ง๋ฅผ ์ ์ญ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ํ๋ก์ ํธ ๋ฃจํธ์ npm install -D @types/underscore
์ด๋ฉด ๋ฐ์ค์์ ์๋ฌด๊ฒ๋ ๊ฐ์ ธ ์ค์ง ์๋ ๋ชจ๋์ ์์ฑํ ์ ์์ง๋ง _
์ ์ญ์ ์ฌ์ฉํ ์ ์์ต๋๋ค (์๋ ์ฐธ์กฐ).
๊ทธ๊ฒ ๋น์ ์ด ์ถ๊ตฌํ๋ ๊ฒ์ ๋๊น?
@billti ์๋ง๋ ๋ด๊ฐ ์คํดํ๊ณ ์์ง๋ง ๊ทํ์ ์๋ ๋๋ฅผ ์ํด ์๋ํ์ง ์์ต๋๋ค.
์ฌํ์ ํ์ํ ์ต์ํ :
js / foo.ts :
// <reference types="js-cookie">
import { Bar } from "./bar";
const Foo = {
set: function() {
Cookies.set("foo", "bar");
},
get: function() {
console.log(Cookies.get("foo"));
}
};
window.onload = function() {
console.log(Cookies);
}
js / bar.ts
const Bar = {
x: 3
};
export { Bar };
package.json :
{
"name": "foo",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"private": true,
"devDependencies": {
"@types/js-cookie": "^2.1.0",
"typescript": "^2.7.1"
},
"dependencies": {
"http-server": "^0.11.1"
}
}
tsconfig.json
{
"compilerOptions": {
"module": "system"
},
"files": [
"js/foo.ts"
]
}
์ค๋ฅ ๋ฉ์์ง :
js / foo.ts (7,3) : ์ค๋ฅ TS2686 : '์ฟ ํค'๋ UMD ์ ์ญ์ ์ฐธ์กฐํ์ง๋ง ํ์ฌ ํ์ผ์ ๋ชจ๋์ ๋๋ค. ๋์ ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
js / foo.ts (10,15) : ์ค๋ฅ TS2686 : '์ฟ ํค'๋ UMD ์ ์ญ์ ์ฐธ์กฐํ์ง๋ง ํ์ฌ ํ์ผ์ ๋ชจ๋์ ๋๋ค. ๋์ ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
js / foo.ts (15,14) : ์ค๋ฅ TS2686 : '์ฟ ํค'๋ UMD ์ ์ญ์ ์ฐธ์กฐํ์ง๋ง ํ์ฌ ํ์ผ์ ๋ชจ๋์ ๋๋ค. ๋์ ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ฐ์ ธ ์ค๋ ๋์์ ๊ฐ์ ธ์จ ๋ชจ๋์ด "์ ์ ํ"UMD ๋ชจ๋๋ก ์์ฑ๋์๋์ง ( "์ฟ ํค"๋ฅผ ์ฌ์ฉํ ๋์) ๋๋ "๋์์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์๋"๋ชจ๋ (lodash ์์ฑ ๋ฐฉ๋ฒ)์ผ๋ก ์์ฑ๋์๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. .
๊ฐ์ฒด๊ฐ ๋ฐํ์์ ์๋ํ๋ ๋ฐฉ์์ ์ค๋ช
ํ๋ .d.ts ํ์ผ์ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑํ๋ ์ฌ๋๋ค์ ๋ถ์ผ์น์ ๊ฐ๋ฐ์๋ฅผ์ํ ๊ฒฝํ์ ๋ถํฌ๋ช
์ฑ ๋๋ฌธ์ "UMD ์ ์ญ ์ ํ ์ ๊ฑฐ"๋ฐฉํฅ์ผ๋ก ์๋นํ ๊ธฐ์ธ์ด๊ณ ์์ต๋๋ค. --noStrictUMD
์ตํธ ์์์ผ๋ก --strict
์๋์ ๋ ์ ์์ต๋๋ค.
๋ด๊ฐ ๋ง๋ ๋ค๋ฅธ ๊ฒ์ Monaco์ ๋ง์ถคํ AMD ๋ก๋๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ด ์์ต๋๋ค. ๊ทธ๋ค์ AMD ๋์์ ์ผ๋ถ ํ์ ์งํฉ (์์ฒญ๋ ์์ด ๋กค ์ฝ์ )์ ์ง์ํ์ง๋ง ๊ธ๋ก๋ฒ 'ํ์'๋ฅผ ๋ฐ์์ ์ ์ ํ UMD ๋ชจ๋์ ์ฌ์ฉํ๊ธฐ๊ฐ ์ ๋ง ์ด๋ ต์ต๋๋ค. ํด๋น ๋ชจ๋์ '์๊ตฌ'๊ธ๋ก๋ฒ์๋ณด๊ณ ์ ๋๋ก๋ก๋ํ์ง ๋ชปํ๋ ๊ฒฝํฅ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ชจ๋์ฝ ๋ชจ๋ ๋ก๋. ๊ฒฐ๊ตญ Monaco ๋ก๋์ ์คํฌ๋ฆฝํธ ํ๊ทธ ์์ UMD JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฃ์ ๋ค์ TS๋ ๋ชจ๋ (Monaco API๋ฅผ ๊ฐ์ ธ์์ผ ํจ)์์ ์ ์ญ์ ์ก์ธ์คํ๊ธฐ ๋๋ฌธ์ ๋ถํํฉ๋๋ค.
์๋ ํ์ธ์.
๋ด๊ฐ ๋ง๋ ๋ค๋ฅธ ๊ฒ์ Monaco์ ๋ง์ถคํ AMD ๋ก๋๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ด ์์ต๋๋ค. ๊ทธ๋ค์ AMD ๋์์ ์ผ๋ถ ํ์ ์งํฉ (์์ฒญ๋ ์์ด ๋กค ์ฝ์ )์ ์ง์ํ์ง๋ง ๊ธ๋ก๋ฒ '์๊ตฌ'๋ฅผ ๋ฐ์์ ์ ์ ํ UMD ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ง ์ด๋ ต์ต๋๋ค. ๋ชจ๋์ฝ ๋ชจ๋ ๋ก๋.
๐
๊ทธ๋ค์ด ๊ทธ๊ฒ์ ๊ณ ์น ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น?
์ ๋ ์ต๊ทผ ๋ชจ๋์ ๋ณต์ก์ฑ ๋น์ฉ์ ๋ํด ๋ง์ ์๊ฐ์ํ์ต๋๋ค. ์ํธ ์์กด์ ์ด๋ฉฐ ๋ถ๋ถ์ ์ผ๋ก ํธํ๋๋ ๋ก๋, ๋ฒ ๋ค๋ฌ, ํธ๋์ค ํ์ผ๋ฌ, ํจํค์ง ๊ด๋ฆฌ์ ๋ฐ ํ๋ ์ ์ํฌ๊ฐ ๋๋ฌด๋๋ ๋ง๊ธฐ ๋๋ฌธ์ ์ธ์ฆ ๋ณต์ก์ฑ์ด ๊ทธ๋ค์ง ์ค์ํ์ง ์์ต๋๋ค. (๋๋ ๋น์ ์ด ์ด๋ค ์๋ฆผ๋ ํ์ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค ๐).
๊ฐ๋ฐ์๋ก์ ์ฐ๋ฆฌ๋ 5-6 ๋ ์ ๋ณด๋ค ํจ์ฌ ๋ ๋ณต์กํ ํด์ฒด์ธ์ ๋ฐ์๋ค์์ผ๋ฉฐ ๋ณต์ก์ฑ์ ์ฃผ์ ์์ธ์ ๋ชจ๋์ด์์ต๋๋ค.
ํฌ๊ธฐํ๊ณ ์ด๋ฌํ UMD ํจํค์ง๋ฅผ ์ ์ญ์ผ๋ก๋ก๋ํ๊ธฐ ์์ํ๋ฉด ๋ชจ๋ ๊ฒ์ด ๋ฌด์์์ํ ๊ฒ์ผ๊น ์?
ํ์ง๋ง ... ์ฌ๋๋ค์ ๊ทธ๋ ๊ฒํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ๋์ฐํฉ๋๋ค!
๋ด ๋ง์,์ด Stack Overflow Answer ๋ 61 ๐์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ง๋ ๋ฐ๋ ๋์ ํจํค์ง์ 99 %์ ๋ํด ๋ชจ๋ ์๋ชป๋ ๊ฒ์ ์ ์ํ์ต๋๋ค. (์ ์๋ ์ค๋ ์์นจ ์ ๊ณต๋ ํผ๋๋ฐฑ์ผ๋ก ์ธํด UMD ์ข ์์ฑ์ ๋ํ _option_ ๋ชจ๋์ ์ธ๊ธํ๋๋ก ์น์ ํ๊ฒ ์ ๋ฐ์ดํธํ์ต๋๋ค.)
์ด ๋ชจ๋ ๊ฒ์ด ์ ๋งฅ์ ๋ค์ด๊ฐ์ ๊ธ๋ก๋ฒ๋ก ๋์๊ฐ ์๋ ์์ต๋๋ค!
ํ์ง๋ง ... ์ฌ๋๋ค์ ๊ทธ๋ ๊ฒํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ๋์ฐํฉ๋๋ค!
๋ฌธ์ ๋ JS ๋ชจ๋์ ๊ตฌ์๊ณผ ๊ตฌํ์ด ๋ชน์ ํํธ ์๊ธฐ ๋๋ฌธ์ ์ ์ญ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ๋ซ๊ณ ๋ ์ฝ๋ค๋ ๊ฒ์ ๋๋ค. ๋ชจ๋์ด ์ฒ์๋ถํฐ ์ ์ ํ๊ฒ ์ค๊ณ๋๊ณ ๊ตฌํ ๋์๋ค๋ฉด ...
๋ค์ํ ๋ก๋ ๋ฐ ์ผ๋ถ ๋ก๋์์ ๋ค์ํ ํธํ์ฑ ์์ค์ ๊ฐ์ง ๋ชจ๋๋ก ์ข ์์ฑ์๋ก๋ํ๋ ๊ฒ์ด ๋๋ฌด ๋ฒ๊ฑฐ๋กญ๊ธฐ ๋๋ฌธ์ ๋ชจ๋๊ณผ UMD ์ ์ญ์ ํผํฉํ์ฌ ์ผ์น์ํค๊ณ ๋์ ์ง์ ์ข ์์ฑ ๋ฒ๋ค๋ง์ ์ง์ํ์ง ์๊ณ ๋ฌ๋ฆด ๋ถ.
์ด "๊ธฐ๋ฅ"์ ์ค์ ๋ก UMD ๋ชจ๋์ ์ฌ์ฉํ๋๋ผ๋ ๊ณต์ UMD ๋ชจ๋ ์ง์์ ์ฌ์ฉํ์ง ์์์ ์๋ฏธํฉ๋๋ค. .d.ts ํ์ผ์์ ์ ์ญ์ผ๋ก ๋ด๋ณด๋ด๊ณ ๋ชจ๋ ๊ฒ์ ๋ค์ ๋ด๋ณด๋ด๋ ํด๋น ์ด๋ฆ์ ์์ฒด ๋ชจ๋์ ์๋์ผ๋ก ๊ฐ๊ฒ๋ฉ๋๋ค.
์ด๊ฒ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ์ต์ 2๊ฐ ์๋ํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ผ๋ถ ๊ตฌ๋ฌธ ๋๋ ๊ตฌ์ฑ์์ "์ด UMD ์ ์ญ์ ์ค์ ๋ก ์ ์ญ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค."๋ผ๊ณ ํ์ํ๋๋ก ํ์ฉํฉ๋๋ค.
๋ํ ๊ตฌ์ ์คํ์ผ์ js ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋๋ฌด ๋ง๋ค๋ ๊ฒ๋ ๋์์ด๋์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ๋ค์ ๋ชจ๋ ๋ค์ ์ฐ๋ ๊ฒ์ ์๋ฌธ์ ์ฌ์ง๊ฐ ์์ต๋๋ค. ๋จ๋จํ ์ด๋
๋กค์
์ด ๋ชจ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋๋ก ๊ตฌ์ฑํ๋ฉด ๋ด ์๊ฐ์ ๋ญ๋นํฉ๋๋ค.
์ฌ๋๋ค์ "์ํฐํ๋ผ์ด์ฆ ์๋ฐ"๋ฅผ ๋น์์ง ๋ง ํ๋ฒํ ์๋ฐ๋ ์คํ ๊ฐ๋ฅํ
1.0์์ ๋ชจ๋ ์์คํ
. ์๋ฒฝํ์ง๋ ์์์ง๋ง ์์ ํ ์๋ง์ ์๋ ์์ต๋๋ค.
"UMD ์คํ์ผ ์ ์ญ ํ์ฉ"์ ํ์คํ ์ต์ ์ด์ด์ผํฉ๋๋ค.
2018 ๋
4 ์ 2 ์ผ ์์์ผ ์ค์ 1:40 Kagami Sascha Rosylight <
[email protected]> ์์ฑ :
๋๋ ํด๊ฒฐํด์ผํ๋ค :
/ * ๋ชจ๋ : es2015 * /
// js-yaml์ UMD๋ฅผ ์ง์ํ์ง๋ง ES2015 ๋ชจ๋์ ์ง์ํ์ง ์์ต๋๋ค! import * as _jsyaml from "js-yaml"; declare var jsyaml : typeof _jsyaml; jsyaml.safeLoad ( "");โ
๋๊ธ์ ๋ฌ์ ๊ธฐ ๋๋ฌธ์ ์์ ํ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/Microsoft/TypeScript/issues/10178#issuecomment-377885832 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AA50ljAD33sr09EGFVAsURbu1x75X-lOks5tkeQCgaJpZM4Jd8jX
.>
๋ค๋์ ์กฐ์ด์ค
์จ์ ํ์๋ ์ง๊ตฌ๋ฅผ ์์๋ฐ์ ๊ฒ์ ๋๋ค. ์ฉ๊ฐํ์๋ ๋ณ๋ค ์ฌ์ด์์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
Angular ํ๋ก์ ํธ์์ three.js๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์์ ํ๋ค
import * as THREE from "three";
import {Vector3} from "three";
๋ ์์๋๋ก ์๋ํฉ๋๋ค.
three
๋ฐ @types/three
npm ํจํค์ง๊ฐ ์ค์น๋์ด ์์ผ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ์์ ์ผ๋ก ์๋ํฉ๋๋ค. ๋ด๋ถ์ ์ผ๋ก three/build/three.module.js
์ฌ์ฉํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. @types/three/index.d.ts
ํ์ผ์ export as namespace THREE
ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋๋ฐ, ์ ๊ฐ ์์ ํ ์ต์ํ์ง๋ ์์ง๋ง ์๋ํฉ๋๋ค.
์ด ํน๋ณํ ๊ฒฝ์ฐ์ ๋ฌธ์ ๋ three.js ์์คํ
์ OrbitControls.js
๋ผ๋ ๋ ๋ค๋ฅธ ๊ด๋ จ ํ์ผ์ด ์๋ค๋ ๊ฒ์
๋๋ค (๊ธฐ๋ณธ์ ์ผ๋ก ์๊ฐ๋ฝ์ด๋ ๋ง์ฐ์ค๋ก 3D ์ด๋ฏธ์ง๋ฅผ ํ์ ํ ์ ์์). ๋ฌธ์ ๋์ด ํจ์๊ฐ ๋ฐ ๊ณต์์ ์ผ๋ก three.js ๋ฐฐํฌ์ ์ผ๋ถ์ด์ง๋ง examples
ํธ๋ฆฌ์์๋ ํ๋ฒํ ์ด์ JS ํ์ผ์ด๋ฉฐ THREE
์์ฑ์ ์ง์ ๋ฐฐ์น๋๋ค๋ ๊ฒ์
๋๋ค. ์ ๋ค๋ฅธ API๋ฅผ ์ง์ ์ฌ์ฉํ๊ณ window.THREE
์์ ์ฐพ์ ๊ฒ์ผ๋ก ์์๋๋ ๋ค๋ฅธ API๋ฅผ ์ง์ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ํ์ผ์ด "ํ์"ํ๋๋ผ๋
require("three/examples/js/controls/OrbitControls.js");
window.THREE
๋ฅผ ์ฐพ์ ์์๊ณ ์์ ์ด ์ฌ์ฉํ๋ THREE ์์คํ
์ ๋ค๋ฅธ ๋ถ๋ถ์ ์ก์ธ์ค ํ ์ ์์ต๋๋ค. ๋ด๊ฐ ์ง์ ๊ฐ๋ ์ฌ์ฉํ์ฌ ์ ์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจ ํ ์ scripts
์ฌ์ฐ angular.json
(๊ตฌ์ ๊ฑฐ์ ๋น์ท <script>
ํ์ง๋ง ๋ด๊ฐ ์๋ชป ๋ ์๋์์ ๊ฒฝ์ฐ, ํ๊ทธ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ๋ฒ๋ก๋ํ์ต๋๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด import * as THREE from "three";
๋ฌธ์ ์ ๊ฑฐํ์ต๋๋ค. foo: THREE.Vector3
์ ๊ฐ์ ์ ํ์ ์ฌ์ ํ โโํ์ธํ ์ ์์ง๋ง new THREE.Vector3()
๊ฐ์ ์ฐธ์กฐ๋ ์
๋ช
๋์
'THREE'๋ UMD ์ ์ญ์ ์ฐธ์กฐํ์ง๋ง ํ์ฌ ํ์ผ์ ๋ชจ๋์ ๋๋ค. ๋์ ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. [2686]
์ด ์์ ์์ ์ ๋ OrbitControls.js
ํ์ผ๊ณผ ES6-ify ๋ฐ / ๋๋ TS-ify ํ์ผ์ ๊ฐ์ ธ์์ผ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ ์์ต๋๋ค. 'orbit-controls-es6' ์ ๊ฐ์ ํ์์ด๋ฏ๋ก ๋ค๋ฅธ ์ฌ๋์ ์์ ๋ด ์ถ์ ๋งก๊ธฐ๋ ๊ฒ์ ์ซ์ดํ๋๋ผ๋ ๋ด ์ถ์ ๋จ์ํํ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฐ ๊ด๋ จ๋์ง ์์ ๋ฉ๋ชจ์์ ํ ๊ฐ์ง ์ด์ํ ์ ์ @types/three
์ฝ๋ ์์ฒด๊ฐ three
๋ชจ๋ ์์ฒด์ ์์ง ์๋๋ผ๋ OrbitControls
์ ํ์ ์ ์ํ๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ OrbitControls
๋ผ๋ ํด๋์ค๋ฅผ ์ ์ํ๋ ๋ชจ๋ ์ ํ์ ์ด๋ค ๊ฒ๊ณผ๋ ์ฐ๊ด์ํค๋ ๋ฐฉ๋ฒ์ ์ ์ ์์ต๋๋ค. ์์์ ์ธ๊ธ ํ orbit-controls-es6
์ ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ ์ธํ๊ณ ์ถ์ต๋๋ค. ์ด ์ ํ์ด์ง๋ง ๊ทธ๋ ๊ฒํ๋ ๋ฐฉ๋ฒ์ ์ ์ ์์ต๋๋ค.
๋ด๊ฐ ๋ง์นจ๋ด ์๊ฐํด ๋ธ ํด๊ฒฐ์ฑ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import * as THREE from "three";
Object.defineProperty(window, "THREE", {get() { return THREE; }});
require("three/examples/js/controls/OrbitControls.js");
์ด์ ๋ ์ฝ๊ฐ ํผ๋ ์ค๋ฝ์ง๋ง ์๋ํฉ๋๋ค. ํ์ ํ์ผ์๋ ๋ค์๊ณผ ๊ฐ์ ํ์ด ์์ต๋๋ค.
THREE.OrbitControls = funtion() { };
์๋ํ์ง ์์์ผํ๋ import * as THREE from "three";
๋ฌธ์ผ๋ก ์ธํด ๊ฒฐ๊ณผ์ ์ผ๋ก 3 ๊ฐ์ "๋ค์ ์คํ์ด์ค"์ ํ ๋น๋๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค.
@RyanCavanaugh ๊ฐ # 26223์ ํผ๋๋ฐฑ์ ์ฌ๊ธฐ์ ๋ณต์ฌ ํด๋ฌ๋ผ๊ณ ์์ฒญํ์ต๋๋ค.
๋๋ ์ฌ๋๋ค์ด ์์กดํ๋ ๋ช ๊ฐ์ง ํ์คํ ํ์ํ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ์๋ ๋ค์ ํฐ TypeScript ์ฝ๋๋ฒ ์ด์ค (Google์ ๋ด๋ถ ๋ชจ๋
ธ ๋ ํฌ)๋ฅผ ์ ์งํ๊ณ ์์ต๋๋ค. ์๋ ์ฌ์ฉ์๋ .d.ts
๊ฐ ์ธ๋ถ ๋ชจ๋๋ก ๋ฐ๋๊ธฐ ์ ์ angular
์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์ ์ญ ์ ํ์ ์์กดํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ชจ๋๊ณผ ๋ช
์ ์ ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
ํ์ต๋๋ค. ์ค์ ๋ก export as namespace
d UMD ์ ์ญ์ ์ ํ ๋ฐ ๊ฐ ์ฐธ์กฐ ๋ชจ๋์ ๋ํด ๊ธฐํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํญ์ ๋ช
์์ ์ธ ๊ฐ์ ธ ์ค๊ธฐ๊ฐ ํ์ํ๋ค๊ณ ์์ํ์ผ๋ฉฐ ๋ง์ด๊ทธ๋ ์ด์
ํ ๋ ๋ค์ ์์ ์ฐจ๋ฆฌ์ง ๋ชปํ์ต๋๋ค (์์).
๊ฐ์ ธ ์ค์ง ์์ ์ฝ๋ ์ฌ์ฉ์ ํ์ฉํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ๊ฐ๋ฉ๋๋ค.
์ด๋ ์ฝ๋๊ฐ ์ ์ญ "๋ฐฑ๊ทธ๋ผ์ด๋"์ ํ ์ ์์ ์์กดํ์ฌ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค (ํนํ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ธ๋ผ์ฐ์ ๋๋ ๊ธฐํธ๋ก ์ด๋ํ์ง ์๋ ์ฝ๋ ๊ฒํ ์์).
์ฝ๋ ์ข ์์ฑ์ ๋ชจํธํ๊ฒํฉ๋๋ค.
๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ bazel์์ ๊ตฌํํ๋ "์๊ฒฉํ deps"๋ผ๊ณ ํ๋ "๋ชจ๋ ์ํฌํธ์ ๋ํด ๋ช ์์ ์ธ ๋น๋ ๋ ๋ฒจ ์์กด์ฑ์ ๊ฐ์ ธ์ผํฉ๋๋ค"์ ์ฝ์ ์ฐํํฉ๋๋ค.
๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์์๋ ์ฝ๋์ ๋ช
์์ ์ธ ์ข
์์ฑ์ด ์์ด์ผํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ์ฅ์๋ฅผ ๊ด๋ฆฌ ํ ์ โโ์๊ฒ๋ฉ๋๋ค. ์ด์ A -> B -> C
๋ฐ ์ ์ญ ์ ํ์ ์ถ์ ํ๋ ์ข
์์ฑ์ด์๋ ๊ฒฝ์ฐ B
์ C
์ ๋ํ ์ข
์์ฑ์ด ์๊ธฐ ๋๋ฌธ์ B
A
์ฝ๋๋ฅผ ์ปดํ์ผํ๊ธฐ๊ฐ ์ฝ์ต๋๋ค. ๋์ค์ B
๊ฐ ์ข
์์ฑ์ ์ ๊ฑฐํ๋ฉด A
๊ฐ ์ค๋จ๋ฉ๋๋ค. ์ด๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฅ์์ ์๊ธฐ์น ์์ ํ๊ธ ํจ๊ณผ๋ฅผ ๊ฐ์ ธ์ ์ฝ๋ ๊ฒฉ๋ฆฌ๋ฅผ ์๋ฐ ํจ์ ์๋ฏธํฉ๋๋ค.
์ด๋ก ์ธํด ์ฝ๋๊ฐ ๊ฐ์ ๋ํด ํ๋์ ์ ๋์ฌ๊ฐ์๋ ๋ชจ๋์ ์ผ๊ด์ฑ์์ด ๊ฐ์ ธ์ค๊ณ ๋ค๋ฅธ ์ ๋์ฌ์ ํจ๊ป ํด๋น ์ ํ์ ์ฌ์ฉํฉ๋๋ค (ํนํ AngularJS, ng ๋ angular์ ๊ฒฝ์ฐ).
๊ณต๊ธ ์
์ฒด์ DefinitelyTyped ์ฌ๋ณธ์์ export as namespace
๋ฌธ์ ์ ๊ฑฐํ์ฌ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง, ์ ์ด๋ ์ฐ๋ฆฌ์๊ฒ๋์ด ๊ธฐ๋ฅ์ด ์ฝ๋ ์ ์ง ๊ด๋ฆฌ ๋ฐ ์์ง๋์ด๋ง ๋ชฉํ์ ๋ฐํ๋ ๊ฒ์
๋๋ค. ๋๋ ๋ฌธ์ ๊ฐ ๊ตฌ๊ธ๊ณผ ๊ฐ์ ๋จ์ผ ์ ์ฅ์ ์ํฉ์์ ๋ ๋๋๋ฌ์ง๋ค ๊ณ ์๊ฐํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋ ์์ ์ฝ๋๋ฒ ์ด์ค์๋ ์ ์ฉ๋๋ค.
๊ทํ๊ฐ ๊ฒ์ ํ ์ฌํญ์ ์ฐ๋ฆฌ ์ํฉ์ ์ ๋์ ์ผ๋ก ์ค์ํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ AMD ๋ชจ๋๋ก ์ฐ๋ฆฌ ์์ ์ ์ฝ๋๋ฅผ ๊ตฌํํ๊ณ ์ฐ๋ฆฌ๊ฐ ํต์ ํ ์์๋ ์ํฉ์ผ๋ก ์ธํด UMD ๋ชจ๋์ ์์กด์ฑ์ ์ ๊ณตํด์ผํฉ๋๋ค (ํ์ง๋ง JS ๋ชจ๋์ ๊ฐ๋ ๊ณผ ๊ตฌํ ๋ชจ๋์์ ๋์ฐํ ๊ฒฐํจ์ด์๋ ๊ฒ์ผ๋ก ์์ฝํ๊ฒ ์ต๋๋ค). ์ด ๊ธฐ๋ฅ์ ํตํด ์ฐ๋ฆฌ๋ ์ถ์ ์๋นํ ๋จ์ํ ํ ์ ์์ต๋๋ค.
TS3๋ฅผ ์ฌ์ฉํ๋ฉด์ด๋ฅผ ๋ฐฉ์ง ํ ์์๋ ๋ฐฉ๋ฒ์ ์์๋ผ ์ ์์์ง๋ง ๊ทธ๋ ๊ฒํ๋๋ผ๋ ํ์ํ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์๋ฃํ๊ธฐ๊น์ง๋ ์ ์ด๋ 2 ๋ ์ด ๊ฑธ๋ฆด ๊ฒ์ด๋ฏ๋ก ์ฌ์ ํ ๋งค์ฐ ์ ์ฉํ ๊ธฐ๋ฅ์ด ๋ ๊ฒ์ ๋๋ค.
์ด๋ฆฐ ์ง๋ฌธ : " ๋ชจ๋ UMD ๋ชจ๋์ ๋ํ ์ก์ธ์ค ํ์ฉ"์ ๋ํ ํ๋์ ์ ์ญ ํ๋๊ทธ๋ก ์ถฉ๋ถํฉ๋๊น, ์๋๋ฉด ์ฌ๋๋ค์ด ์ค์ ๋ก ์ค๋ฅ์ ๋ํ ๋ชจ๋ ๋ณ ์ ์ด๊ฐ ํ์ํฉ๋๊น?
"๋จ์ง ํ๋์ ๊น๋ฐ"์ โค๏ธ ํฌํ
"๋ชจ๋ ๋ณ ์ ์ด ํ์"์ ๐ ํฌํ
๋ํ tsconfig.json ์ "types"
์ต์
์ ๋ช
์์ ์ธ ๋ชฉ๋ก์ด ์์ด๋ ๋ชจ๋์์ UMD ์ฌ์ฉ์ ํ์ฉํ์ง ์๋์ง ๊ณ ๋ คํ๊ณ ์์์ต๋๋ค. ์ ํ์ด ์๋์ ์ผ๋ก ์กด์ฌ ํจ์ ์๋ฏธํฉ๋๋ค. (๋ถ๋ช
ํ ๊ฐ์ ธ ์ค๋ ๊ฒ์ ์์ ์ค๋ฅ๋ฅผ ๋ฐฐ์ ํ์ง๋ ์์ต๋๋ค).
๋๋ ์ ์ฌํ๊ฒ /// <reference types="..." />
๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ๋๋ ๋ชจ๋ (์ฆ, ์ธ๊ธ ๋ '๋ชจ๋ ๋ณ ์ปจํธ๋กค')์์ ํด๋น ํจํค์ง์ UMD ์ฌ์ฉ์ ํ์ฉํด์ผํฉ๋๋ค.
@RyanCavanaugh # 26233์๋ ํ๋๊ทธ๋ฅผ ์ง์ ํ ์์ ์ ๋๊น?
๋๋ ๊ทธ๊ฒ์ด "ํฉ๋ฒ์ ์ผ๋ก ๋ฌดํดํ ์ง"ํ์คํ์ง ์๋ค. @types/jquery
๋ฅผ ์๋ก ์ฌ์ฉํฉ๋๋ค. $
๋ฐ jQuery
๋ JQueryStatic
์ธํฐํ์ด์ค์ ๋งคํ๋๊ณ ์์๋ก ๋ด ๋ณด๋
๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ชจ๋ ๋ชจ๋์ ๊ฐ์ ธ ์ค๊ธฐ์์ด $
๋ฐ jQuery
์ก์ธ์ค ํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋นํ์ฑํ ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@RyanCavanaugh ์, TS ๋ฐฉ์ถ์ด ์ํฅ์๋ฐ์ง ์๋๋ค๋ ์ ์์ ๋ฌดํดํฉ๋๋ค. ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ก์ธ์ค ํ ์์๋ @types
๋ํ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ํ๋ค๋ฉด ๋ฌธ์ ๊ฐ๋ฉ๋๋ค. ์ต์ํ ๋ชจ๋ ๋ฒ์ ์ ํ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ ์ ์ญ ์ ํ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์
๋๋ค. ๋ฐฉ์ถ์ด ์ํฅ์๋ฐ์ง ์๋๋ผ๋ ์ก์ธ์ค ํ๋๋ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค.
์ค์ ๋ก jQuery์ ๊ฒฝ์ฐ emit๊ฐ ์ํฅ์๋ฐ์ต๋๋ค. $()
๋ ๊ฐ์ ธ ์ค๊ธฐ์์ด ๋ชจ๋์์ ๋ด ๋ณด๋
๋๋ค.
๋ชจ๋ ๋ชจ๋์์ UMD ์ ์ญ์ ๋ํ ์ก์ธ์ค๋ฅผ ํ์ฉํ๋ ์ ํ๋๊ทธ์ ๋ํ PR ์๋ฝ.
๊ตฌํ ์ธก๋ฉด์์๋ ๋งค์ฐ ๊ฐ๋จํ์ง๋ง ์ด๋ฆ์ ์ง์ ํด์ผํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ ์ ๊ฒํ ํ์์์ ์์ญ ๋ช ์ ๋์ฐํ ์ด๋ฆ์ ๊ฑท์ด์ฐจ ๊ณ ๋ชจ๋ ์ซ์ด ํ์ผ๋ฏ๋ก ๋ง์๋ ๊ฒ์ ์๊ฐํด๋ด๋ ๊ฒ์ ๋ชจ๋์๊ฒ ๋ฌ๋ ค ์์ต๋๋ค. ์ค๋จํ์ญ์์ค.
์ฐ๋ฆฌ๋ ์ ์ ๊ฒํ ํ์์์ 12 ๋ช ์ ๋์ฐํ ์ด๋ฆ์ ๊ฑท์ด์ฐจ ๊ณ ๋ชจ๋ ์ซ์ดํ์ต๋๋ค.
๊ทธ๋ค์ ๋ฌด์์ ๋๊น?
๊ทธ๋์ ๋ง์๋ ๊ฒ์ ์๊ฐํด๋ด๋ ๊ฒ์ ์ฌ๋ฌ๋ถ์ ๋ชซ์ ๋๋ค.
umdUseGlobal
๋๋ ๋ค๋ฅธ ๊ฒ.
UMD ์ ์ญ์ ์ผ๋ฐ์ ์ผ๋ก export as namespace
์ด๋ฏ๋ก UMD ์ ์ญ ํ๋๊ทธ์ ์ด๋ฆ์ผ๋ก importAllNamespaces
๋ฅผ ์ ์ํฉ๋๋ค.
@RyanCavanaugh ํ์ด ์ ํ ๋ฌธ์ ์ ๋ํด ๋ ผ์ ํ์ต๋๊น?
@FranklinWhale ์.
@saschanaz ์ด๋ฏธ์ด ์ง๋ฌธ์ํ์ง๋ง ์ ๋ ๊ถ๊ธํฉ๋๋ค ... @RyanCavanaugh ์ด๋ค ๋์ฐํ ์ด๋ฆ์ด ๋ ผ์๋์๋์ง ๊ธฐ์ตํ์ญ๋๊น?
์ฒด์ธ์ด ์ด๋ ๊ฒ ๋ ๊ฒ ๊ฐ์์
allowUmdGlobalAccessFromModules
-๊ฐ์ฅ ์ ํํ์ง๋ง ๋๋ฌด ๊ธธ๋คassumeGlobalUmd
-์ดallowModuleUmdGlobals
- "์ ์ญ"??umdAlwaysGlobal
-๐คขallowUmdGlobals
-ํ์ง๋ง ์ด๋ฏธ ํ ์ ์์ต๋๊น?allowUmdGlobalAccess
-๋ชจ๋ ๋ถ๋ถ์ ๊ฑด๋ ๋ฐ์ง ๋ง ์๋ฌด๋ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๊น?๊ฐ์ ํ๋ฉด ๋ง์ง๋ง ํ๋๋ฅผ ์ ํํฉ๋๋ค
๊ฐ์ฌํฉ๋๋ค!
๋๋ allowUmdGlobalAccessFromModules
๋ฅผ ๊ฐ์ฅ ์ข์ํ๋๋ฐ, ๊ธธ์ด๋ ๊ธธ์ง๋ง ๊ทธ ์ ๋ฐ๋๋ ๊ธฐ์ตํ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์
๋๋ค. "๋ชจ๋์์ UMD ์ ์ญ์ ์ก์ธ์ค ํ ์์๋ ์ต์
์ ๋ฌด์์
๋๊น? ์, ๋ฌผ๋ก allowUmdGlobalAccessFromModules
์
๋๋ค!"
์ ๋์ฌ "allow"๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์ต์ ์ ๋ช ๋ช ๊ท์น๊ณผ ์ผ์นํฉ๋๋ค.
๊ฒ๋ค๊ฐ ... ์ฝ๊ฐ์ ๋ค๋ฅธ ์ต์ ์ด ์์ต๋๋ค :)
allowUmdGlobalAccessFromModules
: 31 ์
allowSyntheticDefaultImports
: 28 ์
strictPropertyInitialization
: 28 ์
suppressExcessPropertyErrors
: 28 ์
suppressImplicitAnyIndexErrors
: 30 ์
forceConsistentCasingInFileNames
: 32 ์
ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น? ์ง๋ ํ ์๊ฐ ๋์ ์ธํฐ๋ท ๊ฒ์์ํ๋๋ฐ ์คํ ๊ฐ๋ฅํ ์๋ฃจ์
์ ์ฐพ์ ์ ์์ต๋๋ค.
์ฐจ๋ผ๋ฆฌ '์๋ฌด'๋ก ์บ์คํ
ํ๊ฑฐ๋ ์๋ํ๋ Typescript ๋ฒ์ ์ผ๋ก ๋ค์ด ๊ทธ๋ ์ด๋ํ์ง ์๊ณ ๋ค๋ฅธ ์ต์
์ ์ฐพ์ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ปดํ์ผ๋ฌ ํ๋๊ทธ๊ฐ์๋ ์คํ์ ๋น๋๊ฐ ์ด๋๊ฐ์ ์์ต๋๊น?
(๊ทธ๋ฐ๋ฐ 'allowUmdGlobalAccessFromModules'๋ ํ๋ฅญํ ์ด๋ฆ์
๋๋ค. ํ๋ฃจ์ 50 ๋ฒ ์
๋ ฅํ๋ ๊ฒ๊ณผ๋ ๋ค๋ฆ
๋๋ค. :-))
์ฐ๋ฆฌ๋ ์ต์์ HTML ํ์ผ์ ์ ์ ์ผ๋ก ํฌํจ ๋ lodash์ ํจ๊ป tsc 3.2.2๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. require.js๋ก; ์ต์ DefinitelyTyped์์ ์ป์ d.ts ์ปดํ์ผ์ ์คํจํ ์์ ์ฝ๋ :
/// <reference path="..." />
class Example<T extends IThingWithTitle<T>> {
public test = (arg : T[]) : void => {
_.sortBy(arg, (el : T) => { return el.title; }); // TS2686: '_' refers to a UMD global, but the current file is a module. Consider adding an import instead.
};
}
export = Example;
(ํ๋ก์ ํธ๋ฅผ ๊ฑฐ๊พธ๋ก ๋ค์ง์ด ์ผํ๋ค๊ณ ๋งํ์ง ๋ง์ธ์. ์ฐ๋ฆฌ๊ฐ ์ด๋ค๋ฉด์์ ๋ค์ณ์ ธ ์๋ค๋ ๊ฒ์ ์๋๋ค)
์
๋ฐ์ดํธ : ((
@Gilead ,์ด ๋๊ธ์ ์๋ฃจ์ ์ ํ์ฌ ์ ์๋ํฉ๋๋ค. https://github.com/Microsoft/TypeScript/issues/10178#issuecomment -263030856
์ด๊ฒ์ ์ง์ ์ด ์์ต๋๊น? ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ธ๊ธ ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋ํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค ( [email protected]
).
๋จผ์ ์ด๊ฒ์ ์๋ํ์ต๋๋ค.
import 'firebase';
declare global {
const firebase;
}
์ด๋ ์ ์ญ firebase
์ any
์ ํ์ ์์ ์ ์ผ๋ก ์ ๊ณต ํ ๋ค์ ๋ค์ ์คํ์ด์ค (๋์ผํ ์ด๋ฆ)๋ฅผ ์ฌ๊ธฐ์ ์ ์ฉํฉ๋๋ค. ๋จผ์ firebase
๋ชจ๋ ์ต์์ ํค์ ๋ํ ์ ์ ํ ํดํ / ์ง๋ฅ์ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ค์ ๋ก ์๋ํ์ง ์์ต๋๋ค (๊ทธ๋ฐ ๋ค์ any
์ ํ์ผ๋ก ์ฌ์ฉํ๋๋ก ์ ํํ๊ธฐ ๋๋ฌธ์ ๋ฒ๊ทธ ์ผ ์ ์์ต๋๊น?) :
๊ทธ๋์ ๋๋ ์ฑ๊ณตํ์ง ์๊ณ ์ฌ๊ธฐ์ ์ธ๊ธ ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๋ํ์ต๋๋ค (๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ๋ ์๋ํฉ๋๋ค).
import _firebase from 'firebase'; // same with = require('firebase')
declare global {
const firebase: typeof _firebase;
}
=> 'firebase'๋ ์์ฒด ์ ํ ์ฃผ์์์ ์ง์ ๋๋ ๊ฐ์ ์ ์ผ๋ก ์ฐธ์กฐ๋ฉ๋๋ค.
(๋ค์ ์คํ์ด์ค๊ฐ ๋ณ์นญ์ด ์๋๋ผ๋?)
๋๋ ๋ํ ์๋ํ๋ค
import * as _firebase from 'firebase';
declare global {
const firebase: typeof _firebase;
}
=> ๊ฐ์ ธ ์ค๊ธฐ ๋ณ์นญ '_firebase'์ ์ํ ์ ์.
( ์ ์ ์ export = firebase; export as namespace firebase;
๋๋ฌธ ์ผ๊น์?)
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก import 'firebase'
์ํํ๋ฉด ๋ค์
'firebase'๋ UMD ์ ์ญ์ ์ฐธ์กฐํ์ง๋ง ํ์ฌ ํ์ผ์ ๋ชจ๋์ ๋๋ค. [2686]
๋๊ตฌ๋ ์ง ์ด๊ฒ์ ๋ํ ํด๊ฒฐ์ฑ
์ด ์๋ค๋ฉด ๋งค์ฐ ๊ฐ์ฌ ํ ๊ฒ์
๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ง๊ธ๊น์ง ์ธ๊ธ ๋์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํ ์ ์ ์ค ํ๋๊ฐ ์ ๋ง ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค (ํ๋๊ทธ, ํธ๋ฆฌํ ์ฌ๋์ ์ฐธ์กฐ, tsconfig์ types
, global
๋๋ external
๊ฐ์ฒด ํฌํจ) tsconfig์์).
Re @aluanhaddad ๋ ์ ์ฝ๋ฉํธ
์ด ๋ชจ๋ ๊ฒ์ด ์ ๋งฅ์ ๋ค์ด๊ฐ์ ๊ธ๋ก๋ฒ๋ก ๋์๊ฐ ์๋ ์์ต๋๋ค!
๋๋ ์ ์ญ์ผ๋ก ๋์ ๊ฐ๋ ค๋ ๊ฒ์ด ์๋๋ผ, ๋ช ๊ฐ์ง ์ด์ ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋ด ์ฑ ๋ฒ๋ค๊ณผ ๋ณ๋๋ก ๋ช ๊ฐ์ง ๋ฌด๊ฑฐ์ด ์ข ์์ฑ์๋ก๋ํ๋ฉด์ ๋ค๋ฅธ ๋ชจ๋ ์์ ์ ๋ชจ๋์ ์ฌ์ฉํ๋ ค๊ณ ํฉ๋๋ค. ์ข ์์ฑ์ด ์ ๋๋ก ์บ์ ๋ ์ ์์ต๋๋ค. ๋ด ์ฑ ๋ฒ๋ค๋งํผ ์์ฃผ ์ ๋ฐ์ดํธ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ด ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ํญ๋ฐํ์ง ์์ต๋๋ค (๋๋ก๋ ์ฝ๋ ๋ถํ ๋ก ์ธํด ๋ฒ ๋ค๋ฌ์ ๋์ผํ ์ข ์์ฑ์ด ์ฌ๋ฌ ๋ฒ ํฌํจ๋จ). ์ด๋ ๋ด ์ฑ ์ฌ์ฉ์์ ๋ค์ด๋ก๋๊ฐ ์ ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ฐ๋ฐ ์ค์ ๋ด ๋ฒ๋ค์ ์ฌ ๊ตฌ์ถํ๋ ๊ฒ์ด ํจ์ฌ ๋น ๋ฆ ๋๋ค.
์ด๊ฒ์ ์ถ๊ฐํ๊ธฐ ๋งค์ฐ ์ฌ์ด ๊ธฐ๋ฅ์ ๋๋ค. ์ปค๋ฎค๋ํฐ ํ์์ด ๊ทธ๊ฒ์ ๋ฐ์๋ค์ด๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค.
@RyanCavanaugh ๋๋ ๊ทธ๊ฒ์ ๋ค์ฌ๋ค๊ณผ ์ข
๋ฅ ์๊ฐ์ ๋์ ์ต์
์ ์ถ๊ฐ ํ ํ์๊ฐ ๋ฐ์ผ๋ก compiler/types.ts
ํ๊ณ ์๋ UMD ๊ธ๋ก๋ฒ ์ฒดํฌ ์์ compiler/checker.ts
ํ๊ณ , ๋๋์ ์ถ๊ฐ ํ ํ์๊ฐ ์๋ค๊ณ ์๊ฐ compiler/commandLineParser.ts
๋ฟ๋ง ์๋๋ผ ...ํ์ง๋ง ์์ค์ ์ ํ ์ต์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฃํ๋ ๋ฐ ๊ฝค ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค (i18n์ ๊นจ์ง ์๊ณ CLI ํ๋๊ทธ์ ๋ํ ์ค๋ช
์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ฒ๋ผ) . ์ง๊ธ์ ์ด๋ฏธ ์ถ์ฒ๋ฅผ ์๊ณ ์๋ ๋ค๋ฅธ ์ฌ๋์ด ๊ทธ๊ฒ์ ๋ฐ์ ๋ค์ผ ๋๊น์ง ๊ธฐ๋ค๋ฆด ๊ฒ์
๋๋ค.
@simonhaenisch ๋น ๋ชจ๋ ์ ์ธ ํ์ผ์์ ์ ์ธ ํ ์ ์์ผ๋ฉฐ ์ํ ์ฐธ์กฐ๋ฅผ ํผํ๊ธฐ ์ํด ๋ค๋ฅธ UMD ๋ชจ๋ ์ ์ธ์์ ๋ค์ ๋ด๋ณด๋ผ ์ ์์ต๋๋ค. ์๋ firebase
๋ ๋ค์ ์คํ์ด์ค๋ก ์ ์ธ๋์ด ์์ต๋๋ค. ์ด์ด ์ข๊ฒ๋ ์ค๋ฅ๋ฅผ ์ผ์ผํค์ง ์๊ณ ์ ์ธ์ ํ์ฅํฉ๋๋ค.
// umd.d.ts
import firebase = require("firebase");
export import firebase = firebase;
export as namespace UMD;
// global.d.ts
declare const firebase: typeof UMD.firebase;
์ํ๊น๊ฒ๋ ์ ์ธ ํ ๊ฒ์ ๋ค์ ์คํ์ด์ค๊ฐ ์๋๋ผ ๊ฐ์ด๋ฏ๋ก let x: firebase.SomeInterface
์ ๊ฐ์ ์์
์ ํ ์ ์์ต๋๋ค. ๋ค์ ์คํ์ด์ค์ ๋ณ์นญ์ ์ง์ ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ ์ธํ๋ ๊ฒ์
๋๋ค.ํ์ง๋ง declare import firebase = UMD.firebase;
๋ ํ ์ ์์ต๋๋ค.
์ด์ ์ฃผ์๊ณผ ์ ์ฌํ๊ฒ hls.js (UMD) ๋ฐ ์ฐธ์กฐ ์ ํ์ ์ง์ฐ๋ก๋ํฉ๋๋ค.
hls.d.ts
:
import * as Hls from 'hls.js';
declare global {
const Hls: typeof Hls;
}
์ง์ฐ๋ก๋ ๋ UMD ๋ชจ๋์ ์ฌ์ฉํ๋ .ts
ํ์ผ์์ :
/// <reference path="hls.d.ts" />
// now use it
if(Hls.isSupported()){
...
}
Typescript> = 3.0.1 ๋ฐ 3.4.1์์ ํ ์คํธ๋์์ต๋๋ค.
๊ทผ๊ฑฐ๋ ๋์ ๋ชจ๋ ๊ฐ์ ธ ์ค๊ธฐ์ ๋ํ ๋ถ์์ ํ ๋ธ๋ผ์ฐ์ ์ง์์ ๋๋ค.
@MatthiasHild /// <reference path="hls.d.ts" />
์ฃผ์์์ด ํ ์ ์์ต๋๊น?
ํธ์ง, ์, ์ ์ธ์ด ํฌํจ ๋ .d.ts
ํ์ผ ๋ด์์๋ ํ์ด SO ์ง๋ฌธ์ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ .ts
ํ์ผ๊ณผ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ์๋ ํ ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ๋ฌผ์ ์ด์ ).
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ +1. SystemJS์ ํจ๊ป React๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋๋ฐ React๊ฐ ์ ๋ฒ๋ค๋ง๋์ง ์์๊ธฐ ๋๋ฌธ์ CDN์์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ก ์ง์ ๋ก๋ํ๊ธฐ ๋๋ฌธ์ React / ReactDOM ๊ฐ์ฒด๋ฅผ ์ ์ญ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก๋ก ์ฝ๋๋ฅผ ๋ชจ๋๋ก ์์ฑํ๊ณ ์์ง๋ง๋ก๋์ ์คํ๋๋ ํ๋์ ๋ฐํ์ ์คํฌ๋ฆฝํธ๋ก ๋ฒ๋ค (๋กค์ )๋ฉ๋๋ค.
import from
react / react-dom์ ์ํ ํ ๋ค์ ๋ก๋๊ฐ "์ง์ง๊ฐ ์๋๋๋ค. ์ด๋ค์ ์ ์ญ์ ๋๋ค"(https : /์ ์ ๊ณต๋ ์์ WebPack ๊ตฌ์ฑ๊ณผ ์ ์ฌ)๋ผ๊ณ ๊ตฌ์ฑํ๋ ๊ฒ์ ๊ณ ํต์ค๋ฝ๊ณ ๊ฑฐ์ง๋ง์ ๋๋ค. /www.typescriptlang.org/docs/handbook/react-&-webpack.html). ๋ด ๋ชจ๋์์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ ์ญ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ๊ณ ์ ํํ ๊ฒ์ ๋๋ค. ๋ด๊ฐ ์๋ํ ๋จ๊ณ๋ ์ง๊ด์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค.npm install --save-dev @types/react @types/react-dom
"jsx": "react", "types": ["react", "react-dom"]
export function MyComponent() { return <div>{"Hello, world"}</div>; }
ReactDOM.render(...)
๊ทธ๋ฌ๋ ์ด๋ก ์ธํด
React refers to a UMD global, but the current file is a module. Consider adding an import instead
์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.์ด๊ฒ์ด ํจ๊ณผ๊ฐ ์์๋ค๋ฉด ์ฝ๋์์ ๋ชจ๋ ์ธ ์ฒํ๊ณ ๊ทธ๋ ์ง ์์ ๋ก๋ / ๋ฒ ๋ค๋ฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๊ฐ๋จ ํ ๊ฒ์ ๋๋ค. (๋๋ ์๋์ ํฌํจ ๋ ํ์ผ์ ์ถ๊ฐํ์ฌ ์์ ํ๋๋ก ์ํํ์ต๋๋ค. ์ด์ ๋ด ๋ชจ๋์ React & ReactDOM์ ์ค๋ฅ์์ด ์ ์ญ์ผ๋ก ์ฌ์ฉํ ์ ์์ง๋ง ๋ค์ ์ถ์ ํ๊ฑฐ๋ ํด์ปค์ ๋๋ค. ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด์์ ์ ์์ต๋๋ค. ๋์ณค๋ค) :