Moment: ์žกํžˆ์ง€ ์•Š์€ ์˜ค๋ฅ˜: './locale' ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2020๋…„ 05์›” 01์ผ  ยท  69์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: moment/moment

๋ฒ„๊ทธ ์„ค๋ช…
ํ”„๋กœ๋•์…˜ ์ตœ์ ํ™” ๋นŒ๋“œ๋ฅผ ๋นŒ๋“œํ•œ ํ›„ ํฌ๋กฌ ์ฝ˜์†”์—์„œ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์žกํžˆ์ง€ ์•Š์€ ์˜ค๋ฅ˜: './locale' ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
2.d0944550.chunk.js:1์—์„œ
๋ชจ๋“ˆ์—์„œ.(2.d0944550.chunk.js:1)
f์—์„œ ((์ธ๋ฑ์Šค):1)
Module.837์—์„œ (main.091f08fc.chunk.js:1)
f์—์„œ ((์ธ๋ฑ์Šค):1)
Object.540์—์„œ (main.091f08fc.chunk.js:1)
f์—์„œ ((์ธ๋ฑ์Šค):1)
((์ƒ‰์ธ):1)
Array.e์—์„œ [ํ‘ธ์‹œ๋กœ] ((์ธ๋ฑ์Šค):1)
main.091f08fc.chunk.js:1์—์„œ

์ด๊ฒƒ์€ ๋‚ด package.json์ž…๋‹ˆ๋‹ค.

{
  "name": "sheetgo-front-end",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@allpro/react-router-pause": "^1.1.3",
    "@material-ui/core": "^4.4.2",
    "@material-ui/icons": "^4.5.1",
    "@material-ui/lab": "^4.0.0-alpha.26",
    "@material-ui/styles": "^4.4.1",
    "@material/icon-button": "^3.1.0",
    "@material/react-button": "^0.15.0",
    "@material/react-card": "^0.15.0",
    "@material/react-icon-button": "^0.15.0",
    "@material/react-material-icon": "^0.15.0",
    "@material/react-select": "^0.15.0",
    "@material/react-tab": "^0.15.0",
    "@mdi/js": "^3.4.93",
    "@mdi/react": "^1.1.0",
    "@stripe/react-stripe-js": "^1.1.0",
    "@stripe/stripe-js": "^1.2.0",
    "@svgr/webpack": "^4.1.0",
    "apexcharts": "^3.8.6",
    "axios": "^0.19.2",
    "browser-info": "^1.2.0",
    "chart.js": "^2.7.2",
    "classnames": "^2.2.6",
    "color-sort": "^0.0.1",
    "connected-react-router": "^6.5.2",
    "countup.js": "^1.9.3",
    "cra-append-sw": "^2.7.0",
    "filepond": "4.1.0",
    "filepond-plugin-file-validate-size": "2.1.1",
    "filepond-plugin-file-validate-type": "1.2.2",
    "form-serialize": "^0.7.2",
    "fuse.js": "^3.4.2",
    "history": "^4.10.1",
    "inputmask": "^4.0.0",
    "is-mobile": "^2.0.0",
    "jquery": "^3.3.1",
    "jquery-ui-sortable-npm": "^1.0.0",
    "js-cookie": "^2.2.0",
    "lodash": "^4.17.10",
    "markdown-to-jsx": "^6.10.3",
    "material-components-web": "^3.1.0",
    "material-ui-chip-input": "^1.0.0",
    "md5": "^2.2.1",
    "memoize-one": "^5.0.4",
    "moment": "^2.22.2",
    "moment-timezone": "^0.5.27",
    "onecolor": "^3.1.0",
    "p-queue": "^6.1.1",
    "payform": "^1.2.2",
    "promise-throttle": "^1.0.0",
    "prop-types": "^15.7.0",
    "query-string": "^6.5.0",
    "react": "^16.8.1",
    "react-apexcharts": "^1.3.3",
    "react-dom": "^16.8.1",
    "react-draggable": "4.2.0",
    "react-filepond": "7.0.1",
    "react-google-authorize": "^1.0.4",
    "react-hotjar": "^2.0.0",
    "react-id-swiper": "^1.6.8",
    "react-intl": "^2.5.0",
    "react-modal-video": "^1.2.3",
    "react-redux": "^7.1.1",
    "react-resizable": "^1.8.0",
    "react-router": "^5.1.2",
    "react-router-dom": "^5.1.2",
    "react-router-last-location": "^2.0.1",
    "react-scripts": "^2.1.4",
    "react-sizeme": "^2.5.2",
    "react-stripe-elements": "^4.0.0",
    "react-text-mask": "^5.4.3",
    "react-virtualized-auto-sizer": "^1.0.2",
    "react-vis-network": "^1.0.0",
    "react-window": "^1.8.1",
    "recompose": "^0.30.0",
    "redux": "^4.0.4",
    "redux-react-session": "^2.4.0",
    "redux-saga": "^1.1.1",
    "redux-thunk": "^2.3.0",
    "socket.io-client": "^2.3.0",
    "sort-by": "^1.2.0",
    "tether": "^1.4.4",
    "throttle-debounce": "^2.1.0",
    "url-loader": "^1.0.1"
  }

