์ฌ๋ฌ ์์
์์ญ์ด์๋ ํจํค์ง๊ฐ ์ฃผ์ด์ง๋ฉด npm install
๋ ๋ฃจํธ ๋ฐ ์์
์์ญ ํจํค์ง์ ๋ชจ๋ ํจํค์ง๋ฅผ ๋ฃจํธ node_modules
ํฉ๋๋ค. yarn๊ณผ ๋ฌ๋ฆฌ ์์
์์ญ ํจํค์ง์ ์ข
์์ฑ์ ๊ฐ ์์
์์ญ ํจํค์ง node_modules
์ค์น๋์ง ์์ต๋๋ค. ์ฆ, ํ์ฌ ์์
๋๋ ํ ๋ฆฌ๊ฐ ํ์ ํจํค์ง ์ธ ๊ฒฝ์ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ ์คํํ ์ ์์ต๋๋ค.
๋ํ ์์
๊ณต๊ฐ ํจํค์ง์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ npm workspace
๋ช
๋ น์ด ์์ง์๋ ๊ฒ ๊ฐ์ต๋๋ค ( yarn workspace
๊ณผ ๋น๊ต).
์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์๋ npm ์์ ์์ญ ๊ธฐ๋ฅ์ด yarn๊ณผ ์ ์ฌํ๊ฒ ์๋ํด์ผํ๋ค๊ณ ์ธ๊ธํ์ต๋๋ค.
npm v7์ ์ต์ํ Yarn์ ์์ ๊ณต๊ฐ ๊ธฐ๋ฅ์ ์ง์ํ๋ฉฐ v8์ ๊ณ ๊ธ ์์ ๊ณต๊ฐ ๊ธฐ๋ฅ์์ํ ๋จ๊ณ๋ฅผ ์ค์ ํฉ๋๋ค.
https://blog.npmjs.org/post/186983646370/npm-cli-roadmap-summer-2019
๋ค์ ์ค ํ๋๋ฅผ ์ํ ํ ์ ์์ต๋๋ค.
npm workspace @me/workspace-package1 my-script
๋ฅผ ์คํํ์ฌ ์์
์์ญ ํจํค์ง @me/workspace-package1
์์ my-script
์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค (์ : packages / package1์ ์์).cd packages/package1 && npm run my-script
์์
๊ณต๊ฐ ํจํค์ง๋ฅผ ์คํํ๊ณ yarn๊ณผ npm7์ ๋น๊ตํ๊ธฐ ์ํด ์์
๊ณต๊ฐ ๋์ดํฐ๋ฅผ ๋ง๋ค์์ต๋๋ค.
https://github.com/fabb/npm7-workspaces
npm install
(์ฑ๊ณต)cd applications/app1 && npm run build
tsc
์ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋น๋๊ฐ ์คํจํฉ๋๋ค.์ด์ ์์ฌ๋ก ์๋ํ์ญ์์ค.
yarn
(์ฑ๊ณต)cd applications/app1 && yarn run build
๋๋ ์์ฌ๋ก :
yarn
(์ฑ๊ณต)yarn workspace @fabb/app1 build
์์ ๊ณต๊ฐ ์ฉ RFC : https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md
์์ ๊ณต๊ฐ RFC์ ๋ํ ๋งํฌ๋ https://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.md์ ๋๋ค.
npm7 ์์ ๊ณต๊ฐ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ๋ ์ง๋ฌธ์ด ์์ต๋๋ค. ํน์ ์์ ๊ณต๊ฐ์๋ง ํจํค์ง๋ฅผ ์ค์นํด์ผํ๋ ๊ฒฝ์ฐ์ด๋ฅผ ์ํํ๋ npm ๋ช ๋ น์ ๋ฌด์์ ๋๊น? Yarn๊ณผ Lerna๋ ๋ชจ๋ ์ด๊ฒ์ ์ง์ํฉ๋๋ค.
๋ค์ ์์ ๊ณต๊ฐ์ ๊ฐ์ ํ์ญ์์ค.
{
"workspaces": ["packages/*"]
}
+ -- packages
+ -- package-a
+ -- package-b
$ yarn workspace package-a add react
lerna add๋ lerna์ ํํฐ ์ต์ ์ ์ง์ํฉ๋๋ค.
$ lerna add react --scope=package-a
์ง๋ฌธ. yarn๊ณผ ๊ฐ์ npm ์์
๊ณต๊ฐ๋ ๋ฃจํธ ํจํค์ง์ "private": true
๊ฐ ์์ด์ผํฉ๋๊น? ๋ฌธ์์๋ ์ด์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด์ผํฉ๋๋ค.
์ด์์ ์ด์ง๋ ์์ง๋ง; ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ ๋ ๋๊น์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ --prefix
์ต์
์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค ( docs ์ฐธ์กฐ).
์๋ฅผ ๋ค์ด @fabb ์ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ repo npm7-workspaces ๋ก ์ฌํํ๊ณ 2 ๋จ๊ณ์ ๋ช ๋ น์ ๋ค์์ผ๋ก ๋์ฒดํฉ๋๋ค.
npm run --prefix applications/app1 build
๋น๋ ์ฑ๊ณต :
npm7-workspaces % npm -v
7.0.2
npm7-workspaces % npm run --prefix applications/app1 build
> @fabb/[email protected] build
> tsc index.ts
npm7-workspaces % echo $?
0
์ง๋ฌธ. yarn๊ณผ ๊ฐ์ npm ์์ ๊ณต๊ฐ๋ ๋ฃจํธ ํจํค์ง์
"private": true
๊ฐ ์์ด์ผํฉ๋๊น? ๋ฌธ์์๋ ์ด์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด์ผํฉ๋๋ค.
@detj ์๋, ๋ด๊ฐ ํ ์คํธ ํ ํ ๊ทธ๋ ์ง ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด์์ ์ด์ง๋ ์์ง๋ง; ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ ๋ ๋๊น์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์
--prefix
์ต์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค ( docs ์ฐธ์กฐ).์๋ฅผ ๋ค์ด @fabb ์ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ repo npm7-workspaces ๋ก ์ฌํํ๊ณ 2 ๋จ๊ณ์ ๋ช ๋ น์ ๋ค์์ผ๋ก ๋์ฒดํฉ๋๋ค.
๋น๋ ์ฑ๊ณต :