ott*_*ove 5 javascript reactjs webpack webpack-dev-server webassembly
我正在尝试将mediainfo.js与 React.js 一起使用。
查看上述站点的React.js中的使用示例,它是由“webpack.config.js”设置的。但是,当我使用 构建环境时create-react-app,“webpack.config.js”被包装,并且似乎在不执行“eject”命令的情况下无法对其进行编辑。
如果使用npm包“react-app-rewired”,则可以在不执行reject命令的情况下对其进行编辑,所以我尝试了。
// config-override.js (overwrites webpack.config.js)
const { resolve } = require('path');
const CopyPlugin = require('copy-webpack-plugin');
const wasmFile = resolve(
__dirname,
'node_modules',
'mediainfo.js',
'dist'
);
const dist = resolve('build', 'static', 'js');
// template from https://www.npmjs.com/package/react-app-rewired
module.exports = {
webpack: function(config, env) {
config.plugins.push(new CopyPlugin({
patterns: [
{ from: wasmFile, to: dist },
],
}),)
return config;
},
}
Run Code Online (Sandbox Code Playgroud)
这是整个项目。
https://github.com/ottonove/test_mediainfo
通过“npm run build”生成的运行正常,但是当我通过“npm run start”运行它时,出现以下错误。
Uncaught (in promise) RuntimeError: abort(CompileError: WebAssembly.instantiate(): expected magic word 00 61 73 6d, found 3c 21 44 4f @+0). Build with -s ASSERTIONS=1 for more info.
Run Code Online (Sandbox Code Playgroud)
还发出以下警告。
wasm streaming compile failed: TypeError: Failed to execute 'compile' on 'WebAssembly': Incorrect response MIME type. Expected 'application/wasm'.
Run Code Online (Sandbox Code Playgroud)
如何将其设置为与“npm run start”一起使用?
如果您能教我,我将不胜感激。
我使用“WebWorker”解决了这个问题。
// config-override.js
const path = require("path");
const { resolve } = require('path');
const CopyPlugin = require('copy-webpack-plugin');
const devMode = process.env.NODE_ENV !== 'production'
const wasmFile = resolve(
__dirname,
'node_modules',
'mediainfo.js',
'dist',
'MediaInfoModule.wasm'
);
const dist = devMode ? '.' : resolve(__dirname);
module.exports = function override(config, env) {
config.module.rules.push({
test: /\.worker\.js$/,
use: { loader: "workerize-loader" },
});
const wasmExtensionRegExp = /\.wasm$/;
config.resolve.extensions.push(".wasm");
config.module.rules.forEach((rule) => {
(rule.oneOf || []).forEach((oneOf) => {
if (oneOf.loader && oneOf.loader.indexOf("file-loader") >= 0) {
// Make file-loader ignore WASM files
oneOf.exclude.push(wasmExtensionRegExp);
}
});
});
config.module.rules.push({
test: wasmExtensionRegExp,
include: path.resolve(__dirname, "src"),
use: [{ loader: require.resolve("wasm-loader"), options: {} }],
});
config.plugins.push(new CopyPlugin({
patterns: [
{ from: wasmFile, to: dist },
],
}),)
return config;
};
Run Code Online (Sandbox Code Playgroud)
整个项目都在这里。
https://github.com/ottonove/test_mediainfo/blob/webworker/config-overrides.js