Moment: webpack으둜 μ‚¬μš© 지침 μΆ”κ°€

에 λ§Œλ“  2014λ…„ 01μ›” 22일  Β·  31μ½”λ©˜νŠΈ  Β·  좜처: moment/moment

Moment.jsλ₯Ό webpack κ³Ό μ μ ˆν•˜κ²Œ ν†΅ν•©ν•˜κΈ° μœ„ν•œ 지침 을 μ‚¬μš©ν•  μœ„μΉ˜ μ„Ήμ…˜μ— μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.

require('momentjs/moment.js') λŠ” λ‹€μŒκ³Ό 같은 λͺ‡ 가지 였λ₯˜λ₯Ό μΌμœΌν‚΅λ‹ˆλ‹€.

ERROR in ./app/bower_components/momentjs/lang/ar-ma.js
Module not found: Error: Cannot resolve module moment in /home/fernando/work/myproject/myproject-manage-app/app/bower_components/momentjs/lang
 @ ./app/bower_components/momentjs/lang/ar-ma.js 8:8-35

ERROR in ./app/bower_components/momentjs/lang/ar.js
Module not found: Error: Cannot resolve module moment in /home/fernando/work/myproject/myproject-manage-app/app/bower_components/momentjs/lang
 @ ./app/bower_components/momentjs/lang/ar.js 8:8-35

require ('momentjs/min/moment-with-langs.js') 둜 인해 λ‹€μŒ κ²½κ³ κ°€ λ°œμƒν•©λ‹ˆλ‹€.

WARNING in ./app/bower_components/momentjs/min/moment-with-langs.js
Module not found: Error: Cannot resolve file or directory ./lang in /home/fernando/work/myproject/myproject-manage-app/app/bower_components/momentjs/min
 @ ./app/bower_components/momentjs/min/moment-with-langs.js 808:24-46
Documentation

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@sokra κ°€ μ œμ•ˆν•œ λŒ€λ‘œ ν•„μš”ν•œ λ‘œμΌ€μΌλ§Œ ν•„μš”λ‘œ ν•˜κΈ° μœ„ν•΄ λ‹€μŒ ν”ŒλŸ¬κ·ΈμΈμ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ moment 의 lang 디렉토리가 moment locale 둜 λ³€κ²½λ˜μ—ˆμŒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

plugins: [
    new webpack.ContextReplacementPlugin(/moment[\\\/]locale$/, /^\.\/(en|ko|ja|zh-cn)$/)
]

λͺ¨λ“  31 λŒ“κΈ€

λ‚˜λŠ” Webpack을 μ‚¬μš©ν•œ 적이 μ—†μœΌλ―€λ‘œ κ·Έ 지침이 무엇인지 ν™•μ‹ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 당신은 그것을 μ•Œμ•„λ‚Ό 수 μžˆμ—ˆλ‚˜μš”? κ·Έλ ‡λ‹€λ©΄ κ·€ν•˜μ˜ 지침을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹΅μž₯을 보내 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

아직 μ•„λ‹ˆμ§€λ§Œ 계속 μ•Œλ €λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

