今天嘗試用vite和vue3寫項目凿歼,但是碰到一個問題,引入moment.js
,使用中文國際化的時候答憔,一直沒有生效味赃。
不生效的寫法如下,正常來說應該沒有問題虐拓。
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;
})));
那怎么解決呢,其實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)
的寫法献汗,搜索了好久才解決敢订。
留下了沒有技術的淚水。
避免踩坑罢吃,記錄一下楚午。