Skip to content

Commit b333a96

Browse files
committed
Update dist/locale-data/ to be UMD files
This keeps with the theme of v2 where locale data is provided as modules, instead of causing side-effects to the ReactIntl library. With the change, the locale data files in `dist/` will expose the data at: `ReactIntlLocaleData.<lang>`. This decouples the loading of the locale data files from the loading of the library.
1 parent 0e83dcb commit b333a96

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,14 @@
5757
"react-addons-test-utils": "^0.14.0-beta3",
5858
"rimraf": "^2.4.2",
5959
"serialize-javascript": "^1.1.1",
60-
"uglify-js": "^2.4.24"
60+
"uglify-js": "^2.4.24",
61+
"uglifyify": "^3.0.1"
6162
},
6263
"scripts": {
6364
"lint": "eslint src/ test/ scripts/ examples/",
6465
"clean": "rimraf src/en.js src/locale-data/ lib/ dist/",
6566
"build:data": "babel-node scripts/build-locale-data.js",
66-
"build:lib": "babel src/ --out-dir lib/",
67+
"build:lib": "babel src/ --ignore src/locale-data/ --out-dir lib/",
6768
"build:dist:main": "browserify src/react-intl.js -s ReactIntl -g [envify --NODE_ENV development] -t babelify -t browserify-shim -d | exorcist -b ./ -r react-intl:/// dist/react-intl.js.map > dist/react-intl.js",
6869
"build:dist:main:min": "browserify src/react-intl.js -s ReactIntl -g [envify --NODE_ENV production] -t babelify -t browserify-shim | uglifyjs -c -m > dist/react-intl.min.js",
6970
"build:dist:with-data": "browserify src/react-intl-with-locales.js -s ReactIntl -g [envify --NODE_ENV development] -t babelify -t browserify-shim -d | exorcist -b ./ -r react-intl:/// dist/react-intl-with-locales.js.map > dist/react-intl-with-locales.js",

scripts/build-locale-data.js

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import * as fs from 'fs';
22
import {sync as mkdirpSync} from 'mkdirp';
33
import extractCLDRData from 'formatjs-extract-cldr-data';
44
import serialize from 'serialize-javascript';
5+
import {transform} from 'babel';
6+
import browserify from 'browserify';
7+
import uglifyify from 'uglifyify';
58

69
const DEFAULT_LOCALE = 'en';
710

@@ -10,11 +13,11 @@ const cldrData = extractCLDRData({
1013
relativeFields: true,
1114
});
1215

13-
const dataByLocale = new Map(
16+
const cldrDataByLocale = new Map(
1417
Object.keys(cldrData).map((locale) => [locale, cldrData[locale]])
1518
);
1619

17-
const dataByLang = [...dataByLocale].reduce((map, [locale, data]) => {
20+
const cldrDataByLang = [...cldrDataByLocale].reduce((map, [locale, data]) => {
1821
let [lang] = locale.split('-');
1922
let langData = map.get(lang) || [];
2023
return map.set(lang, langData.concat(data));
@@ -28,28 +31,39 @@ export default ${serialize(localeData)};
2831
);
2932
}
3033

31-
function createDistDataScript(localeData) {
32-
return (
33-
`// GENERATED FILE
34-
ReactIntl.addLocaleData(${serialize(localeData)});
35-
`
36-
);
34+
function throwIfError(error) {
35+
if (error) {
36+
throw error;
37+
}
3738
}
3839

3940
// -----------------------------------------------------------------------------
4041

41-
mkdirpSync('src/locale-data/');
4242
mkdirpSync('dist/locale-data/');
43+
mkdirpSync('lib/locale-data/');
44+
mkdirpSync('src/locale-data/');
4345

44-
fs.writeFileSync('src/en.js',
45-
createDataModule(dataByLocale.get(DEFAULT_LOCALE))
46+
fs.writeFile('src/en.js',
47+
createDataModule(cldrDataByLocale.get(DEFAULT_LOCALE)),
48+
throwIfError
4649
);
4750

48-
fs.writeFileSync('src/locale-data/index.js',
49-
createDataModule([...dataByLocale.values()])
50-
);
51+
let allData = createDataModule([...cldrDataByLocale.values()]);
52+
fs.writeFile('src/locale-data/index.js', allData, throwIfError);
53+
fs.writeFile('lib/locale-data/index.js', transform(allData).code, throwIfError);
54+
55+
cldrDataByLang.forEach((cldrData, lang) => {
56+
let data = createDataModule(cldrData);
57+
58+
fs.writeFile(`src/locale-data/${lang}.js`, data, throwIfError);
59+
fs.writeFile(`lib/locale-data/${lang}.js`, transform(data).code, (err) => {
60+
throwIfError(err);
5161

52-
dataByLang.forEach((data, lang) => {
53-
fs.writeFileSync(`src/locale-data/${lang}.js`, createDataModule(data));
54-
fs.writeFileSync(`dist/locale-data/${lang}.js`, createDistDataScript(data));
62+
browserify({standalone: `ReactIntlLocaleData.${lang}`})
63+
.add(`lib/locale-data/${lang}.js`)
64+
.transform(uglifyify)
65+
.bundle()
66+
.on('error', throwIfError)
67+
.pipe(fs.createWriteStream(`dist/locale-data/${lang}.js`));
68+
});
5569
});

0 commit comments

Comments
 (0)