Highcharts: Highchart๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋‚˜๋ฌด ํ”๋“ค๊ธฐ ๊ธฐ๋Šฅ.

์— ๋งŒ๋“  2018๋…„ 07์›” 24์ผ  ยท  14์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: highcharts/highcharts

๋‚ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ Angular์™€ ํ•จ๊ป˜ Highcharts ๋ฐ Highstocks๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์€ ์ข‹์ง€๋งŒ Highcharts์˜ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒˆ๋“ค ์ •๋ณด์˜ ์ด ์Šคํฌ๋ฆฐ์ƒท์„ ๋ณด์‹ญ์‹œ์˜ค.
screen shot 2018-07-24 at 12 07 05 pm
Highcharts๋Š” Angular(๋นจ๊ฐ„์ƒ‰ ์œค๊ณฝ์„ )์™€ ๊ฐ™์€ ๋‘ํˆผํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ณด๋‹ค ํ›จ์”ฌ ๋” ํฐ ๊ฑฐ์˜ 500kb(์ง„ํ•œ ํŒŒ๋ž€์ƒ‰ ์œค๊ณฝ์„ )๋ฅผ ๋จน์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Highcharts์—์„œ ํ•˜๋‚˜์˜ ์ฐจํŠธ๋งŒ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋ชจ๋“  Highcharts ์ฝ”๋“œ๋ฅผ ๊ณ„์† ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํ—ˆ์šฉํ•  ์ˆ˜ ์—†์„ ์ •๋„๋กœ ์ตœ์ ํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์—ฌ๊ธฐ์„œ ์•Œ๊ณ  ์žˆ๋Š” ์†”๋ฃจ์…˜์€ Highcharts๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒˆ๋กœ์šด Webpack Tree Shaking์œผ๋กœ ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ํฌ๊ฒŒ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ๊ณง ๊ณ ์น  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์—ฌ๋Ÿฌ๋ถ„์€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

TypeScript Enhancement

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

์•ˆ๋…•ํ•˜์„ธ์š”, ์–ผ๋งˆ ์ „์— ์šฐ๋ฆฌ๋Š” ๋ถ€ํ’ˆ ํŒŒ์ผ์„ ES ๋ชจ๋“ˆ๋กœ ๊ฒŒ์‹œํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, import Highcharts from 'highcharts/es-modules/masters/highcharts.src.js' ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฌธ์ œ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ์ด๋Ÿฌํ•œ ๋ถ€ํ’ˆ ํŒŒ์ผ์„ ๋ณด๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์–ด ํŠธ๋ฆฌ ์‰์ดํ‚น ๊ธฐ๋Šฅ์ด ํ–ฅ์ƒ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์–ธ์ œ ๊ฒŒ์‹œ๋  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์ข‹์€ ETA๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ํ˜„์žฌ๋กœ์„œ๋Š” ์•ฝ๊ฐ„ ์–ด๋ ต์ง€๋งŒ, ๋” ์•Œ๊ฒŒ ๋˜๋Š” ๋Œ€๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

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

์•ˆ๋…•ํ•˜์„ธ์š” @envil ์ž…๋‹ˆ๋‹ค .
์ฒ˜์Œ์—๋Š” ๋ชจ๋“  Highcharts์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋Š” highstock.js ๋งŒ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ ํŒŒ์ผ์„ ๋นŒ๋“œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Highcharts ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ด๋ฏธ ๋ชจ๋“ˆํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค: https://www.highcharts.com/docs/getting-started/how-to-create-custom-highcharts-files

์‘๋‹ตํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์ปค์Šคํ…€ ๋นŒ๋“œ ๊ธฐ๋Šฅ์„ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ highchart-custom.src.js ๋ฅผ ์ค€๋‹ค. ์ด๊ฒƒ์€ node_modules๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ „ํ˜€ ์‚ฌ์šฉํ•˜๊ธฐ ๋ถˆํŽธํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  typescript์— ๋Œ€ํ•œ ๋ชจ๋“  ์œ ํ˜• ์ •์˜๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‚ด๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ด๋ฉฐ ๋‹ค๋ฅธ ES ๋ชจ๋“ˆ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ES ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. lodash ์™€ date-fns ์ด underscore ์™€ momentjs $ ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฌผ๋ฆฌ์ณค๋Š”์ง€ ํ™•์ธํ•ด๋ณด์„ธ์š”. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋Š” ์ด์™€ ๊ฐ™์€ ๋ชจ๋“ˆํ™” ๋Šฅ๋ ฅ์ž…๋‹ˆ๋‹ค.

@jon-a-nygaard ์ฐธ๊ณ ๋กœ

