Rollup-plugin-typescript2: Symlink๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 10์›” 30์ผ  ยท  12์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ezolenko/rollup-plugin-typescript2

typescript2 symlink issue

์ข…์†์„ฑ์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋กค์—…์—์„œ "์˜ค๋ฅ˜ : ์˜ˆ๊ธฐ์น˜ ์•Š์€ ํ† ํฐ (JavaScript๊ฐ€ ์•„๋‹Œ ํŒŒ์ผ์„ ๊ฐ€์ ธ ์˜ค๋ ค๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•„์š”ํ•จ)"์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ

๋ฒ„์ „

  • ํƒ€์ดํ”„ ์Šคํฌ๋ฆฝํŠธ : ^ 3.6.4
  • ๋กค์—… : "^ 1.26.0"
  • rollup-plugin-typescript2 : ^ 0.24.3

rollup.config.js

tsconfig.json

package.json

Verbosity 3์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ถœ๋ ฅ

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ฐ™์€ ๋ฌธ์ œ์ด์ง€๋งŒ lerna๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๋กค์—…์€ ์—ฐ๊ฒฐ๋œ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ํ† ํฐ์„ ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  12 ๋Œ“๊ธ€

ํŒŒ์ผ ์‹œ์Šคํ…œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ? ์–ด๋–ค 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 ํŒŒ์ผ๋กœ ์˜ฎ๊ธฐ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ๊ฐ™์€ ํŽ˜์ด์ง€์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

194

@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๋Š” ๊ฐœ๋ฐœ ์ค‘์— ์ตœ์‹  ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋นŒ๋“œ ํ•  ๋•Œ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