๐ฆ Node.js ์ฝ๋๋ฅผ ์คํ ๊ฐ๋ฅํ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ก ๋ฌถ๊ธฐ
3930 ๋จ์ด nodetutorialprogrammingjavascript
์ด๋ฅผ ์ํํ๊ธฐ ์ํ ๊ตฌ์ฑ ์์/์ ๊ทผ ๋ฐฉ์์ด ์์ง๋ง ์ด๋ฌํ ์ํฉ์์ Node.js๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ฅ์ ๋ฌผ๋ก ๋ณด์ด์ง ์๋๋ก ๋ ์ ๋ฌธ์ํํ๊ณ ์ ํํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ Node.js๊ฐ ์๋ฃจ์ ๊ตฌ์ถ์ ์ฌ์ฉ๋๋ ์์น/์๊ธฐ์ ํ์ฅ์ ์ง์ํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
์ด ๊ธฐ์ฌ๋ Node.js ์ํ๊ณ์ ๋ ๊ฐ์ง ์ฃผ์ ๊ด์ฌ์ฌ์ธ ๋ฒ๋ค๋ง๊ณผ ํจํค์ง์ ๋ค๋ฃน๋๋ค. ๊ทธ๋ค์ ๋ํด ๊ฐ๋จํ ์ด์ผ๊ธฐํฉ์๋ค.
๋ฒ๋ค๋ง์ ์ฝ๋์ ๋ชจ๋ ์ข ์์ฑ์ ๋จ์ผ ํ์ผ๋ก ๋ณํฉํ๋ ๊ฐ๋ ์ ๋๋ค. ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ESM ํจํค์ง ํ์์ ์ฌ์ฉํ๋ฉด CJS๋ณด๋ค ํ ๊ฐ์ง ์ฅ์ ์ด ์์ต๋๋ค. ๋ฐ๋ก ํธ๋ฆฌ ์์ดํน์ ๋๋ค. ํธ๋ฆฌ ์์ดํน์ ์ข ์์ฑ์์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ฐ๋ ์ ๋๋ค. ๋๊ตฌ: esbuild , parcel , webpack , rollup , terser .
Node.js ํจํค์ง์ ์์ค ์ฝ๋์ Node.js ๋ฐํ์์ ํฌํจํ๋ ์คํ ๊ฐ๋ฅํ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฐ๋ ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ต์ข ์ฌ์ฉ์์ ์ปดํจํฐ์ Node.js๋ฅผ ์ค์นํ ํ์๊ฐ ์์ต๋๋ค.
์ด ๊ณผ์ ์์ ๋๊ตฌ๋ ์์ค ์ฝ๋๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ
require()
์ ๋ํ ํธ์ถ์ ๊ฐ์งํ๊ณ ์ข
์์ฑ์ ํธ๋๋ฒ์คํ๊ณ ์คํ ํ์ผ์ ํฌํจํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์ค ์ฝ๋๋ V8
์์ง์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผ๋ฉ๋๋ค. ๋๊ตฌ: pkg , ncc , nexe .๋ฒ๋ค๋ก esbuild
# Output CommonJS bundle
$ npx esbuild index.js --bundle --outfile=build.cjs \
--format=cjs --platform=node
# Output ESM bundle
# Note that, you may not need the --banner flag.
# But, in some cases, require() and __dirname are needed.
$ npx esbuild index.js --bundle --outfile=build.mjs \
--format=esm --platform=node --banner:js="
import {createRequire} from 'module';
const require = createRequire(import.meta.url);
import { dirname } from 'path';
import { fileURLToPath } from 'url';
const __dirname = dirname(fileURLToPath(import.meta.url));"
ํจํค์ง์์ ํจํค์ง๋ก
# Packaging tools work best with CJS.
# These tools don't go well with ESM.
# To package into executable, just take the file outputted
# by `esbuild`, and pass it to `pkg`, and we're done!
$ npx pkg build.cjs
์ด ๋ช ๋ น์ 3๊ฐ์ ๋ฐ์ด๋๋ฆฌ ์คํ ๊ฐ๋ฅ ํ์ผ
build-linux
, build-macos
๋ฐ build-win.exe
๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ํ๋ซํผ์ ๋ง๋ ์คํ ํ์ผ์ ์คํํ ์ ์์ต๋๋ค. ์ด์ ์ด ํ์ผ์ ์ต์ข
์ฌ์ฉ์์๊ฒ ๋ฐฐํฌํ๊ฑฐ๋ ํ๋ก๋์
ํ๊ฒฝ์ ๋ฐฐํฌํ ์ ์์ต๋๋ค. Node.js๋ ์ข
์์ฑ ๋ฑ์ ์ค์นํ์ง ์๊ณ ์ด ํ์ผ ํ๋๋ง ์์ผ๋ฉด ๋ฉ๋๋ค!์ฝ์ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ํฅ๋ฏธ๋ก์ ๋์? โค๏ธ ๋๋ ๐ฆ๋ฅผ ์ ๋ ฅํ์ธ์! ์ ๊ฐ ๋ค๋ฃจ๊ณ ์ถ์ ์ฃผ์ ๊ฐ ์๋์? ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์.
์ข์ ํ๋ฃจ ๋์ธ์!
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฆ Node.js ์ฝ๋๋ฅผ ์คํ ๊ฐ๋ฅํ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ก ๋ฌถ๊ธฐ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/midnqp/bundling-nodejs-into-single-executable-binary-l3gํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค