Bra*_*ham 7 javascript webpack webassembly create-react-app
I\xe2\x80\x99m 尝试将此模块加载到 create-react-app 项目中:https://www.npmjs.com/package/wasmlibfp
\n\n当我这样做时,我收到以下错误:
\n\n./node_modules/wasmlibfp/wasmlibfp_bg.wasm\nModule parse failed: magic header not detected\nFile was processed with these loaders:\n * ./node_modules/file-loader/dist/cjs.js\nYou may need an additional loader to handle the result of these loaders.\nError: magic header not detected\nRun Code Online (Sandbox Code Playgroud)\n\n在 CRA 中加载 wasm 模块需要做什么特别的事情吗?
\n是的,您可以将带有 wasm 文件的模块加载到 create-react-app 项目中。为此,您需要对 CRA 项目进行一些修改。以下步骤来自Richard Reedy 的《使用 WebAssembly 与 React》教程:
npx create-react-app react-wasm-migration
Run Code Online (Sandbox Code Playgroud)
react-app-rewired和wasm-loader依赖:npm install react-app-rewired wasm-loader -D
Run Code Online (Sandbox Code Playgroud)
config-overrides.js以下内容的文件:const path = require('path');
module.exports = function override(config, env) {
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);
}
});
});
// add a dedicated loader for WASM
config.module.rules.push({
test: wasmExtensionRegExp,
include: path.resolve(__dirname, 'src'),
use: [{ loader: require.resolve('wasm-loader'), options: {} }]
});
return config;
};
Run Code Online (Sandbox Code Playgroud)
react-app-rewired以下命令react-scripts:"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test"
}
Run Code Online (Sandbox Code Playgroud)
npm install --save wasmlibfp
Run Code Online (Sandbox Code Playgroud)
WebAssembly 必须异步加载,因此您需要添加加载它的 JS 代码(我将其放在 中App.js):
componentDidMount() {
this.loadWasm();
}
loadWasm = async () => {
try {
const wasm = await import('external');
this.setState({wasm});
} catch(err) {
console.error(`Unexpected error in loadWasm. [Message: ${err.message}]`);
}
};
Run Code Online (Sandbox Code Playgroud)
render() {
const { wasm = {} } = this.state;
return (
<div className="App">
{ wasm.doStuff && wasm.doStuff() }
</div>
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3621 次 |
| 最近记录: |