webpack으로 moment.js가 로캘을로드하지 못하게하는 방법은 무엇입니까?
안녕하세요, webpack을 사용할 때 moment.js가 모든 로케일을로드하지 못하게 할 수 있습니까? 소스를보고 있는데 hasModule이 webpack에 대해 정의 된 경우 항상 모든 로캘을 요구합니다 (). 이 문제를 해결하려면 풀 요청이 필요하다고 확신합니다. 그러나 어쨌든 우리는 webpack 설정으로 이것을 고칠 수 있습니다.
여기에 momentjs를로드하는 웹 팩 구성이 있습니다.
resolve: {
alias: {
moment: path.join(__dirname, "src/lib/bower/moment/moment.js")
},
},
그런 다음 필요한 곳 어디에서나 필요합니다 ( 'moment') 작동하지만 번들에 약 250kb의 불필요한 언어 파일을 추가하십시오. 또한 나는 bowers 버전의 momentjs와 gulp를 사용하고 있습니다.
또한 이것이 webpack 설정으로 해결할 수없는 경우 여기에 로케일을로드하는 함수에 대한 링크가 있습니다 https://github.com/moment/moment/blob/develop/moment.js#L760-L772 추가를 시도했습니다 if 문에 "&& module.exports.loadLocales"하지만 webpack은 정규식을 사용한다고 생각하는 것과 상관없이 작동하는 방식으로 작동하지 않습니다. 그것을 고치십시오. 어쨌든 도움을 주셔서 감사합니다.
코드 require('./locale/' + name)
는 locale
디렉토리의 모든 파일을 사용할 수 있습니다 . 따라서 webpack에는 모든 파일이 번들의 모듈로 포함됩니다. 사용중인 언어를 알 수 없습니다.
있습니다 이 플러그인 : 더 모듈이 번들에 포함되어야에 대한 정보 웹팩 제공하는 유용 ContextReplacementPlugin
하고 IgnorePlugin
.
require('./locale/' + name)
불리는되는 상황을 (A가 식을 포함하는 필요). webpack은이 코드 조각에서 일부 정보를 유추합니다 : 디렉토리 및 정규식. 여기 : directory = ".../moment/locale"
regular expression = /^.*$/
. 따라서 기본적으로 locale
디렉토리의 모든 파일 이 포함됩니다.
ContextReplacementPlugin
이를 통해 추론 된 정보를 재정 의 할 수 있습니다. 즉 포함 할 언어를 선택하기 위해 새로운 정규식을 제공합니다.
또 다른 방법은로 요구 사항을 무시하는 것 IgnorePlugin
입니다.
예를 들면 다음과 같습니다.
var webpack = require("webpack");
module.exports = {
// ...
plugins: [
new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /de|fr|hu/)
// new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
]
};
우리 프로젝트에는 다음과 같은 순간이 포함되어 import moment from 'moment/src/moment';
있습니다. 우리의 순간 사용법은 매우 간단하므로 SDK와 불일치가 있는지 확실하지 않습니다. WebPack은 로케일 파일을 정적으로 찾는 방법을 모르기 때문에 (빈 폴더를 추가하여 쉽게 숨길 수 있음) 경고가 표시 moment/src/lib/locale/locale
되지만 로케일을 포함 하지 않기 때문에 이것이 효과가 있다고 생각합니다 .
Adam McCrmick의 답변을 바탕으로 가까운 곳에 별칭을 다음과 같이 변경하십시오.
resolve: {
alias: {
moment: 'moment/src/moment'
},
},
으로 webpack2
당신이 할 수있는 순간의 최신 버전과 :
import {fn as moment} from 'moment'
그리고 webpack.config.js
당신은 :
resolve: {
packageMains: ['jsnext:main', 'main']
}
The proper modular moment
library will come up with Version 3 at some point so currently as I am using angular-cli without --eject
I just ended up of using https://github.com/ksloan/moment-mini like import * as moment from 'moment-mini';
'Programing' 카테고리의 다른 글
JavaScript에서 형식 지정을 사용하여 문자열을 날짜 / 시간으로 변환하려면 어떻게해야합니까? (0) | 2020.05.11 |
---|---|
"for (… in…)"루프의 요소 순서 (0) | 2020.05.11 |
파이썬에서 모듈 전체 변수를 만드는 방법? (0) | 2020.05.11 |
github에 커밋하기 전에 readme.md 파일이 어떻게 보이는지 어떻게 테스트합니까? (0) | 2020.05.11 |
배열을 비교하는 Jasmine.js (0) | 2020.05.11 |