๋ด ์์ฉ ํ๋ก๊ทธ๋จ์์ Angular์ ํจ๊ป Highcharts ๋ฐ Highstocks๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ธฐ๋ฅ์ ์ข์ง๋ง Highcharts์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ต์ ํํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๋ด ์ ํ๋ฆฌ์ผ์ด์
๋ฒ๋ค ์ ๋ณด์ ์ด ์คํฌ๋ฆฐ์ท์ ๋ณด์ญ์์ค.
Highcharts๋ Angular(๋นจ๊ฐ์ ์ค๊ณฝ์ )์ ๊ฐ์ ๋ํผํ ํ๋ ์์ํฌ๋ณด๋ค ํจ์ฌ ๋ ํฐ ๊ฑฐ์ 500kb(์งํ ํ๋์ ์ค๊ณฝ์ )๋ฅผ ๋จน์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. Highcharts์์ ํ๋์ ์ฐจํธ๋ง ์ฌ์ฉํ๋๋ผ๋ ๋ชจ๋ Highcharts ์ฝ๋๋ฅผ ๊ณ์ ์ํํด์ผ ํ๋ฏ๋ก ํ์ฉํ ์ ์์ ์ ๋๋ก ์ต์ ํ๋์ง ์์ต๋๋ค.
๋ด๊ฐ ์ฌ๊ธฐ์ ์๊ณ ์๋ ์๋ฃจ์
์ Highcharts๋ฅผ ๋ชจ๋ํํ์ฌ ํ์ํ ๊ฒ๋ง ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํ๋ ๊ฒ์
๋๋ค. ๋ํ ์๋ก์ด Webpack Tree Shaking์ผ๋ก ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
์ด๊ฒ์ ๊ณง ๊ณ ์น ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ฌ๋ฌ๋ถ์ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ๊ณ ์์ต๋๊น?
์๋
ํ์ธ์ @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';
์ด์ ๋ฒ๋ค๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ณด์
๋๋ค.
import * ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ highcharts-react๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋๋ ์์ง ํฌ๊ธฐํ์ง ์์์ง๋ง ์ง๊ธ๊น์ง ๊ทธ๊ฒ์ ์ํด ์๋ํ๋ ํธ๋ฆฌ ์์ดํน์ ์ป์ ์ ์์์ต๋๋ค.
ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ: 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... */ });
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ํ์ธ์, ์ผ๋ง ์ ์ ์ฐ๋ฆฌ๋ ๋ถํ ํ์ผ์ ES ๋ชจ๋๋ก ๊ฒ์ํ๊ธฐ ์์ํ์ต๋๋ค. ์ฆ,
import Highcharts from 'highcharts/es-modules/masters/highcharts.src.js'
ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ฌธ์ ์ ๋์์ด ๋ ์ ์์ต๋๋ค.๋ํ ์ฐ๋ฆฌ๋ ํ์ฌ ์ด๋ฌํ ๋ถํ ํ์ผ์ ๋ณด๋ค ๋ ๋ฆฝ์ ์ผ๋ก ๋ง๋๋ ์์ ์ ํ๊ณ ์์ด ํธ๋ฆฌ ์์ดํน ๊ธฐ๋ฅ์ด ํฅ์๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ์ธ์ ๊ฒ์๋ ๊ฒ์ธ์ง์ ๋ํ ์ข์ ETA๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ํ์ฌ๋ก์๋ ์ฝ๊ฐ ์ด๋ ต์ง๋ง, ๋ ์๊ฒ ๋๋ ๋๋ก ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค.