ํ์ผ ์์คํ ์ฌ๋ณผ๋ฆญ ๋งํฌ? ์ด๋ค OS, ์ํํธ ๋๋ ํ๋ ๋งํฌ? ๋ณต์ ๋ก repo๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๊น?
Windows ์ด์ ์ฒด์ . ์ธ๋ถ ๋ชจ๋์ ๋ํ "npm ๋งํฌ"์ต์ ์ ์ฌ์ฉํ์ฌ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์์ฑํ์ต๋๋ค. ๋ชจ๋์ด ์ค์น๋์ด ์์ผ๋ฉด ๋ฌธ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ก์ปฌ์์ ํ ์คํธํ๋ ค๋ฉด ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ง๋ค์ด์ผํ๋ฉฐ typescript2 ํ๋ฌ๊ทธ์ธ์์๋ง ์๋ํ์ง ์์ต๋๋ค. typescript1 ํ๋ฌ๊ทธ์ธ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ ์๋ํ์ง๋ง ์ด๊ฑฐ ํ์ ์๋ํ์ง ์์ต๋๋ค.
๊ฐ์ ๋ฌธ์ ์ด์ง๋ง lerna๋ฅผ ์ฌ์ฉํ์ฌ ํจํค์ง๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋กค์ ์ ์ฐ๊ฒฐ๋ ํจํค์ง์ ๋ํด ์๊ธฐ์น ์์ ํ ํฐ์ ๋ถํํฉ๋๋ค.
lerna๊ฐ์๋ ์ฐฝ๋ฌธ์์ ๋๊ฐ์ ๋ฌธ์
ํด๋๋ฅผ node_modules์ ์ง์ ๋ณต์ฌํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ์์ด์ง๋ง ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ํ์ง ์์ต๋๋ค.
@PavaniVaka @TerenceZ @thealjey ๋ณต์ ๊ฐ ๊ฐ๋ฅํ ์์ ์ ์ฅ์์ ๋ํ ๊ธฐํ๊ฐ ์์ต๋๊น?
@ezolenko ์ฃ์กํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๋ฌธ์ ๋ฅผ ์กฐ๊ธ ์ขํ๋ค. ์ธ๋ถ ๋ชจ๋์ด ์์ฉ ํ๋ก๊ทธ๋จ ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌ๋๋ฉด ์๋ํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ด๋ฉด ์๋ํ์ง ์์ต๋๋ค. ์ : yalc๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ๋ถ ์ข ์์ฑ์ ์ฝ๊ฒ ํ ์คํธ ํ ์ ์์ต๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ ๋๋ ํ ๋ฆฌ์ yalc ํด๋๋ฅผ ์์ฑํ๊ณ ํด๋น ํด๋์ ์ธ๋ถ ๋ชจ๋์ ๋ณต์ฌ ํ ๋ค์ yalc ํด๋์์ node_modules๋ก ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๊ฒ์ด ๋จ์๋ฅผ ์ ๊ณตํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@ezolenko ๋๋ ์ค์ ๋ก ๋ด ๊ฒฝ์ฐ์ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ์์
typescript ์์ฒด์ ๋จ์ ์ด๊ฑฐ๋ json ํ์ผ์ ์์กดํ๋ ๊ตฌ์ฑ์ ๊ฐ๊น์ต๋๋ค.
๋ฌธ์ ๋ symlink๊ฐ CWD ์ธ๋ถ์ ํ์ผ๋ก ํ์ธ๋๋ค๋ ๊ฒ์
๋๋ค.
๋น๋ ๋ช
๋ น์ ์ต์์ package.json ํ์ผ๋ก ์ฎ๊ธฐ๊ณ ๋ชจ๋ ๊ฒ์ด ์๋ํ๊ธฐ ์์ํ์ต๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ๊ฐ์ ํ์ด์ง์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@PavaniVaka @TerenceZ @thealjey ๋ณต์ ๊ฐ ๊ฐ๋ฅํ ์์ ์ ์ฅ์์ ๋ํ ๊ธฐํ๊ฐ ์์ต๋๊น?
@ezolenko https://github.com/moki/mokui ํ๋๊ฐ ์์ต๋๋ค.
๋๊ตฐ๊ฐ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๋ฌธ์ # 194๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ์๋์์ ์๋ฃจ์ ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
monorepo ๋ด์์ ๊ฐ๊ฐ์ ๊ฐ๋ณ ํจํค์ง๋ฅผ ๋น๋ํ๋ ค๊ณ ํ๋ฉด ๋กค์
์ @organization/package-name
ํด๊ฒฐ์ ์๋ํ๊ณ ๋น๋์ ํฌํจํฉ๋๋ค. ๋น์ ์ ๊ทธ๊ฒ์ ์ํ์ง ์์ผ๋ฏ๋ก ๊ฐ ํจํค์ง๋ฅผ ๋น๋ ํ ๋ ํผํ๋ ค๋ฉด package.json
๊ตฌ๋ฌธ ๋ถ์ํ๊ณ dependencies
ํ๋์ ํค๋ฅผ ์ถ์ถํ ๋ค์ callback
๋ด๋ถ์์ ํ์ธํฉ๋๋ค. ๋กค์
๊ตฌ์ฑ์ external
ํ๋์ ์ ๊ณต ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค.
import json from "rollup-plugin-json";
const pkg = process.env.LERNA_PACKAGE_NAME &&
require(`${process.env.LERNA_PACKAGE_NAME}/package.json`);
const dependencies = ({ dependencies }) => Object.keys(dependencies || {});
const pkgdependencies = dependencies(pkg);
/* exported rollup configuration */
const config = {
/* your config goes here... */
/* id is the source name if list of dependencies includes
* id source name, then mark it as external,
*/
external: id => pkgdependencies.includes(id)
};
export default config;
๋์ผํ ๋ฌธ์ ๋ฐ rollup-plugin-typescript
์๋
src ์๋์ ํ์ผ์ด ํ๋ก์ ํธ ์ธ๋ถ์ typescript ํ์ผ์ ๋ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ ์ธ ๊ฒฝ์ฐ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ ํ์ผ ๊ตฌ์กฐ :
core/core-client/src/api.ts
myapp/myapp-client/src/api.ts
myapp/myapp-app/src/domain/api.ts -> ../../../myapp-client/src/domain/api.ts
myapp/myapp-app/src/domain/core -> ../../../../core/core-client/src/domain/
...
myapp / myapp-app์์ ํ๋ก์ ํธ๋ฅผ ์ปดํ์ผ ํ ๋
์๋ ์ค๋ฅ๊ฐ์๋ ๋กค์
๋ถ๋ง :
[ ERROR ] Rollup: Parse Error: ../myapp-client/src/domain/api.ts:28:7
Unexpected token (Note that you need plugins to import files that are not JavaScript)
L28: export interface IPrimus extends Primus {
interface
๋จ์ด๊ฐ ๋นจ๊ฐ์์ผ๋ก ๊ฐ์กฐ ํ์๋จ
๋ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ npm ์คํฌ๋ฆฝํธ์์ ์ฌ์ / ์ฌํ ํํฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ ์ฐ๊ฒฐ ํด์ ํ๊ณ ์ฐ๊ฒฐํ๋ ๊ฒ์
๋๋ค.
๋ฐ๋ผ์ ๋ด IDE๋ ๊ฐ๋ฐ ์ค์ ์ต์ ๋ฒ์ ์ ํ์ธํ ์ ์์ผ๋ฉฐ ๋น๋ ํ ๋ ์ปดํ์ผ ํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ฐ์ ๋ฌธ์ ์ด์ง๋ง lerna๋ฅผ ์ฌ์ฉํ์ฌ ํจํค์ง๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋กค์ ์ ์ฐ๊ฒฐ๋ ํจํค์ง์ ๋ํด ์๊ธฐ์น ์์ ํ ํฐ์ ๋ถํํฉ๋๋ค.