dev ๋ฒ„์ „์šฉ ์›์‚ฌ๋กœ ๋กœ์ปฌ๋กœ ๋นŒ๋“œํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด
๋™์ž‘์„ ์žฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„:
์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ ์•ฑ์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜์†”์—์„œ ํ•ด๋‹น ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™
์˜ˆ์ƒํ–ˆ๋˜ ์ผ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ์„ค๋ช….

์Šคํฌ๋ฆฐ์ƒท
ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์Šคํฌ๋ฆฐ์ƒท์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

๋ฐ์Šคํฌํƒ‘(๋‹ค์Œ ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค):

  • OS: [์˜ˆ: iOS]
  • ๋ธŒ๋ผ์šฐ์ €[์˜ˆ: ํฌ๋กฌ, ์‚ฌํŒŒ๋ฆฌ]
  • ๋ฒ„์ „ [์˜ˆ: 22]

์Šค๋งˆํŠธํฐ(๋‹ค์Œ ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”):

  • ์žฅ์น˜: [์˜ˆ: iPhone6]
  • OS: [์˜ˆ: iOS8.1]
  • ๋ธŒ๋ผ์šฐ์ €[์˜ˆ: ์Šคํ†ก ๋ธŒ๋ผ์šฐ์ €, ์‚ฌํŒŒ๋ฆฌ]
  • ๋ฒ„์ „ [์˜ˆ: 22]

์ˆœ๊ฐ„๋ณ„ ํ™˜๊ฒฝ

  • ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ์ปดํ“จํ„ฐ์˜ ์‹œ๊ฐ„๋Œ€ ์„ค์ •
  • ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ ์‹œ๊ฐ„ ๋ฐ ๋‚ ์งœ
  • ์‚ฌ์šฉ ์ค‘์ธ ๊ธฐํƒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(TypeScript, Immutable.js ๋“ฑ)

ํ™˜๊ฒฝ์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ถœ๋ ฅ์„ ํฌํ•จํ•˜์‹ญ์‹œ์˜ค.

console.log((new Date()).toString())
console.log((new Date()).toLocaleString())
console.log((new Date()).getTimezoneOffset())
console.log(navigator.userAgent)
console.log(moment.version)

์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ
์—ฌ๊ธฐ์— ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์ปจํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

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

๊ฐ™์€ ๋ฌธ์ œ,

๋ฒ„์ „ ๋ฒˆํ˜ธ ์•ž์˜ ์บ๋Ÿฟ ๊ธฐํ˜ธ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ Package.json ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
"์ˆœ๊ฐ„": "2.24.0"

์ƒˆ ๋ฒ„์ „์˜ ๋ฒ„๊ทธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

์ •ํ™•ํžˆ. ๋ฐฉ๊ธˆ ์ด ์˜ค๋ฅ˜์— ์ง๋ฉดํ–ˆ๊ณ  ๋ช‡ ์‹œ๊ฐ„ ์ „์— ์ƒˆ ๋ฒ„์ „์„ ํ‘ธ์‹œํ•œ ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์›์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ package.json์— resolution ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•˜์œ„ ์ข…์†์„ฑ ๋ฒ„์ „์„ ์žฌ์ •์˜ํ•˜๋ฉด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

  "resolutions": {
    "moment": "2.24.0"
  }

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€!

๋˜ํ•œ 2.24.0์—๋Š” ./node_modules/chart.js/node_modules/moment/src/lib/locale/locales.js Critical dependency: the request of a dependency is an expression ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜์‹ญ์‹œ์˜ค.

