์ผ๋ฐ์ ์ผ๋ก, ์ ์ธ ํ์ผ์ ๊ตฌ์กฐํํ๋ ๋ฐฉ๋ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. JavaScript์์ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๊ณ , ์ด์ ๋ง์ถ์ด ์ ์ธ ํ์ผ์ ์์ฑํด์ผ ํฉ๋๋ค. ์ด ๊ฐ์ด๋๋ ์ผ๋ฐ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจํด์ ์๋ณํ๋ ๋ฐฉ๋ฒ๊ณผ, ๊ทธ ํจํด์ ์์ํ๋ ์ ์ธ ํ์ผ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃน๋๋ค.
์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๊ฐ์ ๊ตฌ์กฐํ ํจํด ์ ํ์ ํ ํ๋ฆฟ ์น์ ์ ์์ต๋๋ค. ์ด ํ ํ๋ฆฟ์ผ๋ก ์์ํ๋ฉด ๋ ๋น ๋ฅด๊ฒ ์งํํ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ๋ก, TypeScript ์ ์ธ ํ์ผ์ด ๋ํ๋ผ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ข ๋ฅ๋ฅผ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค. ๊ฐ ์ข ๋ฅ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ, ์์ฑํ๋ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์์ ๋ฅผ ๋ณผ ๊ฒ์ ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์๋ณํ๋ ๊ฒ์ ์ ์ธ ํ์ผ์ ์์ฑํ๋ ์ฒซ ๋จ๊ณ์ ๋๋ค. ์ฌ์ฉ๋ฒ๊ณผ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ์๋ณํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์์ ๊ตฌ์ฑ์ ๋ฐ๋ผ์, ์ด๋ค ๊ฑด ๋ค๋ฅธ ๊ฒ๋ณด๋ค ํจ์ฌ ์ฌ์ธ ์ ์์ต๋๋ค. ๋ณธ์ธ์๊ฒ ๋ ํธํ ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ญ ์ค์ฝํ (์ฆ, import
ํ์์ ์ฌ์ฉํ์ง ์์)์์ ์ ๊ทผ ๊ฐ๋ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉ์ ์ํด ๊ฐ๋จํ ํ๋ ์ด์์ ์ ์ญ ๋ณ์๋ฅผ ๋
ธ์ถํฉ๋๋ค.
์๋ฅผ ๋ค์ด, jQuery๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, $
๋ณ์๋ฅผ ์ฐธ์กฐํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
$(() => { console.log('hello!'); } );
HTML ์คํฌ๋ฆฝํธ ํ๊ทธ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์์์ ์ง์นจ์ ๋ณผ ์ ์์ต๋๋ค:
<script src="http://a.great.cdn.for/someLib.js"></script>
์ค๋๋ , ๋๋ถ๋ถ์ ์ ์ญ์์ ์ ๊ทผ ๊ฐ๋ฅํ ์ ๋ช ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ค์ ๋ก UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์์ฑ๋์ด ์์ต๋๋ค (์๋๋ฅผ ์ฐธ์กฐ). UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์๋ ์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์์ ๊ตฌ๋ณํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ ์ญ ์ ์ธ ํ์ผ์ ์์ฑํ๊ธฐ ์ ์, ์ค์ ๋ก๋ UMD๊ฐ ์๋์ง ํ์ธํ์ญ์์ค.
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ ๋๊ฒ ์์ฒญ ๊ฐ๋จํฉ๋๋ค. ์ ์ญ "Hello, world" ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
function createGreeting(s) {
return "Hello, " + s;
}
ํน์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
window.createGreeting = function(s) {
return "Hello, " + s;
}
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, ๋ณดํต ๋ค์์ ๋ณผ ์ ์์ต๋๋ค:
- ์ต์์ ๋ ๋ฒจ
var
๋ฌธ ์ด๋function
์ ์ธ - ํ๋ ์ด์์
window.someName
ํ ๋น - DOM ์ธํฐํ์ด์ค
document
ํน์window
๊ฐ ์กด์ฌํ๋ค๊ณ ๊ฐ์
๋ค์์ ๋ณผ ์ ์์ต๋๋ค:
require
์ด๋define
๊ฐ์ ๋ชจ๋ ๋ก๋ ๊ฒ์ฌ ํน์ ์ฌ์ฉvar fs = require("fs");
ํํ์ CommonJS/Node.js-์คํ์ผ importdefine(...)
ํธ์ถ- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ
require
ํน์ importํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํ๋ ๋ฌธ์
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฐ๊พธ๋๊ฒ ์ฝ๊ธฐ ๋๋ฌธ์, ์ ์ญ ์คํ์ผ๋ก ์์ฑํ ์ธ๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฑฐ์ ์์ต๋๋ค. ํ์ง๋ง, ํฌ๊ธฐ๊ฐ ์๊ณ DOM์ด ํ์ํ (ํน์ ์์กด์ฑ์ด ์๋) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ ํ ์ ์ญ์ ๋๋ค.
ํ
ํ๋ฆฟ ํ์ผ global.d.ts
์ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ myLib
๋ฅผ ์ ์ํฉ๋๋ค.
"์ด๋ฆ ์ถฉ๋ ๋ฐฉ์ง" ๊ฐ์ฃผ๋ฅผ ๋ฐ๋์ ์ฝ์ด๋ณด์ธ์.
์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋ ๋ก๋ ํ๊ฒฝ์์๋ง ๋์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, express
๋ Node.js์์๋ง ๋์ํ๊ณ ๋ฐ๋์ CommonJS์ require
ํจ์๋ก ๋ก๋๋์ด์ผ ํฉ๋๋ค.
ECMAScript 2015 (ES2015, ECMAScript 6, ES6๋ก๋ ์ ์๋ ค์ง), CommonJS์ RequireJS๋ ๋ชจ๋์ importingํ๋ ๋น์ทํ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. JavaScript์ CommonJS (Node.js)๋ฅผ ์๋ฅผ ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค
var fs = require("fs");
TypeScript๋ ES6์์๋, import
ํค์๋๊ฐ ๊ฐ์ ๋ชฉ์ ์ ์ ๊ณตํฉ๋๋ค:
import fs = require("fs");
์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์์์ ๋ค์ ์ฝ๋๋ค ์ค ํ๋๋ฅผ ๋ณผ ์ ์์ต๋๋ค:
var someLib = require('someLib');
ํน์
define(..., ['someLib'], function(someLib) {
});
์ ์ญ ๋ชจ๋๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก UMD ๋ชจ๋์ ๋ฌธ์์์๋ ์ด ์์ ๋ค์ ๋ณผ ์ ์์ผ๋ฏ๋ก, ์ฝ๋๋ ๋ฌธ์๋ฅผ ๋ฐ๋์ ํ์ธํ์ธ์.
๋ชจ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ์ค ๋ช ๊ฐ์ง๋ฅผ ๋ฐ๋์ ๊ฐ์ง๊ณ ์์ต๋๋ค:
require
ํน์define
์ ๋ํ ๋ฌด์กฐ๊ฑด์ ์ธ ํธ์ถimport * as a from 'b';
ํน์export c;
๊ฐ์ ์ ์ธ๋ฌธexports
ํน์module.exports
์ ๋ํ ํ ๋น
๋ค์์ ๊ฑฐ์ ๊ฐ์ง ์์ต๋๋ค:
window
ํน์global
ํ๋กํผํฐ ํ ๋น
๋ง์ ์ ๋ช
ํ Node.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ express
, gulp
, request
์ ๊ฐ์ ๋ชจ๋๊ตฐ ์์ ์์ต๋๋ค.
UMD ๋ชจ๋์ ๋ชจ๋๋ก (import๋ฅผ ํตํด) ์ฌ์ฉํ ์ ์๊ณ ํน์ ์ ์ญ์ผ๋ก๋ (๋ชจ๋ ๋ก๋ ์๋ ํ๊ฒฝ์์ ์คํ๋ ๋) ์ฌ์ฉํ ์ ์์ต๋๋ค. Moment.js ๊ฐ์ ๋ง์ ์ ๋ช ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ด ๋ฐฉ๋ฒ์ผ๋ก ์์ฑ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Node.js๋ RequireJS๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค:
import moment = require("moment");
console.log(moment.format());
๋ฐ๋ฉด ๋ฐ๋๋ผ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ธ ์ ์์ต๋๋ค:
console.log(moment.format());
UMD modules์ ๋ชจ๋ ๋ก๋ ํ๊ฒฝ ์ ๋ฌด๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ด๋ ์ฐพ๊ธฐ ์ฌ์ด ํจํด์ ๋๋ค:
(function (root, factory) {
if (typeof define === "function" && define.amd) {
define(["libName"], factory);
} else if (typeof module === "object" && module.exports) {
module.exports = factory(require("libName"));
} else {
root.returnExports = factory(root.libName);
}
}(this, function (b) {
๋ง์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋, ํนํ ํ์ผ ์๋จ์์ typeof define
, typeof window
ํน์ typeof module
์ ๋ํ ํ
์คํธ๋ฅผ ๋ณด์๋ค๋ฉด, ๊ฑฐ์ ๋๋ถ๋ถ UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์์์๋ require
๋ฅผ ๋ณด์ฌ์ฃผ๋ "Node.js์์ ์ฌ์ฉํ๊ธฐ" ์์ ๋ฅผ ์ข
์ข
์ค๋ช
ํ๊ณ
"๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ๊ธฐ" ์์ ์์๋ <script>
ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
์ ๋ช ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ถ๋ถ์ UMD ํจํค์ง๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ก๋ jQuery, Moment.js, loadash ๋ฑ ๋ ๋ง์ด ์์ต๋๋ค.
๋ชจ๋์ ์ธ ๊ฐ์ง ํ
ํ๋ฆฟ์ ์ฌ์ฉํ ์ ์์ต๋๋ค,
module.d.ts
, module-class.d.ts
๊ทธ๋ฆฌ๊ณ module-function.d.ts
.
๋ง์ฝ ๋ชจ๋์ ํจ์์ฒ๋ผ ํธ์ถํ ์ ์์ผ๋ฉด module-function.d.ts
์ ์ฌ์ฉํ์ธ์:
var x = require("foo");
// ์ฐธ๊ณ : ํจ์๋ก 'x'๋ฅผ ํธ์ถ
var y = x(42);
๊ฐ์ฃผ "ES6๊ฐ ๋ชจ๋ ํธ์ถ ์๊ทธ๋์ฒ์ ๋ฏธ์น๋ ์ํฅ"๋ฅผ ๋ฐ๋์ ์ฝ์ด๋ณด์ธ์
๋ง์ฝ ๋ชจ๋์ด new
๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ ์ ์๋ค๋ฉด module-class.d.ts
๋ฅผ ์ฌ์ฉํ์ธ์:
var x = require("bar");
// ์ฐธ๊ณ : 'new' ์ฐ์ฐ์๋ฅผ import๋ ๋ณ์์ ์ฌ์ฉ
var y = new x("hello");
์ด๋ฐ ๋ชจ๋์๋ ๊ฐ์ ๊ฐ์ฃผ๊ฐ ์ ์ฉ๋ฉ๋๋ค.
๋ง์ฝ ๋ชจ๋์ด ์ ์ฌํญ์ ํด๋น๋์ง ์๋ค๋ฉด, module.d.ts
ํ์ผ์ ์ฌ์ฉํ์ธ์.
๋ชจ๋ ํ๋ฌ๊ทธ์ธ์ ๋ค๋ฅธ ๋ชจ๋ (UMD๋ ๋ชจ๋)์ ํํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
์๋ฅผ ๋ค์ด, Moment.js์์, moment-range
๋ moment
๊ฐ์ฒด์ ์๋ก์ด range
๋ฉ์๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ ์ธ ํ์ผ ์์ฑ์ ์ํด, ๋ชจ๋์ด ์ผ๋ฐ ๋ชจ๋๋ก ๋ณ๊ฒฝ๋๋ UMD ๋ชจ๋๋ก ๋ณ๊ฒฝ๋๋ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
module-plugin.d.ts
ํ
ํ๋ฆฟ์ ์ฌ์ฉํ์ธ์.
์ ์ญ ํ๋ฌ๊ทธ์ธ์ ์ ์ญ์ ํํ๋ฅผ ๋ณ๊ฒฝํ๋ ์ ์ญ ์ฝ๋์ ๋๋ค. ์ ์ญ-์์ ๋ชจ๋๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐํ์์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ ๋์ ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ช๋ช ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Array.prototype
์ด๋ String.prototype
์ ์๋ก์ด ํจ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ ์ญ ํ๋ฌ๊ทธ์ธ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์๋ฅผ ๋ณด๊ณ ์ฝ๊ฒ ์๋ณํ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์์ ๋ฅผ ๋ณผ ์ ์์ต๋๋ค:
var x = "hello, world";
// ๋ด์ฅ ํ์
์ ์๋ก์ด ๋ฉ์๋ ์์ฑ
console.log(x.startsWithHello());
var y = [1, 2, 3];
// ๋ด์ฅ ํ์
์ ์๋ก์ด ๋ฉ์๋ ์์ฑ
console.log(y.reverseAndSort());
global-plugin.d.ts
ํ
ํ๋ฆฟ์ ์ฌ์ฉํ์ธ์.
์ ์ญ-์์ ๋ชจ๋์ import ๋ ๋, ์ ์ญ ์ค์ฝํ์ ์กด์ฌํ๋ ๊ฐ์ ๋ณ๊ฒฝํฉ๋๋ค.
์๋ฅผ ๋ค์ด, import ๋ ๋ String.prototype
์ ์๋ก์ด ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ ์ ์์ต๋๋ค.
์ด ํจํด์ ๋ฐํ์ ์ถฉ๋์ ๊ฐ๋ฅ์ฑ ๋๋ฌธ์ ์ํํ์ง๋ง,
์ฌ์ ํ ์ ์ธ ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค.
์ ์ญ-์์ ๋ชจ๋์ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์๋ฅผ ๋ณด๊ณ ์ฝ๊ฒ ์๋ณํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก, ์ ์ญ ํ๋ฌ๊ทธ์ธ๊ณผ ๋น์ทํ์ง๋ง, ํจ๊ณผ๋ฅผ ํ์ฑํํ๊ธฐ ์ํด require
ํธ์ถ์ด ํ์ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ฌธ์๋ฅผ ๋ณผ ์ ์์ต๋๋ค:
// ๋ฐํ๊ฐ์ ์ฌ์ฉํ์ง ์๋ 'require' ํธ์ถ
var unused = require("magic-string-time");
/* ํน์ */
require("magic-string-time");
var x = "hello, world";
// ๋ด์ฅ ํ์
์ ์๋ก์ด ๋ฉ์๋ ์์ฑ
console.log(x.startsWithHello());
var y = [1, 2, 3];
// ๋ด์ฅ ํ์
์ ์๋ก์ด ๋ฉ์๋ ์์ฑ
console.log(y.reverseAndSort());
global-modifying-module.d.ts
ํ
ํ๋ฆฟ์ ์ฌ์ฉํ์ธ์.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ช ๊ฐ์ง ์์กด์ฑ์ ๊ฐ์ง๊ณ ์์ ์ ์์ต๋๋ค. ์ด๋ฒ ์น์ ์์๋ ์ ์ธ ํ์ผ ์์ ์์กด์ฑ์ import ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
๋ง์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กด์ฑ์ด ์๋ค๋ฉด, /// <reference types="..." />
๋๋ ํฐ๋ธ๋ฅผ ์ฌ์ฉํ์ธ์:
/// <reference types="someLib" />
function getThing(): someLib.thing;
๋ง์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ชจ๋์ ์์กด์ฑ์ด ์๋ค๋ฉด, import
๋ฌธ์ ์ฌ์ฉํ์ธ์:
import * as moment from "moment";
function getThing(): moment;
๋ง์ฝ ์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ UMD ๋ชจ๋์ ์์กด์ฑ์ด ์๋ค๋ฉด, /// <reference types
๋๋ ํฐ๋ธ๋ฅผ ์ฌ์ฉํ์ธ์:
/// <reference types="moment" />
function getThing(): moment;
๋ง์ฝ ๋ชจ๋์ด๋ UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กด์ฑ์ด ์๋ค๋ฉด, import
๋ฌธ์ ์ฌ์ฉํ์ธ์:
import * as someLib from 'someLib';
UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์์กด์ฑ ์ ์ธ์ /// <reference
๋๋ ํฐ๋ธ๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์!
์ ์ญ ์ ์ธ ํ์ผ์ ์์ฑํ ๋, ์ ์ญ ์ค์ฝํ์ ๋ง์ ํ์ ์ ์ ์ํ ์ ์๋ค๋ ์ ์ ์ ์ํ์ธ์. ๋ง์ ์ ์ธ ํ์ผ์ด ํ๋ก์ ํธ ๋ด์ ์์ ๋, ํด๊ฒฐํ ์ ์๋ ์ด๋ฆ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ด๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฐ๋ผ์ผ ํ๋ ๊ฐ๋จํ ๊ท์น์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ํ ์ ์ญ ๋ณ์๊ฐ ๋ฌด์์ด๋ ํ์ ์ ๋ค์์คํ์ด์ค๋ก ์ ์ํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ญ ๊ฐ 'cats'๋ฅผ ์ ์ํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๊ณ
declare namespace cats {
interface KittySettings { }
}
์ด๋ ๊ฒ ํ์ง๋ ๋ง์ธ์
// ์ต์์-๋ ๋ฒจ์์
interface CatsKittySettings { }
์ด ๊ฐ์ด๋๋ ์ ์ธ ํ์ผ ์ฌ์ฉ์๊ฐ ์ค๋จํ์ง ์๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ UMD๋ก ์ ํํ ์ ์๋๋ก ํฉ๋๋ค.
์ด๋ค ํ๋ฌ๊ทธ์ธ์ ๊ธฐ์กด ๋ชจ๋์ ์ต์์ export๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํฉ๋๋ค. CommonJS์ ๋ค๋ฅธ ๋ก๋์์๋ ํ์ฉ๋์ง๋ง, ES6 ๋ชจ๋์ ๋ถ๋ณํ๋ค๊ณ ๊ฐ์ฃผ๋๊ธฐ์ ์ด ํจํด์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์๋ํ๋ฉด TypeScript๋ ๋ก๋์ ๊ตฌ์ ๋ฐ์ง ์๊ธฐ์, ์ด ์ ์ฑ ์ด ์ปดํ์ผ-์๊ฐ์ ์ ์ฉ๋์ง ์์ง๋ง, ES6 ๋ชจ๋ ๋ก๋๋ก ์ ํํ๋ ค๋ ๊ฐ๋ฐ์๋ ์๊ณ ์์ด์ผ ํฉ๋๋ค.
Express์ ๊ฐ์ ๋ง์ ์ ๋ช ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ import ๋ ๋ ํธ์ถ ๊ฐ๋ฅํ ํจ์๋ฅผ ๋ ธ์ถํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ผ๋ฐ์ ์ธ Express ์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
import exp = require("express");
var app = exp();
ES6 ๋ชจ๋ ๋ก๋์์, ์ต์์-๋ ๋ฒจ ๊ฐ์ฒด(์ฌ๊ธฐ์์๋ exp
๋ก import)๋ ํ๋กํผํฐ๋ง ๊ฐ์ง ์ ์์ต๋๋ค;
์ต์์-๋ ๋ฒจ ๋ชจ๋ ๊ฐ์ฒด๋ ์ ๋ ํธ์ถํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํด๊ฒฐ์ฑ
์ ํธ์ถ ๊ฐ๋ฅ/์์ฑ ๊ฐ๋ฅ ๊ฐ์ฒด๋ฅผ default
export๋ก ์ ์ํ๋ ๊ฒ์
๋๋ค;
์ด๋ค ๋ชจ๋ ๋ก๋ shims์ ์๋์ผ๋ก ์ด ์ํฉ์ ๊ฐ์งํ๊ณ ์ต์์-๋ ๋ฒจ ๊ฐ์ฒด๋ฅผ default
export๋ก ๋ฐ๊ฟ๋๋ค.
์ ์ธ ํ์ผ์ ๋ ์ด์์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ ์ด์์์ ๋ฐ์ํด์ผ ํฉ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๋ชจ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค
myLib
+---- index.js
+---- foo.js
+---- bar
+---- index.js
+---- baz.js
์ด๋ ๋ค์๊ณผ ๊ฐ์ด import ํ ์ ์์ต๋๋ค
var a = require("myLib");
var b = require("myLib/foo");
var c = require("myLib/bar");
var d = require("myLib/bar/baz");
๊ทธ๋ฌ๋ฏ๋ก ์ ์ธ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค
@types/myLib
+---- index.d.ts
+---- foo.d.ts
+---- bar
+---- index.d.ts
+---- baz.d.ts