๋‚˜๋„ ์ด๊ฒƒ์— ๋น ์ ธ๋“ค๊ณ  ์žˆ๋‹ค.
import * as Highstock from 'highcharts/highstock'; ๋กœ ์ด๋ฆฌ์ €๋ฆฌ ๋Œ์•„๋‹ค๋…”์ง€๋งŒ ์•„๋ฌด ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ์–ผ๋งˆ ์ „์— ์šฐ๋ฆฌ๋Š” ๋ถ€ํ’ˆ ํŒŒ์ผ์„ ES ๋ชจ๋“ˆ๋กœ ๊ฒŒ์‹œํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, import Highcharts from 'highcharts/es-modules/masters/highcharts.src.js' ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฌธ์ œ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ์ด๋Ÿฌํ•œ ๋ถ€ํ’ˆ ํŒŒ์ผ์„ ๋ณด๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์–ด ํŠธ๋ฆฌ ์‰์ดํ‚น ๊ธฐ๋Šฅ์ด ํ–ฅ์ƒ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์–ธ์ œ ๊ฒŒ์‹œ๋  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์ข‹์€ ETA๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ํ˜„์žฌ๋กœ์„œ๋Š” ์•ฝ๊ฐ„ ์–ด๋ ต์ง€๋งŒ, ๋” ์•Œ๊ฒŒ ๋˜๋Š” ๋Œ€๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•,

๋‚˜๋Š” 'stockChart' ์œ ํ˜•๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ์†”๋ฃจ์…˜์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.
https://github.com/highcharts/highcharts-angular#core

import * as Highcharts from 'highcharts';
import Stock from 'highcharts/modules/stock';
Stock(Highcharts);

๋Œ€์‹ ์— :
import * as Highcharts from 'highcharts/highstock';

์ด์ œ ๋ฒˆ๋“ค๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค.
screen

import * ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” highcharts-react๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•„์ง ํฌ๊ธฐํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ์ž‘๋™ํ•˜๋Š” ํŠธ๋ฆฌ ์‰์ดํ‚น์„ ์–ป์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/highcharts/highcharts-react/blob/08cd61ca178276d716ae65fba76e1d07924b2838/src/HighchartsReact.d.ts#L6

ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: Alias โ€‹โ€‹Highcharts ๋ชจ๋“ˆ์„ Highstock ๋ชจ๋“ˆ๋กœ.

์ฐจํŠธ ์œ ํ˜•(Highcharts/Highstock)๊ณผ ๋” ๋‚ฎ์€ ๋ฒˆ๋“ค ํฌ๊ธฐ ๐Ÿฅ‡๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Webpack์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Webpack ๋ฌธ์„œ์—์„œ "resolve.alias" ํ™•์ธ).

    alias: {
      highcharts$: 'highcharts/highstock.js',
    }

Babel์„ ์‚ฌ์šฉํ•˜์—ฌ (babel-plugin-module-resolver) ์•จ๋ฆฌ์–ด์‹ฑ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์ฒด lib๋ฅผ ๋ชจ๋“ˆํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Highstock์€ modules/stock.js ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ Highcharts์— ๋ชจ๋“ˆ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ:

import * as Highcharts from 'highcharts';
import Stock from 'highcharts/modules/stock';
Stock(Highcharts);

@pawelfus ์–ด๋–ป๊ฒŒ ๋“  ๋‚ด ํ…Œ์ŠคํŠธ์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. TypeError: Highcharts.stockChart is not a function

๊ทธ๋Ÿฌ๋‚˜ ์œ ํ˜• ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋†๋‹ด์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์•„์ด๋””์–ด๋ผ๋„?

์—…๋ฐ์ดํŠธ
jest.config.js ์—์„œ ๋ชจ๋“ˆ์„ ๋‹ค๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

  moduleNameMapper: {
    '^highcharts$': '<rootDir>/node_modules/highcharts/highstock'
  },

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ํ”„๋กœ์ ํŠธ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ์— ์ •๋ง ๊ฑฐ๋Œ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— Highcharts๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค :(

์•ˆ๋…•ํ•˜์„ธ์š” @Yohandah์ž…๋‹ˆ๋‹ค! https://github.com/highcharts/highcharts/issues/12738์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ด์ œ ์ ˆ๋ฐ˜ ์ •๋„ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ES ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜๋ฌด๋ฅผ ํ”๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ๊ณต์‹์ ์œผ๋กœ ์ง€์›๋˜์ง€๋Š” ์•Š์ง€๋งŒ(๋งˆ์Šคํ„ฐ๋งŒ ํ•ด๋‹น) ํŒŒ์ผ์„ ์ด๋™ํ•˜๊ณ  ๋ถ„ํ• ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ์˜ˆ์ œ์˜ ๊ฒฝ๋กœ๊ฐ€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

import Chart from 'https://code.highcharts.com/es-modules/parts/Chart.js'
import SVGRenderer from 'https://code.highcharts.com/es-modules/parts/SVGRenderer.js'
new Chart('container', { /* ...options... */ });

https://jsfiddle.net/xtof0m14/

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