๋งˆ์ฐฌ๊ฐ€์ง€!

  • 1

๊ฐ™์€ ๋ฌธ์ œ,

๋ฒ„์ „ ๋ฒˆํ˜ธ ์•ž์˜ ์บ๋Ÿฟ ๊ธฐํ˜ธ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ Package.json ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
"์ˆœ๊ฐ„": "2.24.0"

์ƒˆ ๋ฒ„์ „์˜ ๋ฒ„๊ทธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ ๋ฐค Jest๋ฅผ ์„ค์น˜ํ–ˆ๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ  ๋‚ด ๋ชจ๋“ˆ ํด๋”์™€ ํ•จ๊ป˜ ๋ชจ๋“  yarn.lock ๋ฐ package.lock ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๊ณ  yarn install ๋˜๋Š” npm install์„ ์ˆ˜ํ–‰ํ•˜๋ผ๋Š” ์ง€์‹œ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์›์‚ฌ๋ฅผ ์„ค์น˜ํ–ˆ์„ ๋•Œ ์ด ์Šค๋ ˆ๋“œ์—์„œ ์–ธ๊ธ‰ํ•œ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์‹ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜ํƒ€๋‚˜๋Š” ํŽ˜์ด์ง€๋Š” ์˜ค๋ฅ˜๊ฐ€ ์›นํŒฉ ์˜ค๋ฅ˜์ด๊ณ  moment-timezone์„ ๊ฐ€๋ฆฌ์ผฐ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ž ๊ธˆ ํŒŒ์ผ, ๋ชจ๋“ˆ ํด๋”๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  npm install (์›์‚ฌ ์„ค์น˜ ๋Œ€์‹ )๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฐฉ๋ฒ•์œผ๋กœ package.json์—์„œ ^๋ฅผ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ๐Ÿ‘

์ด๋ฒˆ ์ฃผ ์ดˆ์— is-promise ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ธํ•ด ์ด์ƒํ•œ ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ^ ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ด์ œ ^ ๋Œ€์‹  ๋ชจ๋“  package.json ์—„๊ฒฉํ•œ ๋ฒ„์ „์— ๋Œ€ํ•ด ๋‹ค์†Œ๊ฐ„ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

package.json์—์„œ ์บ๋Ÿฟ์„ ์ œ๊ฑฐํ•˜๊ณ  + rm -rf node_modules + yarn ๋ฅผ ์‹คํ–‰ํ–ˆ์ง€๋งŒ webpack์„ ์‹คํ–‰ํ•  ๋•Œ ์—ฌ์ „ํžˆ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ˆœ๊ฐ„ ์‹œ๊ฐ„๋Œ€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ 2.25์ž…๋‹ˆ๋‹ค. ์บ๋Ÿฟ์„ ์ œ๊ฑฐํ•ด๋„ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€!

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜๋ฉฐ create-react-app์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
// webpack.config.js์—์„œ

plugins: [
...
// new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
// replace the line above with below, regex to match the locale you want to use
new webpack.ContextReplacementPlugin(/moment[\/\\]locale/,  /(en|zh-cn)\.js/)
...
]

์ตœ์‹  ๋ฒ„์ „์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. "^" ์—†์ด "2.24.0"์œผ๋กœ ๋˜๋Œ๋ ค์•ผ ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด gatsby ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์˜ ์ˆœ๊ฐ„ ๋ฒ„์ „ 2.25.0 ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Cannot find module './locale'                              


> 1 | import { Moment } from './constructor';                                                                                                 
    | ^                                                                                                                                       
  2 |                                                                                                                                         
  3 | var proto = Moment.prototype;                                                                                                           
  4 |                                                                                                                                         


  WebpackError: Cannot find module './locale'                                                                                                 

  - prototype.js:1 webpackMissingModule                                                                                                       
    node_modules/moment/src/lib/moment/prototype.js:1:1                                                                                       

  - prototype.js:1 Module../node_modules/moment/src/lib/moment/prototype.js                                                                   
    node_modules/moment/src/lib/moment/prototype.js:1:1                                                                                       

  - moment.js:1 Module../node_modules/moment/src/lib/moment/moment.js                                                                         
    node_modules/moment/src/lib/moment/moment.js:1:1                                                                                          

  - moment.js:1 Module../node_modules/moment/src/moment.js                                                                                    
    node_modules/moment/src/moment.js:1:1

