{"id":17167,"date":"2026-09-01T10:24:46","date_gmt":"2026-09-01T01:24:46","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=17167"},"modified":"2026-09-01T11:01:02","modified_gmt":"2026-09-01T02:01:02","slug":"typescript%eb%a1%9c-%ea%b0%9c%eb%b0%9c%ed%95%9c-%eb%9d%bc%ec%9d%b4%eb%b8%8c%eb%9f%ac%eb%a6%ac%eb%a5%bc-npm%ec%9c%bc%eb%a1%9c-%eb%b0%b0%ed%8f%ac%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=17167","title":{"rendered":"TypeScript\ub85c \uac1c\ubc1c\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c npm\uc5d0 \ubc30\ud3ec\ud558\uae30"},"content":{"rendered":"<p>node \uc124\uce58\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc704\ud55c \uac1c\ubc1c \ud3f4\ub354\ub97c \uc704\ud574 \ub2e4\uc74c\uacfc \uac19\uc740 \uba85\ub839 \uc218\ud589\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\nmkdir -p ~\/dev\/my-libary\r\ncd ~\/dev\/my-libary\r\nnpm init -y\r\nnpm install -D typescript tsup\r\nmkdir src\r\n<\/pre>\n<p>src\/index.ts\uc5d0 \ub2e4\uc74c \ucf54\ub4dc\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"typescript\">\r\nexport function add(left: number, right: number): number {\r\n  return left + right;\r\n}\r\n<\/pre>\n<p>index.ts\ub294 \uc9c4\uc785\uc810\uc774 \ub418\ubbc0\ub85c \uc0ac\uc6a9\uc790\uc5d0\uac8c \uacf5\uac1c\ud560 \uac83\ub4e4\uc744 export\ud558\ub294 \uac83\uc774 \uc8fc\ubaa9\uc801\uc785\ub2c8\ub2e4. \uc2e4\uc81c API\uc5d0 \ub300\ud55c \ucf54\ub4dc\ub294 \ubcc4\ub3c4\uc758 \ucf54\ub4dc \ud30c\uc77c\uc744 \ud1b5\ud574 \uc81c\uacf5\ud558\ub294 \uac83\uc774 \uc77c\ubc18\uc801\uc785\ub2c8\ub2e4.<\/p>\n<p>tsconfig.json \ud30c\uc77c\uc744 \uc0dd\uc131\ud574 \ub2e4\uc74c\ucc98\ub7fc \uc785\ub825\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"typescript\">\r\n{\r\n  \"compilerOptions\": {\r\n    \"target\": \"ES2022\",\r\n    \"module\": \"NodeNext\",\r\n    \"moduleResolution\": \"NodeNext\",\r\n    \"strict\": true,\r\n    \"noEmit\": true,\r\n    \"verbatimModuleSyntax\": true\r\n  },\r\n  \"include\": [\"src\"]\r\n}\r\n<\/pre>\n<p>package.json \ud30c\uc77c\uc758 \ub0b4\uc6a9\uc744 \uc544\ub798\ucc98\ub7fc \uad6c\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"typescript\">\r\n{\r\n  \"name\": \"@YOUR_NPM_ID\/my-libary\",\r\n  \"version\": \"1.0.1\",\r\n  \"description\": \"\ud0c0\uc785\uc2a4\ud06c\ub9bd\ud2b8\ub85c \ub9cc\ub4e0 \ud14c\uc2a4\ud2b8 \ub77c\uc774\ube0c\ub7ec\ub9ac\",\r\n  \"type\": \"module\",\r\n  \"main\": \".\/dist\/index.cjs\",\r\n  \"module\": \".\/dist\/index.js\",\r\n  \"types\": \".\/dist\/index.d.ts\",\r\n  \"exports\": {\r\n    \".\": {\r\n      \"types\": \".\/dist\/index.d.ts\",\r\n      \"import\": \".\/dist\/index.js\",\r\n      \"require\": \".\/dist\/index.cjs\",\r\n      \"default\": \".\/dist\/index.js\"\r\n    }\r\n  },\r\n  \"files\": [\r\n    \"dist\"\r\n  ],\r\n  \"scripts\": {\r\n    \"build:js\": \"tsup src\/index.ts --format esm,cjs --clean\",\r\n    \"build:types\": \"tsc -p tsconfig.build.json\",\r\n    \"build\": \"npm run build:js && npm run build:types\",\r\n    \"check\": \"tsc --noEmit\",\r\n    \"prepack\": \"npm run check && npm run build\"\r\n  },\r\n  \"keywords\": [\r\n    \"typescript\",\r\n    \"library\"\r\n  ],\r\n  \"license\": \"MIT\",\r\n  \"devDependencies\": {\r\n    \"tsup\": \"^8.5.1\",\r\n    \"typescript\": \"^7.0.2\"\r\n  }\r\n}\r\n<\/pre>\n<p>\ud0c0\uc785\uc2a4\ud06c\ub9bd\ud2b8 \ucf54\ub4dc\uc758 \ud0c0\uc785 \uc624\ub958\ub97c \uac80\uc0ac\ud558\uace0 \ube4c\ub4dc \ud558\uae30 \uc704\ud574 \ub2e4\uc74c \uba85\ub839\uc744 \uc218\ud589\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\nnpm run check\r\nnpm run build\r\n<\/pre>\n<p>dist \ud3f4\ub354\uac00 \uc0dd\uc131\ub418\uace0 \uc774 \ud3f4\ub354 \uc548\uc5d0 index.js, index.cjs, index.d.ts \uac00 \uc0dd\uc131\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc2e4\uc81c npm\uc5d0 \ubc30\ud3ec\ud558\uae30 \uc704\ud55c \ud30c\uc77c \uc0dd\uc131\uc744 \uc2dc\ud5d8\ud574 \ubcf4\uae30 \uc704\ud574 \ub2e4\uc74c \uba85\ub839\uc744 \uc218\ud589\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\nnpm pack --dry-run\r\n<\/pre>\n<p>\ucd9c\ub825\ub418\ub294 \ub0b4\uc6a9\uc5d0\uc11c dist\/index.js, dist\/index.cjs, dist\/index.d.ts, package.json\uc774 tar\ub85c \ubb36\uc774\ub294\uc9c0 \ud655\uc778\ud558\uba74 \ub429\ub2c8\ub2e4. \ub9cc\uc57d README.MD\uc640 LICENSE \ud30c\uc77c\uc744 package.json \ud30c\uc77c\uc774 \uc704\uce58\ud55c \uac19\uc740 \ud3f4\ub354\uc5d0 \uc0dd\uc131\ud574 \ub1a8\ub2e4\uba74 \uc774 2\uac1c\uc758 \ud30c\uc77c\ub4e4\ub3c4 tar\ub85c \ubb36\uc5ec\uc57c \ud569\ub2c8\ub2e4. tar\ub85c \ubb36\uc778 \uacb0\uacfc\ub97c tarball\uc774\ub77c\uace0 \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc2e4\uc81c tarbal\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud574 \ub2e4\uc74c \uba85\ub839\uc744 \uc218\ud589\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\nnpm pack\r\n<\/pre>\n<p>\uadf8\ub7fc your-npm-id-my-libary-1.0.0.tgz \ud30c\uc77c\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4.<\/p>\n<p>your-npm-id-my-libary-1.0.0.tgz \ud30c\uc77c\uc744 npm\uc5d0 \ubc30\ud3ec\ud558\uae30\uc5d0 \uc55e\uc11c \uc774 \ud30c\uc77c\ub85c \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \uc81c\ub300\ub85c \uc124\uce58 \ub418\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574 \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc81d\ud2b8 \ud480\ub354\ub97c \ub2e4\uc74c \uc808\ucc28\ub97c \ucc38\uace0\ud558\uc5ec \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\nmkdir -p ~\/dev\/my-libary-consumer\r\ncd ~\/dev\/my-libary-consumer\r\nnpm init -y\r\nnpm install ..\/your-npm-id-my-libary-1.0.0.tgz\r\n<\/pre>\n<p>index.js \ud30c\uc77c\uc744 \uc0dd\uc131\ud558\uace0 \ub2e4\uc74c \ucf54\ub4dc\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"javascript\">\r\nconst { add } = require(\"@YOUR_NPM_ID\/my-libary\");\r\n\r\nconsole.log(add(10, 20));\r\n<\/pre>\n<p>\ub2e4\uc74c \uba85\ub839\uc73c\ub85c \ucf54\ub4dc\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\nnode index.js\r\n<\/pre>\n<p>\uc774\uc81c npm \uc0ac\uc774\ud2b8\uc5d0 \ubc30\ud3ec\ud558\uae30 \uc704\ud574 npm\uc5d0 \ub85c\uadf8\uc778\ud569\ub2c8\ub2e4. \ub77c\uc774\ube0c\ub7ec\ub9ac \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \ub2e4\uc74c \uba85\ub839\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\ncd ~\/dev\/my-libary\r\nnpm login\r\nnpm whoami\r\n<\/pre>\n<p>\uc790\uc2e0\uc758 npm ID\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ubc30\ud3ec\ud558\uae30\uc5d0 \uc55e\uc11c my-libary\uac00 \ub4f1\ub85d\ub41c\uc801\uc774 \uc788\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574 \ub2e4\uc74c \uba85\ub839\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\nnpm view @YOUR_NPM_ID\/my-libary version\r\n<\/pre>\n<p>\ub4f1\ub85d\ud55c \uc801\uc774 \uc5c6\uc73c\ubbc0\ub85c 404 \uc624\ub958\uac00 \ub098\uc640\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc2e4\uc81c \ubc30\ud3ec\ud558\uae30\uc5d0 \uc55e\uc11c \ub2e4\uc2dc \ud55c\ubc88 \ub354 \uac80\uc99d\ud558\uace0 \ubc30\ud3ec\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\nnpm run check\r\nnpm pack --dry-run\r\nnpm publish --access public\r\n<\/pre>\n<p>\uc774\uc81c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud55c \ud3f4\ub354\uc5d0\uc11c \ub2e4\uc74c\ucc98\ub7fc npm \uc0ac\uc774\ud2b8\ub85c\ubd80\ud130 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc124\uce58\ud574 \ud14c\uc2a4\ud2b8\ud574 \ubd05\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\ncd ~\/dev\/my-math-kit-consumer\r\nnpm uninstall @YOUR_NPM_ID\/my-libary\r\nnpm install @YOUR_NPM_ID\/my-libary\r\nnode index.js\r\n<\/pre>\n<p>\ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \ubcc0\uacbd\ub418\uba74 \ubc84\uc804\uc5c5\uc744 \ud558\uace0 \ub2e4\uc2dc npm\uc5d0 \uc7ac\ubc30\ud3ec\ud574\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c \uc808\ucc28\ub97c \ub530\ub985\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\ncd ~\/dev\/my-math-kit\r\nnpm version patch\r\nnpm publish\r\n<\/pre>\n<p>\uc704\uc758 \uacbd\uc6b0 \ubc84\uc804\uc5c5 \ub808\ubca8\uc774 patch\uc785\ub2c8\ub2e4. \ub2e4\uc74c\uc744 \ucc38\uace0\ud558\uc5ec \ubc84\uc804\uc5c5 \ud569\ub2c8\ub2e4.<\/p>\n<ul>\n<li>patch: \ubc84\uadf8 \uc218\uc815 (1.0.0 \u2192 1.0.1)<\/li>\n<li>minor: \ud558\uc704 \ud638\ud658\ub418\ub294 \uae30\ub2a5 \ucd94\uac00 (1.0.0 \u2192 1.1.0)<\/li>\n<li>major: \ud638\ud658\uc131\uc744 \uae68\ub294 \ubcc0\uacbd (1.0.0 \u2192 2.0.0)<\/li>\n<\/ul>\n<p>\uc774\uc81c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud55c \ud3f4\ub354\uc5d0\uc11c \ub2e4\uc74c\ucc98\ub7fc npm \uc0ac\uc774\ud2b8\ub85c\ubd80\ud130 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc5c5\ub370\uc774\ud2b8\ud574 \ud14c\uc2a4\ud2b8\ud574 \ubd05\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\ncd ~\/dev\/my-libary-consumer\r\nnpm update @YOUR_NPM_ID\/my-libary\r\nnpm list @YOUR_NPM_ID\/my-libary\r\n<\/pre>\n<p>\ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \ubcc0\uacbd\ub418\uba74 \uc774\ub97c tarball\ub85c \ubb36\uace0 \ud14c\uc2a4\ud2b8\ud558\ub294 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c tarball\uc744 \uc124\uce58(npm\uc744 \ud1b5\ud574\uc11c\ub4e0, \ud30c\uc77c\uc744 \ud1b5\ud574\uc11c\ub4e0)\ud558\ub294 \uac83\uc740 \ub9e4\uc6b0 \ubc88\uac70\ub86d\uc2b5\ub2c8\ub2e4. \uc774 \uacbd\uc6b0 npm link\ub97c \ud1b5\ud574 \uc27d\uac8c \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub77c\uc774\ube0c\ub7ec\ub9ac \ud3f4\ub354\uc5d0\uc11c \ub2e4\uc74c \uba85\ub839\uc744 \uc218\ud589\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\ncd ~\/dev\/my-libary\r\nnpm run build\r\nnpm link\r\n<\/pre>\n<p>\uadf8\ub9ac\uace0 \ud14c\uc2a4\ud2b8 \ud3f4\ub354\uc5d0\uc11c\ub294 \ub2e4\uc74c \uba85\ub839\uc744 \uc785\ub825\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\ncd ~\/dev\/my-libary-consumer\r\nnpm link @YOUR_NPM_ID\/my-libary\r\n<\/pre>\n<p>\ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c link \ubc29\uc2dd\uc774 \uc544\ub2cc tarball\ub85c \uc124\uce58\ud558\uace0 \uc2f6\ub2e4\uba74 \ub9c1\ud06c\ub97c \ud574\uc81c\ud574\uc57c \ud569\ub2c8\ub2e4. \ubc29\ubc95\uc740 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\r\ncd ~\/dev\/my-libary-consumer\r\nnpm unlink @YOUR_NPM_ID\/my-libary\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>node \uc124\uce58\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc704\ud55c \uac1c\ubc1c \ud3f4\ub354\ub97c \uc704\ud574 \ub2e4\uc74c\uacfc \uac19\uc740 \uba85\ub839 \uc218\ud589\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. mkdir -p ~\/dev\/my-libary cd ~\/dev\/my-libary npm init -y npm install -D typescript tsup mkdir src src\/index.ts\uc5d0 \ub2e4\uc74c \ucf54\ub4dc\ub97c \uc785\ub825\ud569\ub2c8\ub2e4. export function add(left: number, right: number): number { return left + right; } index.ts\ub294 \uc9c4\uc785\uc810\uc774 \ub418\ubbc0\ub85c \uc0ac\uc6a9\uc790\uc5d0\uac8c \uacf5\uac1c\ud560 \uac83\ub4e4\uc744 export\ud558\ub294 \uac83\uc774 \uc8fc\ubaa9\uc801\uc785\ub2c8\ub2e4. &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=17167\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;TypeScript\ub85c \uac1c\ubc1c\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c npm\uc5d0 \ubc30\ud3ec\ud558\uae30&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-17167","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/17167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17167"}],"version-history":[{"count":6,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/17167\/revisions"}],"predecessor-version":[{"id":17173,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/17167\/revisions\/17173"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17167"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}