μ–Έμ–΄ νŒŒμΌμ€ moment λͺ¨λ“ˆμ„ μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€. 헀더 μ°Έμ‘°:

    if (typeof define === 'function' && define.amd) {
        define(['moment'], factory); // AMD

moment λŠ” μ‹€μ œλ‘œ 이 λͺ¨λ“ˆμ˜ μ˜¬λ°”λ₯Έ 이름이며(package.json μ°Έμ‘°) npmμ—μ„œ μ„€μΉ˜ν•˜λ©΄ λͺ¨λ“  것이 μž‘λ™ν•©λ‹ˆλ‹€.

@fernandoacorreia 폴더 이름은 momentjs μž…λ‹ˆλ‹€.

@icambron CommonJ 와 λ§ˆμ°¬κ°€μ§€λ‘œ define(['../moment'], factory); κ°€ μ•„λ‹Œ μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

lang 파일과 moment.js νŒŒμΌμ—μ„œ CommonJ와 AMD의 μˆœμ„œκ°€ μΌμΉ˜ν•˜λ©΄ 더 쒋을 κ²ƒμž…λ‹ˆλ‹€.


기본적으둜 webpack은 require('./lang/' + k); 문으둜 인해 λͺ¨λ“  μ–Έμ–΄λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. ContextReplacementPlugin 둜 이것을 μž¬μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

new webpack.ContextReplacementPlugin(/moment[\\\/]lang$/, /^\.\/(en-gb|de|pl)$/)

@sokra λͺ¨λ“ˆ μ •μ˜μ˜ λΆˆμΌμΉ˜μ— λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. @icambron 이 μ œμ•ˆμ„ λ³Ό 수 μžˆμŠ΅λ‹ˆκΉŒ?

그건 κ·Έλ ‡κ³ , μ—¬κΈ° 지침에 따라 μ„€μΉ˜ν–ˆκΈ° λ•Œλ¬Έμ— 디렉토리 이름이 momentjs μž…λ‹ˆλ‹€.

bower install --save momentjs

require ('momentjs/min/moment-with-langs.js') 와 같이 ν•„μš”ν•  λ•Œ 경둜 이름을 μ„ μ–Έν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

흠 ... node.js 지침 을 μ‚¬μš©ν•˜λ©΄ μž‘λ™ν•©λ‹ˆλ‹€.

@sokra 도움이 λ©λ‹ˆλ‹€. λ””λ²„κΉ…ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. npm을 톡해 μ„€μΉ˜ν•˜κ³  μ‹Άμ§€λŠ” μ•Šμ§€λ§Œ; λ‚˜λŠ” bowerλ₯Ό 톡해 λͺ¨λ“  ν”„λ‘ νŠΈμ—”λ“œ 쒅속성을 μ„€μΉ˜ν•˜κ³  있으며 bower_components μ—μ„œ λͺ¨λ“ˆλ§Œ κ²€μƒ‰ν•©λ‹ˆλ‹€.

@icambron μ›ΉνŒ©(및 μ•„λ§ˆλ„ λ‹€λ₯Έ λͺ¨λ“ˆ λ‘œλ”)κ³Ό ν˜Έν™˜λ˜λ„λ‘ 지침을 μ—…λ°μ΄νŠΈν•˜λ €λ©΄ λ¬Έμ„œ μ—μ„œ λ‹€μŒ 행을 λ³€κ²½ν•˜μ‹­μ‹œμ˜€.

bower install --save momentjs

μ—κ²Œ:

bower install --save moment=momentjs

npm 지침은 μ €μ—κ²Œ νš¨κ³Όμ μ΄μ—ˆμ§€λ§Œ bower install --save moment=momentjs κ°€ μ•„λ‹™λ‹ˆλ‹€.

@Sigfried bower.json νŒŒμΌμ€ μ–΄λ–»κ²Œ μƒκ²Όλ‚˜μš”? κ΄‘μ‚°μ—λŠ” λ‹€μŒ 쀄이 μžˆμŠ΅λ‹ˆλ‹€.

"moment": "momentjs#~2.5.1"

λ‚΄ webpack.config.js μ—λŠ” λ‹€μŒμ΄ μžˆμŠ΅λ‹ˆλ‹€.

module.exports = {
  resolve: {
    alias: {
      moment: 'moment/moment.js',
    },
    modulesDirectories: ['app/bower_components']
  }
};

λ‚˜λŠ” λ‹€μŒκ³Ό 같이 μˆœκ°„μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

var moment = require('moment');

ν‘œμ€€ Yeoman 디렉토리 ꡬ쑰λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

그것은 λ‚˜λ₯Ό μœ„ν•΄ 그것을 ν–ˆλ‹€. 감사 ν•΄μš”!
(μ €λŠ” Yeoman을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  μ§€κΈˆ μ‹œμž‘ν•΄μ•Ό ν•˜λŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€. Javascript μƒνƒœκ³„λŠ” λ†€λžμŠ΅λ‹ˆλ‹€. μ§€λ‚œ 3κ°œμ›” λ™μ•ˆ μ‹œκ°„μ„ β€‹β€‹μ ˆμ•½ν•˜λŠ” 것 μ™Έμ—λŠ” 아무것도 ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€! :)

이제 bower install --save momentλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@ichernev 쒋은 것 κ°™μŠ΅λ‹ˆλ‹€. 이 경우 μ‚¬μš©μ²˜ λ¬Έμ„œ λ₯Ό μ—…λ°μ΄νŠΈν•˜λ©΄ 이 λ¬Έμ œκ°€ 해결될 것이라고 μƒκ°ν•©λ‹ˆλ‹€.

쑰금 λŠ¦μ—ˆμ§€λ§Œ 이제 제곡 ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    plugins: [
        new webpack.ProvidePlugin({
           "window.moment": "moment"
        }),
        new BowerWebpackPlugin()
    ]

@sokra κ°€ μ œμ•ˆν•œ λŒ€λ‘œ ν•„μš”ν•œ λ‘œμΌ€μΌλ§Œ ν•„μš”λ‘œ ν•˜κΈ° μœ„ν•΄ λ‹€μŒ ν”ŒλŸ¬κ·ΈμΈμ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ moment 의 lang 디렉토리가 moment locale 둜 λ³€κ²½λ˜μ—ˆμŒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

plugins: [
    new webpack.ContextReplacementPlugin(/moment[\\\/]locale$/, /^\.\/(en|ko|ja|zh-cn)$/)
]

λ¬Έμ„œ ν•­λͺ©μ„ moment/momentjs.com#269둜 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 그곳을 좔적할 κ²ƒμž…λ‹ˆλ‹€.

μ €λŠ” es6, typescript 및 맀우 μ—„κ²©ν•œ tslint κ·œμΉ™μ„ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이것이 λ‚΄κ°€ ν”„λ‘œμ νŠΈμ— μ°Έμ—¬ν•˜κΈ° μœ„ν•΄ ν•œ μΌμž…λ‹ˆλ‹€.

import "expose?moment!imports?this=>window&exports=>false&define=>false!exports?window.moment!moment";

방금 'moment.min.js'와 같은 폴더에 빈 'locale' 폴더λ₯Ό λ§Œλ“€μ–΄ ν•΄λ‹Ή ν΄λ”μ˜ λͺ¨λ“  js νŒŒμΌμ„ ν¬ν•¨ν•˜λ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.

ν•΄ν‚Ήμ΄μ§€λ§Œ μž‘λ™ν•©λ‹ˆλ‹€.

Webpackμ—μ„œ μ–Έμ–΄λ₯Ό 지연/λ™μ μœΌλ‘œ λ‘œλ“œν•˜λ €λ©΄ bundle-loader 와 ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1단계 - μ›ΉνŒ© ꡬ성:

new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), // to not to load all locales

