关于moment.js:如何使用-webpack-优化-momentjs

(1)荡涤moment语言环境文件默认状况下,当您编写var moment = require('moment')代码并应用 webpack 打包时,捆绑文件的大小会变得很重,因为webpack 会捆绑所有Moment.js 所有语言环境文件(在 Moment.js 2.18.1 中,压缩后的 KB 为 160)。 要去除不必要的语言环境并仅捆绑应用的语言环境,请增加moment-locales-webpack-plugin: // webpack.config.jsconst MomentLocalesPlugin = require('moment-locales-webpack-plugin');module.exports = { plugins: [ // To strip all locales except “en” new MomentLocalesPlugin(), // Or: To strip all locales except “en”, “es-us” and “ru” // (“en” is built into Moment and can’t be removed) new MomentLocalesPlugin({ localesToKeep: ['es-us', 'ru'], }), ],};为了优化大小,还能够应用两个 webpack 插件传送门: IgnorePluginContextReplacementPluginIgnorePlugin您能够应用IgnorePlugin. const webpack = require('webpack');module.exports = { //... plugins: [ // Ignore all locale files of moment.js new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), ],};而且您依然能够在代码中加载一些语言环境。 ...

September 2, 2022 · 2 min · jiezi

JS使用技巧2——momentjs太重了吗?试试dayjs和miment吧

关于时间的操作,一直在使用momentjs这个库。方便灵巧,功能强大。唯一的缺点是,对于前端HTML来讲,它的包太太太太太大了。我是momentjs的重度用户,但它的大小时刻都在折磨人。虽然方便高效,可这动辄200K的大小,对于首页加载速度来讲简直就是一场灾难。所以,开源社区有了一些精简的方案。如dayjs和miment。dayjsdayjs本身就是对标momentjs进行开发的,看作者的官方介绍:Day.js is a minimalist JavaScript library that parses, validates, manipulates, and displays dates and times for modern browsers with a largely Moment.js-compatible API. If you use Moment.js, you already know how to use Day.js.它的用法非常简单。dayjs().startOf(‘month’).add(1, ‘day’).set(‘year’, 2018).format(‘YYYY-MM-DD HH:mm:ss’);是不是很momentjs很相似?不,其实它们就是一模一样的。dayjs的API和moment几乎一模一样,所以如果想要替换到现有的momentjs代码,直接替换为dayjs即可,调用语句绝大部分情况下可以一字不改。dayjs的大小有多少呢?2KB。再想想momentjs的大小。mimentmiment同样也是一个极简的时间处理库,压缩后的代码甚至达到了1KB左右,比dayjs还小。与包大小相应的,作者团队只保留了momentjs中核心方法,但其实这些方法在普通场景下已经足够。miment的使用方法,也和momentjs基本一致。例如:miment().add(1, ‘YYYY’).add(2, ‘MM’).add(-3, ‘DD’) // 增加 1 年 2 个月又减回 3 天miment().isBetween(‘2000-01-01’,‘2020-01-01’) // truemiment().isBefore(‘2000-01-01’) // falsemiment().format(‘YYYY年MM月DD日 星期ww’) // 2018年04月09日 星期1 周日对应星期0想要取得单独的年月日,更简单miment().format(‘YYYY’) // 2018miment().format(‘MM’) // 04miment().format(‘DD’) // 09miment().format(‘hh’) // 23miment().format(‘mm’) // 57miment().format(‘ss’) // 16miment().format(‘SSS’) // 063miment().format(‘ww’) // 1miment().format(‘WW’) // 一结语对于momentjs,大部分开发者都是又爱又恨,又或者大觉不爱。其实对于绝大部分的时间操作场景,dayjs和miment更符合使用要求。尤其对于非SSR的场合,想想那精简近200KB的首屏渲染速度,真的是非常有吸引力。 ...

December 26, 2018 · 1 min · jiezi