Skip to content

Commit 96bb51e

Browse files
committed
Improve building of ESM and CJS bundles
- Move ESM RSPack config to a separate file - Separate locales to `dist/locales.esm` and `dist/locales.cjs` Fixes issue where translations don't work (because both builds were writing incompatible i18n files to the same location)
1 parent b51cd7d commit 96bb51e

File tree

7 files changed

+65
-56
lines changed

7 files changed

+65
-56
lines changed

dev.esm.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
});
3838

3939
await converse.initialize({
40+
i18n: 'af',
4041
theme: 'nordic',
4142
dark_theme: 'dracula',
4243
auto_away: 300,

dev.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
});
2727

2828
converse.initialize({
29+
i18n: 'af',
2930
theme: 'nordic',
3031
dark_theme: 'dracula',
3132
auto_away: 300,

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,17 @@
4747
"3rdparty/*.js"
4848
],
4949
"scripts": {
50-
"build": "npm run build:website-min-css && DROP_DEBUGGER=true rspack build --config rspack/rspack.build.js",
50+
"build": "npm run build:website-min-css && npm run build:headless && npm run build:esm && npm run build:cjs",
51+
"build:cjs": "DROP_DEBUGGER=true rspack build --config rspack/rspack.build.cjs.js",
52+
"build:esm": "DROP_DEBUGGER=true rspack build --config rspack/rspack.build.esm.js",
53+
"build:headless": "rspack build --config rspack/rspack.headless.js",
5154
"build:website-css": "sass --quiet --load-path=node_modules src/shared/styles/website.scss dist/website.css",
5255
"build:website-min-css": "npm run build:website-css && npx clean-css-cli dist/website.css > dist/website.min.css",
5356
"cdn": "ASSET_PATH=https://cdn.conversejs.org/dist/ npm run build",
5457
"clean": "rm -rf node_modules dist *.zip src/headless/dist src/headless/node_modules",
5558
"dev": "DROP_DEBUGGER=false rspack build --config rspack/rspack.build.js --mode=development",
5659
"dev:headless": "DROP_DEBUGGER=false rspack build --config rspack/rspack.headless.js --mode=development",
5760
"devserver": "npm run dev:headless && npx rspack serve --config rspack/rspack.serve.js",
58-
"headless": "rspack build --config rspack/rspack.headless.js",
5961
"lint": "eslint src/**/*.js",
6062
"nodeps": "rspack build --config rspack/rspack.nodeps.js",
6163
"serve": "http-server -c-1",

rspack/rspack.build.cjs.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const { merge } = require('webpack-merge');
2+
const common = require('../rspack/rspack.build.js');
3+
4+
module.exports = merge(common, {
5+
output: {
6+
filename: '[name].js',
7+
chunkFilename: 'chunkjs.cjs/[name].js',
8+
},
9+
});

rspack/rspack.build.esm.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const { merge } = require('webpack-merge');
2+
const common = require('../rspack/rspack.build.js');
3+
4+
module.exports = merge(common, {
5+
experiments: {
6+
outputModule: true,
7+
topLevelAwait: true,
8+
},
9+
output: {
10+
filename: '[name].esm.js',
11+
chunkFilename: 'chunkjs.esm/[name].js',
12+
library: {
13+
type: 'module',
14+
},
15+
},
16+
});

rspack/rspack.build.js

Lines changed: 30 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const path = require('path');
33
const { merge } = require('webpack-merge');
44
const common = require('../rspack/rspack.common.js');
55

6-
const sharedConfig = {
6+
module.exports = merge(common, {
77
mode: 'production',
88
entry: {
99
'converse': path.resolve(__dirname, '../src/entry.js'),
@@ -71,56 +71,32 @@ const sharedConfig = {
7171
},
7272
],
7373
},
74-
};
75-
76-
const plugins = [
77-
new rspack.CssExtractRspackPlugin({
78-
filename: '../dist/converse.min.css',
79-
}),
80-
new rspack.CssExtractRspackPlugin({
81-
filename: '../dist/converse.css',
82-
}),
83-
new rspack.CopyRspackPlugin({
84-
patterns: [
85-
{ from: 'node_modules/strophe.js/src/shared-connection-worker.js', to: 'shared-connection-worker.js' },
86-
{ from: 'sounds', to: 'sounds' },
87-
{ from: 'images/favicon.ico', to: 'images/favicon.ico' },
88-
{ from: 'images/custom_emojis', to: 'images/custom_emojis' },
89-
{ from: 'logo/conversejs-filled-192.png', to: 'images/logo' },
90-
{ from: 'logo/conversejs-filled-512.png', to: 'images/logo' },
91-
{ from: 'logo/conversejs-filled-192.svg', to: 'images/logo' },
92-
{ from: 'logo/conversejs-filled-512.svg', to: 'images/logo' },
93-
{ from: 'logo/conversejs-filled.svg', to: 'images/logo' },
94-
{ from: 'logo/conversejs-gold-gradient.svg', to: 'images/logo' },
95-
{ from: 'src/shared/styles/webfonts', to: 'webfonts' },
96-
{ from: 'manifest.json', to: 'manifest.json' },
97-
{ from: 'src/headless/plugins/emoji/emoji.json', to: 'emoji.json' },
98-
],
99-
}),
100-
];
101-
102-
module.exports = [
103-
// CJS Build
104-
merge(common, {
105-
...sharedConfig,
106-
plugins,
107-
output: {
108-
filename: '[name].js',
109-
},
110-
}),
111-
// ESM Build
112-
merge(common, {
113-
...sharedConfig,
114-
plugins,
115-
experiments: {
116-
outputModule: true,
117-
topLevelAwait: true,
118-
},
119-
output: {
120-
filename: '[name].esm.js',
121-
library: {
122-
type: 'module',
123-
},
124-
},
125-
}),
126-
];
74+
plugins: [
75+
new rspack.CssExtractRspackPlugin({
76+
filename: '../dist/converse.min.css',
77+
}),
78+
new rspack.CssExtractRspackPlugin({
79+
filename: '../dist/converse.css',
80+
}),
81+
new rspack.CopyRspackPlugin({
82+
patterns: [
83+
{
84+
from: 'node_modules/strophe.js/src/shared-connection-worker.js',
85+
to: 'shared-connection-worker.js',
86+
},
87+
{ from: 'sounds', to: 'sounds' },
88+
{ from: 'images/favicon.ico', to: 'images/favicon.ico' },
89+
{ from: 'images/custom_emojis', to: 'images/custom_emojis' },
90+
{ from: 'logo/conversejs-filled-192.png', to: 'images/logo' },
91+
{ from: 'logo/conversejs-filled-512.png', to: 'images/logo' },
92+
{ from: 'logo/conversejs-filled-192.svg', to: 'images/logo' },
93+
{ from: 'logo/conversejs-filled-512.svg', to: 'images/logo' },
94+
{ from: 'logo/conversejs-filled.svg', to: 'images/logo' },
95+
{ from: 'logo/conversejs-gold-gradient.svg', to: 'images/logo' },
96+
{ from: 'src/shared/styles/webfonts', to: 'webfonts' },
97+
{ from: 'manifest.json', to: 'manifest.json' },
98+
{ from: 'src/headless/plugins/emoji/emoji.json', to: 'emoji.json' },
99+
],
100+
}),
101+
]
102+
});

rspack/rspack.serve.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ module.exports = [
8383
directory: path.resolve(__dirname, '../dist'),
8484
publicPath: '/dist/',
8585
},
86+
{
87+
directory: path.resolve(__dirname, '../dist/locales.esm'),
88+
publicPath: '/dist/locales/',
89+
},
8690
{
8791
directory: path.resolve(__dirname, '../src/headless/dist'),
8892
publicPath: '/src/headless/dist/',

0 commit comments

Comments
 (0)