2단계 - ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œμ—μ„œ:

require('bundle!moment/locale/' + locale + '.js')(function () {
  moment().locale(locale).format('lll');
  // note that now you can use the locale even outside of this callback
});

λ‚΄ 경우(webpack + npm install moment ) src/lib/locale 폴더 λ‚΄μ—μ„œ λ‘œμΌ€μΌμ„ μ°ΎλŠ” webpack에 λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ moment.js κ°€ μ„ νƒλ˜κ³  μžˆμ—ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

node_modules/moment/src 폴더λ₯Ό μ™„μ „νžˆ μ œκ±°ν•˜κ³  λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ λ‘œμΌ€μΌμ„ μ„€μ •ν•˜λŠ” μˆœκ°„μ„ κ°€μ Έμ˜΅λ‹ˆλ‹€.

import moment from 'moment';
import 'moment/locale/en-gb';
moment.locale('en-gb');

λͺ¨λ“  것이 μ™„λ²½ν•˜κ²Œ μž‘λ™ν•˜κ³  κ²½κ³ κ°€ μ—†μœΌλ©° λͺ…μ‹œμ μœΌλ‘œ κ°€μ Έμ˜¨ λ‘œμΌ€μΌλ§Œ λΉŒλ“œμ— ν¬ν•¨λ©λ‹ˆλ‹€(μ²˜μŒμ— μΆ”κ°€ν•œ 이 주석 에 μ„€λͺ…λœ λŒ€λ‘œ webpack.ContextReplacementPlugin λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ λ„).

@micheleb ν•΄λ‹Ή ν•˜μœ„ 폴더λ₯Ό μ°ΎλŠ” μ‹€μ œ 원인은 webpack 2μ—μ„œ μ€€μˆ˜ν•˜λŠ” momentjs의 package.json jsnext:main 잘λͺ»λœ μ„€μ •μž…λ‹ˆλ‹€.