2.24.0 ์ˆœ๊ฐ„์—๋Š” ๊ทธ๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ฅผ ์กฐ์‚ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์†Œํ•œ์˜(๋น„) ์ž‘๋™ ์˜ˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

"2.24.0"์œผ๋กœ ๋˜๋Œ๋ ค์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆœ๊ฐ„์— './locale'์„(๋ฅผ) ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค : https://github.com/moment/moment/issues/4216#issuecomment -622453248

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ฅผ ์กฐ์‚ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์†Œํ•œ์˜(๋น„) ์ž‘๋™ ์˜ˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @ichernev - ์ฒจ๋ถ€ ํŒŒ์ผ์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค. npm install ์„ ์‹คํ–‰ํ•˜๊ณ  npm start :)

issue5484.zip

์š”๊ตฌ ์ฒ˜๋ฆฌ๊ฐ€ 2.24.0 ๋™์ž‘์œผ๋กœ ๋˜๋Œ์•„๊ฐ”์Šต๋‹ˆ๋‹ค.

2.25.1์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2.25.1 ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

prototype.js:1 Uncaught Error: Cannot find module './locale'
    at webpackMissingModule (prototype.js:1)
    at Module../node_modules/moment/src/lib/moment/prototype.js (prototype.js:1)
    at __webpack_require__ (bootstrap:782)
    at fn (bootstrap:150)
    at Module../node_modules/moment/src/lib/moment/moment.js (moment.js:1)
    at __webpack_require__ (bootstrap:782)
    at fn (bootstrap:150)
    at Module../node_modules/moment/src/moment.js (moment.js:1)
    at __webpack_require__ (bootstrap:782)
    at fn (bootstrap:150)
    at Module../src/Menu.js (Home.js:186)
    at __webpack_require__ (bootstrap:782)
    at fn (bootstrap:150)
    at Module../src/App.js (Add.js:157)
    at __webpack_require__ (bootstrap:782)
    at fn (bootstrap:150)
    at Module../src/index.js (index.css?02e3:45)
    at __webpack_require__ (bootstrap:782)
    at fn (bootstrap:150)
    at Object.0 (serviceWorker.js:135)
    at __webpack_require__ (bootstrap:782)
    at checkDeferredModules (bootstrap:45)
    at Array.webpackJsonpCallback [as push] (bootstrap:32)
    at main.chunk.js:1

ํ•˜์ง€๋งŒ ์ œ๊ฐ€ ๋ญ”๊ฐ€ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋„ ์ด ์˜ค๋ฅ˜๊ฐ€ 2.25.1์—์„œ ์‚ฌ๋ผ์กŒ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜์™€ ์ˆœ๊ฐ„ ์‹œ๊ฐ„๋Œ€์— ๋™์ผํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” 2.24.0์„ ๊ฐ•์ œ๋กœ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ˆœ๊ฐ„ ์‹œ๊ฐ„๋Œ€๊ฐ€ ์ตœ์‹ ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ถ”์ธกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@strange1120 ์€ [email protected]์ธ๊ฐ€์š”?
์‹ค์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ yarn why moment ๋ฅผ ์‹œ๋„ํ•˜์—ฌ ์„ค์น˜๋œ deps๋ฅผ ํ‘œ์‹œํ•˜์‹ญ์‹œ์˜ค.

@ichernev ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. 2.25.1์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์— ์—…๋กœ๋“œํ•œ ์•ฑ๊ณผ ๊นจ๋—ํ•œ node_modules/package-lock.json์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„์ „์ด 2.25.1์ธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋˜์ง‘๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ๋‹ซํžŒ ์ด์œ ๋Š”...์ด๊ฒƒ์€ ํ˜ผ๋ž€์„ ์ผ์œผํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋งž์•„์š” ์ €๋„ ์š”. ๋‚ด Docker์ธ ์ค„ ์•Œ์•˜์–ด

