微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用vite动态导入json文件 CodeSandbox

如何解决如何使用vite动态导入json文件 CodeSandbox

我在 vue-i18n 项目中使用了 Nuxtjs,并且我想动态地使用 vite 导入我的语言环境文件

当我使用 webpack 时,那些代码运行良好

plugins/i18n.js

import Vue from 'vue';
import VueI18n from 'vue-i18n';
import config from '@/config';

Vue.use(VueI18n);

let messages = Object;

config.locale.available.forEach(locale => {
    messages[locale] = require(`~/locales/${locale}.json`);
});

export default ({ app,store }) => {
    app.i18n = new VueI18n({
        locale: store.state.locale.locale,messages: messages
    });
}

我知道vitejs中没有require(),还有vitejs的glob-import特性

  1. 所以我首先尝试如下:
let messages = Object,languages = import.Meta.glob('../locales/*.json'); // => languages = {} (languages only get {} value)

config.locale.available.forEach(locale => {
    messages[locale] = languages[`../locales/${locale}.json`];
});

但是 languages 只有 {} 值。

  1. 然后我尝试使用 import()
let messages = Object,translate = lang => () => import(`@/locales/${lang}.json`).then(i => i.default || i);

config.locale.available.forEach(locale => {
    messages[locale] = translate(locale);
});

终端和控制台都没有错误,但没有正确加载语言环境文件


只有当我一一import()时,问题才会消失:

import en from '@/locales/en.json';
import fr from '@/locales/fr.json';
import ja from '@/locales/ja.json';

let messages = Object;

messages['en'] = en;
messages['fr'] = fr;
messages['ja'] = ja;

CodeSandbox

但是,如何动态导入呢?

我用谷歌搜索了一下,但帮助不大。非常感谢任何人的帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。