jsnext:main λŠ” μ›μ‹œ μ†ŒμŠ€ μ½”λ“œκ°€ μ•„λ‹ˆλΌ ES6 λͺ¨λ“ˆ ꡬ문을 μ‚¬μš©ν•˜λŠ” λͺ¨λ“ˆ λΉŒλ“œλ₯Ό κ°€λ¦¬μΌœμ•Ό _μ•„λ‹Œ_ ν•©λ‹ˆλ‹€.

이것은 webpack μ„€μ •( resolve: { alias: { moment: 'moment/moment.js' } } )μ—μ„œ 'moment' λ₯Ό 'moment/moment.js' (commonjs "main")둜 μ•¨λ¦¬μ–΄μ‹±ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νŽΈμ§‘: λ˜λŠ” src λ””λ ‰ν† λ¦¬μ˜ λ‘œμΌ€μΌ 데이터λ₯Ό μ‚¬μš©ν•˜λŠ” ContextReplacementPlugin μ‚¬μš©(예: jsnext:main 와 λ™μΌν•œ moment λͺ¨λ“ˆ μš”μ²­)은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. λΉ„μŠ·ν•˜λ‹€:

new webpack.ContextReplacementPlugin(/^\.\/locale$/, context => {
  if (!/\/moment\//.test(context.context)) { return }
  // context needs to be modified in place
  Object.assign(context, {
    // include only CJK
    regExp: /^\.\/(ja|ko|zh)/,
    // point to the locale data folder relative to moment's src/lib/locale
    request: '../../locale'
  })
}),

이것은 μ•„λ§ˆλ„ μ½œλ°±μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  μž‘μ„±ν•  수 μžˆμ§€λ§Œ moment ./locale μš”μ²­μ—λ§Œ μ μš©λœλ‹€λŠ” "ν™•μ‹€ν•œ" 것을 μ›ν–ˆμŠ΅λ‹ˆλ‹€.

request 이 ../../../locale λ₯Ό 가리킀지 μ•ŠλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. μ»΄νŒŒμΌλ˜λŠ” λ™μ•ˆ moment 의 전체 볡사본 2κ°œκ°€ λ²ˆλ“€λ©λ‹ˆλ‹€.

@sokra async: true κ°€ μ»¨ν…μŠ€νŠΈμ—μ„œ μ„€μ •λ˜λ©΄ μ–΄λ–»κ²Œ λ©λ‹ˆκΉŒ? κ·Έλ ‡κ²Œ ν•˜λ©΄ λͺ¨λ“ˆμ΄ λ³„λ„μ˜ 청크둜 μƒμ„±λ˜λŠ” 것을 λ³Ό 수 μžˆμ§€λ§Œ μ˜ˆμƒλ˜λŠ” λŸ°νƒ€μž„ λ™μž‘μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ? 좩돌? require.ensure / System.import 의 μ»¨ν…μŠ€νŠΈλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ ν˜ΈμΆœλ˜λŠ” 경우 true "기본적으둜"라고 κ°€μ •ν•©λ‹ˆλ‹€.

이거 κ³ μ³μ‘Œμ–΄? 그렇지 μ•ŠμœΌλ©΄ λ‹€μ‹œ μ—΄μ–΄μ•Όν•©λ‹ˆκΉŒ?

μ™œ νμ‡„λ˜μ—ˆλ‚˜μš”? 이것은 μ—¬μ „νžˆ β€‹β€‹β€‹β€‹λ°œμƒν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

@ajohnsonRH

"λ¬Έμ„œλ₯Ό μ—…λ°μ΄νŠΈν•˜λ©΄ 이 λ¬Έμ œκ°€ 해결될 것이라고 λ―ΏμŠ΅λ‹ˆλ‹€."

"moment/momentjs.com#269둜 λ¬Έμ„œ ν•­λͺ©μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. κ±°κΈ°μ—μ„œ 좔적할 κ²ƒμž…λ‹ˆλ‹€."

λ”°λΌμ„œ 이 λ¬Έμ œλŠ” Moment의 λ¬Έμ„œ μ›Ήμ‚¬μ΄νŠΈμ— μžˆλŠ” 문제둜 λŒ€μ²΄λ˜μ—ˆκΈ° λ•Œλ¬Έμ— μ—¬κΈ°μ—μ„œ λ‹«ν˜”μŠ΅λ‹ˆλ‹€. λˆ„κ΅°κ°€κ°€ moment/momentjs.com#269λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ PR을 μž‘μ„±ν–ˆμœΌλ©΄ ν•©λ‹ˆλ‹€.

@butterflyhug

이 μˆ˜μ • 사항은 μ €μ—κ²Œ νš¨κ³Όμ μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

  1. npm μ„€μΉ˜λ₯Ό μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€
  2. vendor.tsλ₯Ό μ—΄κ³  import 'moment' 행을 μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.

참고둜:
Angular2 v2.0.0, Webpack ^1.13.0 μ‚¬μš©

webpack에 ꡬ성을 μΆ”κ°€ν•˜μ§€ μ•Šκ³  λͺ¨λ“  λ‘œμΌ€μΌμ„ ν¬ν•¨ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆκΉŒ? create-react-app 을 μ‚¬μš©ν•˜κ³  μžˆλŠ”λ° webpack ꡬ성 νŒŒμΌμ„ νŽΈμ§‘ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” λͺ¨λ“  곳을 κ²€μƒ‰ν•˜κ³  항상 webpack에 ꡬ성 라인을 μΆ”κ°€ν•˜λŠ” κ²ƒμœΌλ‘œ λŒμ•„μ˜€λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.
https://github.com/moment/moment/issues/2373
https://github.com/moment/moment/issues/2416

λ™μ˜ν•©λ‹ˆλ‹€. λ‘œμΌ€μΌμ„ μš”κ΅¬ν•˜λŠ” 것은 μ•”μ‹œμ μ΄μ§€ μ•Šκ³  λͺ…μ‹œμ μ΄μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

그것은 μˆœκ°„, webpack, bower, npmμ—μ„œ 제기된 문제의 μˆ˜μ™€ λͺ‡ _λ…„_ μ΄ν›„λ‘œ λͺ¨λ“  μ‚¬λžŒλ“€μ΄ 그것을 μš°νšŒν•˜κΈ° μœ„ν•΄ 보낸 μ‹œκ°„μ— λΉ„μΆ”μ–΄ λ³Ό λ•Œ λ„ˆλ¬΄λ‚˜ λΆ„λͺ…ν•©λ‹ˆλ‹€.

@ajohnsonRH

npm νŒ©μ„ μ„€μΉ˜ν–ˆμ§€λ§Œ μ„€μΉ˜ν•  λ•Œ

'moment-timezone'μ—μ„œ μˆœκ°„ κ°€μ Έμ˜€κΈ°;

μˆœκ°„μ€ 항상 μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ–΄λ–»κ²Œ?

Angular 2 CLI ν”„λ‘œμ νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ 이와 λ™μΌν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 아직 μž‘λ™ν•˜λŠ” μ†”λ£¨μ…˜μ„ 찾은 μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

Angular CLI ν”„λ‘œμ νŠΈμ— λŒ€ν•œ λ‹¨μ„œλ„ μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€.

Angular CLI에 λŒ€ν•œ λ‹¨μ„œκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

λ³΄μ‹œλ‹€μ‹œν”Ό 4κ°œμ›” 전에 CLI에 λŒ€ν•΄ μ§ˆλ¬Έν–ˆμ§€λ§Œ 닡변이 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. 우리의 μ†”λ£¨μ…˜μ€ λ‹¨μˆœνžˆ momentλ₯Ό date-fns둜 λ°”κΎΈλŠ” κ²ƒμ΄μ—ˆμœΌλ©° ν”„λ‘œμ νŠΈμ—μ„œλ„ chartjsλ₯Ό μ‚¬μš©ν•˜κ³  있고 ν˜„μž¬ 진행 쀑인 μž‘μ—…μ— λŒ€ν•œ μˆœκ°„ 쒅속성이 있기 λ•Œλ¬Έμ— 그것도 ꡐ체.

μ•„μ£Ό 쒋은 μ†”λ£¨μ…˜
https://github.com/moment/momentjs.com/pull/489

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