fix: prevent excessive locale bundling (#41979)
Co-authored-by: Nicholas Carrigan (he/him) <nhcarrigan@gmail.com>
This commit is contained in:
committed by
GitHub
parent
1805631e4a
commit
e1f673e685
@ -22,6 +22,7 @@
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
"plugins": [
|
"plugins": [
|
||||||
|
"preval",
|
||||||
[
|
[
|
||||||
"@babel/plugin-proposal-class-properties",
|
"@babel/plugin-proposal-class-properties",
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
/* global preval */
|
||||||
|
|
||||||
import i18n from 'i18next';
|
import i18n from 'i18next';
|
||||||
import { initReactI18next } from 'react-i18next';
|
import { initReactI18next } from 'react-i18next';
|
||||||
|
|
||||||
@ -12,20 +14,53 @@ i18n.use(initReactI18next).init({
|
|||||||
fallbackLng: 'en',
|
fallbackLng: 'en',
|
||||||
lng: i18nextCode,
|
lng: i18nextCode,
|
||||||
// we only load one language since each language will have it's own server
|
// we only load one language since each language will have it's own server
|
||||||
|
// They need to be evaluated ahead of time, to prevent Webpack from bundling
|
||||||
|
// the entire locales directory. To avoid double imports when the locale is
|
||||||
|
// english, we simply export nothing from the preval
|
||||||
resources: {
|
resources: {
|
||||||
[i18nextCode]: {
|
[i18nextCode]: {
|
||||||
translations: require(`./locales/${clientLocale}/translations.json`),
|
translations: preval`
|
||||||
trending: require(`./locales/${clientLocale}/trending.json`),
|
const envData = require('../../config/env.json');
|
||||||
intro: require(`./locales/${clientLocale}/intro.json`),
|
const { clientLocale } = envData;
|
||||||
metaTags: require(`./locales/${clientLocale}/meta-tags.json`),
|
if (clientLocale !== 'english') {
|
||||||
links: require(`./locales/${clientLocale}/links.json`)
|
module.exports = require('./locales/' + clientLocale + '/translations.json');
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
trending: preval`
|
||||||
|
const envData = require('../../config/env.json');
|
||||||
|
const { clientLocale } = envData;
|
||||||
|
if (clientLocale !== 'english') {
|
||||||
|
module.exports = require('./locales/' + clientLocale + '/trending.json');
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
intro: preval`
|
||||||
|
const envData = require('../../config/env.json');
|
||||||
|
const { clientLocale } = envData;
|
||||||
|
if (clientLocale !== 'english') {
|
||||||
|
module.exports = require('./locales/' + clientLocale + '/intro.json');
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
metaTags: preval`
|
||||||
|
const envData = require('../../config/env.json');
|
||||||
|
const { clientLocale } = envData;
|
||||||
|
if (clientLocale !== 'english') {
|
||||||
|
module.exports = require('./locales/' + clientLocale + '/meta-tags.json');
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
links: preval`
|
||||||
|
const envData = require('../../config/env.json');
|
||||||
|
const { clientLocale } = envData;
|
||||||
|
if (clientLocale !== 'english') {
|
||||||
|
module.exports = require('./locales/' + clientLocale + '/links.json');
|
||||||
|
}
|
||||||
|
`
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
translations: require('./locales/english/translations.json'),
|
translations: preval`module.exports = require('./locales/english/translations.json')`,
|
||||||
trending: require('./locales/english/trending.json'),
|
trending: preval`module.exports = require('./locales/english/trending.json')`,
|
||||||
intro: require('./locales/english/intro.json'),
|
intro: preval`module.exports = require('./locales/english/intro.json')`,
|
||||||
metaTags: require('./locales/english/meta-tags.json'),
|
metaTags: preval`module.exports = require('./locales/english/meta-tags.json')`,
|
||||||
links: require('./locales/english/links.json')
|
links: preval`module.exports = require('./locales/english/links.json')`
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ns: ['translations', 'trending', 'intro', 'metaTags', 'links'],
|
ns: ['translations', 'trending', 'intro', 'metaTags', 'links'],
|
||||||
|
10
client/package-lock.json
generated
10
client/package-lock.json
generated
@ -5419,6 +5419,16 @@
|
|||||||
"@babel/helper-define-polyfill-provider": "^0.2.0"
|
"@babel/helper-define-polyfill-provider": "^0.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"babel-plugin-preval": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/babel-plugin-preval/-/babel-plugin-preval-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-8DqJq6/LPUjSZ0Qq6bVIFpsj2flCEE0Cbnbut9TvGU6jP9g3dOWEXtQ/sdvsA9d6souza8eNGh04WRXpuH9ThA==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime": "^7.9.2",
|
||||||
|
"babel-plugin-macros": "^2.8.0",
|
||||||
|
"require-from-string": "^2.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"babel-plugin-prismjs": {
|
"babel-plugin-prismjs": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/babel-plugin-prismjs/-/babel-plugin-prismjs-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/babel-plugin-prismjs/-/babel-plugin-prismjs-2.0.1.tgz",
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
"algoliasearch": "4.9.1",
|
"algoliasearch": "4.9.1",
|
||||||
"assert": "2.0.0",
|
"assert": "2.0.0",
|
||||||
"axios": "0.21.1",
|
"axios": "0.21.1",
|
||||||
|
"babel-plugin-preval": "5.0.0",
|
||||||
"babel-plugin-prismjs": "2.0.1",
|
"babel-plugin-prismjs": "2.0.1",
|
||||||
"bezier-easing": "2.1.0",
|
"bezier-easing": "2.1.0",
|
||||||
"browser-cookies": "1.2.0",
|
"browser-cookies": "1.2.0",
|
||||||
|
@ -1,6 +1,15 @@
|
|||||||
const config = require('../../../config/env.json');
|
/* global preval */
|
||||||
|
|
||||||
const words = require(`../../i18n/locales/${config.clientLocale}/motivation.json`);
|
// this lets us do dynamic work ahead of time, inlining motivation.json, so
|
||||||
|
// that Webpack will never try to include locales that we know are not used.
|
||||||
|
|
||||||
|
const words = preval`
|
||||||
|
const config = require('../../../config/env.json');
|
||||||
|
const { clientLocale } = config;
|
||||||
|
const target = '../../i18n/locales/' + clientLocale + '/motivation.json';
|
||||||
|
const words = require(target);
|
||||||
|
module.exports = words;
|
||||||
|
`;
|
||||||
|
|
||||||
function randomItem(arr) {
|
function randomItem(arr) {
|
||||||
return arr[Math.floor(Math.random() * arr.length)];
|
return arr[Math.floor(Math.random() * arr.length)];
|
||||||
|
Reference in New Issue
Block a user