@sentre/craco-plugins
Version:
Craco plugins for CRA
44 lines (42 loc) • 1.44 kB
JavaScript
;
/**
* WebAssembly loader for Webpack 5
*/
var overrideWebpackConfig = function overrideWebpackConfig(_ref) {
var context = _ref.context,
webpackConfig = _ref.webpackConfig,
pluginOptions = _ref.pluginOptions;
var wasmExtensionRegExp = /\.wasm$/;
// Add additional extension for WASM and enable WASM
webpackConfig.resolve.extensions.push('.wasm');
webpackConfig.experiments = {
asyncWebAssembly: true
};
// Exclude the extension from asset/resource
var oneOfRule = webpackConfig.module.rules.find(function (rule) {
return rule.oneOf;
});
if (!oneOfRule) {
throw new Error("Can't find a 'oneOf' rule under module.rules in the ".concat(context.env, " webpack config!"), 'webpack+rules+oneOf');
}
var assetResourceIndex = oneOfRule.oneOf.findIndex(function (rule) {
return rule.type === 'asset/resource';
});
if (!oneOfRule.oneOf[assetResourceIndex].exclude) oneOfRule.oneOf[assetResourceIndex].exclude = [];
oneOfRule.oneOf[assetResourceIndex].exclude.push(wasmExtensionRegExp);
// Add the wasm loader
var wasmLoader = {
test: wasmExtensionRegExp,
exclude: /node_modules/,
use: [{
loader: 'wasm-loader'
}],
// Webpack 5 natively supports wasm-loader
type: 'webassembly/async'
};
oneOfRule.oneOf.splice(assetResourceIndex, 0, wasmLoader);
return webpackConfig;
};
module.exports = {
overrideWebpackConfig: overrideWebpackConfig
};