์ œ๊ฑฐ๋œ ์ œ์•ˆ - 2020๋…„์—๋Š” ๊ฐ€์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค :( @ichernev ์•„์ง ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๊นŒ?

create-react-app์„ ์‚ฌ์šฉํ•˜๊ณ  CRA๋ฅผ ๋ฐฐ์ถœํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋‹ค์Œ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ถ”๊ฐ€ ์žฌ์ •์˜๋ฅผ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— config-overrides.js ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

module.exports = function override(config, env) {
  // do stuff with the webpack config...
  return config;
};

package.json ํŽธ์ง‘:

"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",

๊ฐœ๋ฏธ ๋””์ž์ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— config-overrides.js ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

const { override, fixBabelImports } = require("customize-cra");
const webpack = require("webpack");

const fixMomentJs = (config) => {
  config.plugins.push(
    new webpack.ContextReplacementPlugin(/^\.\/locale$/, (context) => {
      if (!/\/moment\//.test(context.context)) {
        return;
      }
      // context needs to be modified in place
      Object.assign(context, {
        // include locales
        regExp: /^\.\/(fr|en)/,
        // point to the locale data folder relative to moment's src/lib/locale
        request: "../../locale",
      });
    })
  );
  return config;
};

module.exports = override(
  fixMomentJs,
  fixBabelImports("import", {
    libraryName: "antd",
    libraryDirectory: "es",
    style: "css",
  })
);

๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋” ๊ฐ„๋‹จํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

module.exports = function override(config, env) {
  config.plugins.push(
    new webpack.ContextReplacementPlugin(/^\.\/locale$/, (context) => {
      if (!/\/moment\//.test(context.context)) {
        return;
      }
      // context needs to be modified in place
      Object.assign(context, {
        // include locales
        regExp: /^\.\/(fr|en)/,
        // point to the locale data folder relative to moment's src/lib/locale
        request: "../../locale",
      });
    })
  );
  return config;
};

Webpack์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ Webpack ๊ตฌ์„ฑ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐฐ์—ด์— ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

@saadzr ์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ˆ˜์ • ์‚ฌํ•ญ์ด ๋ฆด๋ฆฌ์Šค๋  ๋•Œ๊นŒ์ง€

ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด์‹œ๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด. moment: npm ls moment ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์œผ์„ธ์š”. ์•„๋งˆ ๋‹ค์Œ์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค:

โ””โ”€โ”ฌ [email protected]
  โ”œโ”€โ”€ [email protected] 
  โ””โ”€โ”ฌ [email protected]
    โ””โ”€โ”€ [email protected]  deduped

๊ทธ๋ž˜์„œ ๋‚ด๋ถ€ antd/package.json ๋ฐ rc-picker/package.json ์—์„œ dependencies :

"moment": "^2.24.0", -> "moment": "2.24.0"

๊ทธ๋ฆฌ๊ณ  npm i TWICE๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์ด ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ๋ชจ๋ฅด์ง€๋งŒ ๋‘ ๋ฒˆ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@talgat-ruby ์ด๊ฒƒ์€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ํ‘ธ์‹œ๋˜์ง€ ์•Š์€ node_modules ํด๋”๋ฅผ ํŽธ์ง‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณต์ œํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ๋งค๋ฒˆ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด๊ฒƒ์€ ์ข‹์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ณต๋™ ์ž‘์—…์ž์™€ ํ•จ๊ป˜ ์ž‘์—…ํ•˜๊ณ  ๊ทธ๋“ค์ด ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•  ๋•Œ๋งˆ๋‹ค ์ด๋ ‡๊ฒŒ ํ•˜๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ˆ˜์ • ์‚ฌํ•ญ์ด ๋ฆด๋ฆฌ์Šค๋  ๋•Œ๊นŒ์ง€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ Webpack์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@nathanagez ์ด๊ฒƒ์€ ์ž„์‹œ ์ˆ˜์ • ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. Antd ํŒ€์€ ๊ณง ๊ณต์‹ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ฐœํ‘œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋„ค ๋‹น์‹ ์ด ์˜ณ์Šต๋‹ˆ๋‹ค ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์— ์˜์กดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@talgat-ruby Webpack์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ„์ชฝ์„ ์ฐธ์กฐํ•˜์—ฌ ์ €์žฅ์†Œ์—์„œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋‹ค:
https://github.com/moment/moment/issues/4216#issuecomment -622453248

@talgat-ruby ์ œ์•ˆ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@rilyu ๊ท€ํ•˜์˜ ์ œ์•ˆ์ด ์ €์—๊ฒŒ

๋‚˜๋Š” moment-timezone์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ž ์‹œ ๋™์•ˆ ๋ฒ„์ „์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ์„ค์น˜ํ•˜๋Š” ๋™์•ˆ yearn ์€ ์ตœ์‹  ๋ฒ„์ „์˜ moment๋ฅผ ์ข…์†์„ฑ ->

์‹ค์ œ๋กœ ์ถ”๊ฐ€
"ํ•ด๊ฒฐ": { "์ˆœ๊ฐ„": "2.24.0" }
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

ํฐ ๊ฐ์‚ฌ๋ฅผ ๋“œ๋ฆฐ๋‹ค

๊ฐœ๋ฐœ์ž๋กœ๋ถ€ํ„ฐ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

MaterialUI DatePicker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ 2.24.0์œผ๋กœ ๋กค๋ฐฑ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์šด์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ๊ณง ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๊ธฐ๋ณธ TextField type="date"๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ,

๋ฒ„์ „ ๋ฒˆํ˜ธ ์•ž์˜ ์บ๋Ÿฟ ๊ธฐํ˜ธ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ Package.json ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
"์ˆœ๊ฐ„": "2.24.0"

์ƒˆ ๋ฒ„์ „์˜ ๋ฒ„๊ทธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! Tnx

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. node_modules ํด๋”๋ฅผ ์‚ญ์ œํ•œ ๋‹ค์Œ moment ๋ฒ„์ „์„ 2.24.0์œผ๋กœ ๋ณ€๊ฒฝํ•œ ๋‹ค์Œ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.
rc-calendar๊ฐ€ 2.25.1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•  ๋•Œ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ํŽธ์ง‘์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ yarn install ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์ง€์†๋ฉ๋‹ˆ๋‹ค. ๋„์™€์ฃผ์„ธ์š” ์ค‘์š”ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค

@faizhameed node-modules ํด๋”๋ฅผ ์ œ๊ฑฐํ•ด ๋ณด์‹ญ์‹œ์˜ค.
package-lock.json๋„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค(์–€์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ yarn.lock).

์ข…์†์„ฑ ๋’ค์— ๋‹ค์Œ์„ package.json์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. {
...
},
ํ•ด์ƒ๋„: { "์ˆœ๊ฐ„": "2.24.0" }

rc-datepicker๊ฐ€ ์ˆœ๊ฐ„ 2.24๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2.25.0 ๋ฐ 2.25.1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„์—๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ์œ ์ผํ•œ ์†”๋ฃจ์…˜์€ 2.24.0์œผ๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ๋กœ package.json์˜ ์†”๋ฃจ์…˜์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
resolutions: { "moment": "2.24.0" }

์ง€๊ธˆ์€ @pcarballeda ์ฒ˜๋Ÿผ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ

๋ฒ„์ „์„ "moment": "2.24.0" ํ•˜๊ณ  resolutions: { "moment": "2.24.0" } ์ถ”๊ฐ€ํ•˜๋ฉด ์ผ์‹œ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ: ์˜ค๋ฅ˜: 'D:\Downloads\Telegram\ildamnode_modules\rc-pickernode_modules\momentsrc\lib\locale'์—์„œ './locale'์„ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

"์ˆœ๊ฐ„": "2.24.0"

"์ข…์†์„ฑ": {
"๊ฐœ๋ฏธ": "^4.2.0",
"์•ก์‹œ์˜ค์Šค": "^0.19.2",
"ํด๋ž˜์Šค ์ด๋ฆ„": "^2.2.6",
"๊ต์ฐจ ํ™˜๊ฒฝ": "^7.0.2",
"dva": "^2.4.1",
"dva-model-extend": "^0.1.2",
"less-vars-to-js": "^1.3.0",
"libphonenumber-js": "^1.7.50",
"๋กœ๋‹ค์‰ฌ": "^4.17.15",
"lodash.clonedeep": "^4.5.0",
"์ˆœ๊ฐ„": "2.24.0",
"nprogress": "^0.2.0",
"์ •๊ทœ์‹ ๊ฒฝ๋กœ": "^6.1.0",
"์†Œํ’ˆ ์œ ํ˜•": "^15.7.2",
"์ฟผ๋ฆฌ ๋ฌธ์ž์—ด": "^6.12.1",
"๋ฐ˜์‘": "^16.13.1",
"๋ฐ˜์‘ ํ†ตํ™” ํ˜•์‹": "^1.0.0",
"react-custom-scrollbars": "^4.2.1",
"react-dom": "^16.13.1",
"๋ฐ˜์‘ ํ—ฌ๋ฉง": "^6.0.0",
"react-perfect-scrollbar": "^1.5.8",
"svg-sprite-loader": "^4.2.1",
"umi-plugin-locale": "^2.11.5"
},

2.24.0์œผ๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. 2.24.0์œผ๋กœ ^๋ฅผ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.
๋˜ํ•œ package-lock.json์—์„œ๋„ ๋ชจ๋“  ์ˆœ๊ฐ„ ์ข…์†์„ฑ์„ 2.24.0์œผ๋กœ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

2.24์— ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์„œ "ํ•ด์ƒ๋„"๋ฅผ ๋„ฃ์œผ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ... 2.25๋กœ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋‚˜์š”? ๋ชฉ์š”์ผ์— ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค.

2.24.0์œผ๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. 2.24.0์œผ๋กœ ^๋ฅผ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.
๋˜ํ•œ package-lock.json์—์„œ๋„ ๋ชจ๋“  ์ˆœ๊ฐ„ ์ข…์†์„ฑ์„ 2.24.0์œผ๋กœ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋•๋ถ„์— ์ผํ–ˆ์Šต๋‹ˆ๋‹ค! Yarn์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—”ํ”ผ์— ๊ณผ ํ•จ๊ป˜ ํ•˜์„ธ์š”

@saadzr ์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ˆ˜์ • ์‚ฌํ•ญ์ด ๋ฆด๋ฆฌ์Šค๋  ๋•Œ๊นŒ์ง€

ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด์‹œ๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด. moment: npm ls moment ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์œผ์„ธ์š”. ์•„๋งˆ ๋‹ค์Œ์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค:

โ””โ”€โ”ฌ [email protected]
  โ”œโ”€โ”€ [email protected] 
  โ””โ”€โ”ฌ [email protected]
    โ””โ”€โ”€ [email protected]  deduped

๊ทธ๋ž˜์„œ ๋‚ด๋ถ€ antd/package.json ๋ฐ rc-picker/package.json ์—์„œ dependencies :

"moment": "^2.24.0", -> "moment": "2.24.0"

๊ทธ๋ฆฌ๊ณ  npm i TWICE๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์ด ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ๋ชจ๋ฅด์ง€๋งŒ ๋‘ ๋ฒˆ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ผํ•˜๊ณ ์žˆ๋Š”! <3

yarn remove + yarn add moment ๋ฒ„์ „ 2.25.2๊ฐ€ ์„ค์น˜๋˜์–ด ๋‚˜์—๊ฒŒ ์ž˜ ๋งž์Šต๋‹ˆ๋‹ค.

yarn remove + yarn add moment ๋ฒ„์ „ 2.25.2๊ฐ€ ์„ค์น˜๋˜์–ด ๋‚˜์—๊ฒŒ ์ž˜ ๋งž์Šต๋‹ˆ๋‹ค.

์ด ๋ฒ„์ „์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@Shakxzod-Namazbaev ๋‚ด ์ƒ๊ฐ์— ์›๋ž˜ ๋ฌธ์ œ๋Š” ๋ฒ„์ „ 2.25.0์— ์žˆ์—ˆ๊ณ  ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ 2.25.1์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ๋ณด๊ณ ํ–ˆ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ 2.24๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ๋ฒ„์ „ 2.25.2๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Shakxzod-Namazbaev ๋‚ด ์ƒ๊ฐ์— ์›๋ž˜ ๋ฌธ์ œ๋Š” ๋ฒ„์ „ 2.25.0์— ์žˆ์—ˆ๊ณ  ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ 2.25.1์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ๋ณด๊ณ ํ–ˆ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ 2.24๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ๋ฒ„์ „ 2.25.2๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ง€๊ธˆ ๋ฒ„์ „ 2.25.2์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

@Shakxzod-Namazbaev ์ •ํ™•ํžˆ 2.25.2๊ฐ€ ์ €์—๊ฒŒ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2.25.2 ์ˆœ๊ฐ„๋„ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

2.25.2 ๋…๋ฆฝ ์‹คํ–‰ํ˜• ํ˜•์‹์—์„œ๋Š” ๊ดœ์ฐฎ์ง€๋งŒ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ํ˜•์‹์—์„œ๋Š” ์—ฌ์ „ํžˆ ์†์ƒ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(moment๊ฐ€ moment-timezone์˜ ์ข…์†์„ฑ์ธ ์ œ ๊ฒฝ์šฐ์—๋Š” webpack).

2.24.0 ๋Š” ์—ฌ์ „ํžˆ webpack ๋ฐ ๊ธฐํƒ€ ์ˆœ๊ฐ„ ์ข…์† ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฒ„์ „ 2.25.2 ๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ํ˜•์‹์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค - ์›นํŒฉ์€ gatsby ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์—์„œ ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๋ฒ„์ „ 2.25.0 ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Œ).

