๋ฒ๊ทธ ์ค๋ช
ํ๋ก๋์
์ต์ ํ ๋น๋๋ฅผ ๋น๋ํ ํ ํฌ๋กฌ ์ฝ์์์ ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์กํ์ง ์์ ์ค๋ฅ: './locale' ๋ชจ๋์ ์ฐพ์ ์ ์์ต๋๋ค.
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 ๋ฒ์ ์ฉ ์์ฌ๋ก ๋ก์ปฌ๋ก ๋น๋ํ๋ฉด ์๋ํฉ๋๋ค.
์ฌํํ๊ธฐ ์ํด
๋์์ ์ฌํํ๋ ๋จ๊ณ:
์ด๋ฌํ ์๊ตฌ ์ฌํญ์ผ๋ก ์ฑ์ ๋น๋ํฉ๋๋ค. ์ฝ์์์ ํด๋น ์ค๋ฅ๊ฐ ๋ฐ์ํด์ผ ํฉ๋๋ค.
์์๋๋ ํ๋
์์ํ๋ ์ผ์ ๋ํ ๋ช
ํํ๊ณ ๊ฐ๊ฒฐํ ์ค๋ช
.
์คํฌ๋ฆฐ์ท
ํด๋นํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ์ค๋ช
ํ๋ ๋ฐ ๋์์ด ๋๋ ์คํฌ๋ฆฐ์ท์ ์ถ๊ฐํ์ธ์.
๋ฐ์คํฌํ(๋ค์ ์ ๋ณด๋ฅผ ์์ฑํ์ญ์์ค):
์ค๋งํธํฐ(๋ค์ ์ ๋ณด๋ฅผ ์์ฑํด ์ฃผ์ธ์):
์๊ฐ๋ณ ํ๊ฒฝ
ํ๊ฒฝ์์ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๊ณ ์ถ๋ ฅ์ ํฌํจํ์ญ์์ค.
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์ 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
๊ฒฝ๊ณ ๊ฐ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ฌํํ์ญ์์ค.
๋ง์ฐฌ๊ฐ์ง!
๊ฐ์ ๋ฌธ์ ,
๋ฒ์ ๋ฒํธ ์์ ์บ๋ฟ ๊ธฐํธ๋ฅผ ์ ๊ฑฐํ์ฌ ์์ ํ์ต๋๋ค. ์ด์ 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 :)
์๊ตฌ ์ฒ๋ฆฌ๊ฐ 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"์ ๋ฒ์ ์ ๋ฒ๊ทธ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ ํ ์๋ํฉ๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ฐ์ ๋ฌธ์ ,
๋ฒ์ ๋ฒํธ ์์ ์บ๋ฟ ๊ธฐํธ๋ฅผ ์ ๊ฑฐํ์ฌ ์์ ํ์ต๋๋ค. ์ด์ Package.json ํญ๋ชฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
"์๊ฐ": "2.24.0"
์ ๋ฒ์ ์ ๋ฒ๊ทธ์ธ ๊ฒ ๊ฐ์ต๋๋ค.