summaryrefslogtreecommitdiff
path: root/webpack.config.ts
diff options
context:
space:
mode:
Diffstat (limited to 'webpack.config.ts')
-rw-r--r--webpack.config.ts139
1 files changed, 80 insertions, 59 deletions
diff --git a/webpack.config.ts b/webpack.config.ts
index a61e903a90..2fc8ce8a1f 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -4,73 +4,94 @@
import * as webpack from 'webpack';
const StringReplacePlugin = require('string-replace-webpack-plugin');
+
import version from './src/version';
const constants = require('./src/const.json');
+const languages = {
+ 'en': require('./locales/en.json'),
+ 'en-US': require('./locales/en.json'),
+ 'ja': require('./locales/ja.json')
+};
+
const env = process.env.NODE_ENV;
const isProduction = env === 'production';
-const pack: webpack.Configuration = {
- entry: {
- 'desktop': './src/web/app/desktop/script.js',
- 'mobile': './src/web/app/mobile/script.js',
- 'dev': './src/web/app/dev/script.js',
- 'auth': './src/web/app/auth/script.js'
- },
- module: {
- rules: [
- {
- enforce: 'pre',
- test: /\.tag$/,
- exclude: /node_modules/,
- loader: StringReplacePlugin.replace({
- replacements: [
- { pattern: /\$theme\-color\-foreground/g, replacement: () => constants.themeColorForeground },
- { pattern: /\$theme\-color/g, replacement: () => constants.themeColor },
- ]
- })
- },
- {
- test: /\.tag$/,
- exclude: /node_modules/,
- loader: 'riot-tag-loader',
- query: {
- hot: false,
- style: 'stylus',
- expr: false,
- compact: true,
- parserOptions: {
- style: {
- compress: true
+module.exports = (Object as any).entries(languages).map(([lang, locale]) => {
+ const pack /*: webpack.Configuration ← fuck wrong type definition!!! */ = {
+ name: lang,
+ entry: {
+ 'desktop': './src/web/app/desktop/script.js',
+ 'mobile': './src/web/app/mobile/script.js',
+ 'dev': './src/web/app/dev/script.js',
+ 'auth': './src/web/app/auth/script.js'
+ },
+ module: {
+ rules: [
+ {
+ enforce: 'pre',
+ test: /\.*$/,
+ exclude: /node_modules/,
+ loader: StringReplacePlugin.replace({
+ replacements: [
+ { pattern: /'i18n:(.+?)'/g, replacement: (_, text) => locale[text] }
+ ]
+ })
+ },
+ {
+ enforce: 'pre',
+ test: /\.tag$/,
+ exclude: /node_modules/,
+ loader: StringReplacePlugin.replace({
+ replacements: [
+ { pattern: /\$theme\-color\-foreground/g, replacement: () => constants.themeColorForeground },
+ { pattern: /\$theme\-color/g, replacement: () => constants.themeColor },
+ ]
+ })
+ },
+ {
+ test: /\.tag$/,
+ exclude: /node_modules/,
+ loader: 'riot-tag-loader',
+ query: {
+ hot: false,
+ style: 'stylus',
+ expr: false,
+ compact: true,
+ parserOptions: {
+ style: {
+ compress: true
+ }
}
}
+ },
+ {
+ test: /\.styl$/,
+ exclude: /node_modules/,
+ use: [
+ { loader: 'style-loader' },
+ { loader: 'css-loader' },
+ { loader: 'stylus-loader' }
+ ]
}
- },
- {
- test: /\.styl$/,
- exclude: /node_modules/,
- use: [
- { loader: 'style-loader' },
- { loader: 'css-loader' },
- { loader: 'stylus-loader' }
- ]
- }
- ]
- },
- plugins: [
- new webpack.DefinePlugin({
- VERSION: JSON.stringify(version),
- THEME_COLOR: JSON.stringify(constants.themeColor)
- }),
- new StringReplacePlugin()
- ],
- output: {
- filename: `[name]/script.${version}.js`
- }
-};
+ ]
+ },
+ plugins: [
+ new webpack.DefinePlugin({
+ VERSION: JSON.stringify(version),
+ THEME_COLOR: JSON.stringify(constants.themeColor)
+ }),
+ new StringReplacePlugin()
+ ],
+ output: {
+ path: __dirname + '/built/web/assets',
+ filename: `[name]/script.${version}.${lang}.js`
+ }
+ };
-if (isProduction) {
- //pack.plugins.push(new webpack.optimize.UglifyJsPlugin());
-}
+ if (isProduction) {
+ //pack.plugins.push(new webpack.optimize.UglifyJsPlugin());
+ }
-module.exports = pack;
+ return pack;
+});