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
λλ 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μ λ¬Έμ μΉμ¬μ΄νΈμ μλ λ¬Έμ λ‘ λ체λμκΈ° λλ¬Έμ μ¬κΈ°μμ λ«νμ΅λλ€. λκ΅°κ°κ° moment/momentjs.com#269λ₯Ό ν΄κ²°νκΈ° μν΄ PRμ μμ±νμΌλ©΄ ν©λλ€.
@butterflyhug
μ΄ μμ μ¬νμ μ μκ² ν¨κ³Όμ μ΄μμ΅λλ€.
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
κ°μ₯ μ μ©ν λκΈ
@sokra κ° μ μν λλ‘ νμν λ‘μΌμΌλ§ νμλ‘ νκΈ° μν΄ λ€μ νλ¬κ·ΈμΈμ μΆκ°νμ΅λλ€. λν moment μ
lang
λλ ν 리κ°moment
locale
λ‘ λ³κ²½λμμμ μ μ μμ΅λλ€.