moment.js 中文國際化失效 vite vue3

今天嘗試用vite和vue3寫項(xiàng)目,但是碰到一個(gè)問題,引入moment.js,使用中文國際化的時(shí)候,一直沒有生效。

不生效的寫法如下,正常來說應(yīng)該沒有問題。

import moment from "moment";
import "moment/locale/zh-cn";
moment.locale('zh-cn')

查了一下資料,原來vite只支持ES modules,可以看下尤大的在vite的issues的解釋:https://github.com/vitejs/vite/issues/945

我們再看下moment/locale/zh-cn的寫法,果然不是ES modules寫法。

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';
    //! moment.js locale configuration
    var zhCn = moment.defineLocale('zh-cn', {
      ...
    });
    return zhCn;
})));

那怎么解決呢,其實(shí)moment.js是支持ES modules的國際化的。我們找到的moment/dist/locale/zh-cn,寫法如下:

import moment from '../moment';
export default moment.defineLocale('zh-cn', {
 ....
});

所以修改一下我們引入路徑就可以了。生效的寫法如下。

import moment from "moment";
import 'moment/dist/locale/zh-cn'
moment.locale('zh-cn')

測試一下 果然生效了。

moment.locales()//["en", "zh-cn"]

備注moment.js版本2.29.1。

由于不知道vite只支持ES module(esm)的寫法,搜索了好久才解決。

留下了沒有技術(shù)的淚水。

避免踩坑,記錄一下。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容