๊ด€๋ จ package.json ๋ผ์ธ:

dependencies: {
    ...
    "moment": "^2.25.2",
    ...
}

๋‚˜๋Š” moment-timezone ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ ๋ณด๊ณ ์„œ๊ฐ€ ์—ฌ์ „ํžˆ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์˜ํ–ฅ์„ ๋ฐ›๋Š” ํ์‡„๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋„ˆ๋ฌด ์ด์ƒํ•˜๊ณ  ์ง€๊ธˆ๊นŒ์ง€ ์œ ์ผํ•œ "ํ•ด๊ฒฐ์ฑ…"์€ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค!?!?!

@ichernev ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! 2.25.2๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค!

--- a/front/package.json
+++ b/front/package.json
@@ -5,7 +5,7 @@
   "dependencies": {
-    "moment": "^2.22.2",
+    "moment": "^2.25.2",

ํ™•์ธ. ๋„ˆ๋ฌด ์ผ์ฐ ์นญ์ฐฌํ–ˆ๋‹ค. ๋น„๋ก ์ˆœ๊ฐ„ ver. 2.25.2 webpack์€ ์˜ค๋ฅ˜ ์—†์ด ์ž‘์—… ๋ฒˆ๋“ค์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋กœ์ผ€์ผ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌด์‹œ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค(์•„๋งˆ ์ด๊ฒƒ์€ sideEffects/ํŠธ๋ฆฌ ๋–จ๋ฆผ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?).

์˜ˆ:

import moment from "moment"
import "moment/locale/pl"

// set global 'moment' locale (polish)
moment.locale("pl")

// ... somewhere later
console.log(moment().format("DD MMMM YYYY HH:mm:ss"))

2.25.2 ๋ฒ„์ „์˜ ์ถœ๋ ฅ์€ 04 May 2020 16:38:15 .
04 maja 2020 16:38:58 .

๋”ฐ๋ผ์„œ 2.24.0 ๋ฒ„์ „์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋งˆ์ง€๋ง‰์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜์—ฌ ๋ฒ„์ „์—์„œ ๋‹น๊ทผ์„ ์ œ๊ฑฐํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

package.json ํŒŒ์ผ์—์„œ ์ด์™€ ๊ฐ™์ด --- "moment": "2.24.0"

๋ฒ„์ „ : 2.24.0

๊ธ€์Ž„, ๋‚˜๋Š” ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์—ˆ๊ณ  ๊ทธ ์ด์œ ๋Š” ์ •๋ง๋กœ ๋งํ•  ์ˆ˜ ์—†์ง€๋งŒ package.json ์†์„ฑ module ์ด๋ฉด ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. jsnext:main ๋งŒ ์žˆ์œผ๋ฉด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋กœ์ผ€์ผ ํŒŒ์ผ์ด ๋ฒˆ๋“ค์— ์—ฌ์ „ํžˆ ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ์ œ๋Œ€๋กœ ๋กœ๋“œ๋˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ jsnext:main ์„ ๋Œ€์ฒดํ•˜๋Š” ์ด "ํ˜„๋Œ€์ ์ธ" ๋ชจ๋“ˆ ์†์„ฑ์€ ๋‹จ์ˆœํ•œ ์ด๋ฆ„ ๋ณ€๊ฒฝ์ด๋‚˜ ๋Œ€์ฒด ์ด๋ฆ„์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ž˜ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ์ˆจ๊ฒจ์ง„ ์˜์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

2.25.3์€ module ์—†์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

@ichernev - ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! 2.25.3 ๋ฒ„์ „์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(webpack์€ ์˜ค๋ฅ˜ ์—†์ด ๋ฒˆ๋“ค์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ์˜ˆ์ƒ๋Œ€๋กœ ๋กœ์ผ€์ผ์„ ํฌํ•จ/์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

2.25.3์—์„œ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ,

๋ฒ„์ „ ๋ฒˆํ˜ธ ์•ž์˜ ์บ๋Ÿฟ ๊ธฐํ˜ธ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ Package.json ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
"์ˆœ๊ฐ„": "2.24.0"

์ƒˆ ๋ฒ„์ „์˜ ๋ฒ„๊ทธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ ํ›„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

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