Я пытаюсь импортировать файл JavaScript в React, который был скомпилирован из кода C с использованием Emscripten. Это похоже на этот вопрос здесь, но, похоже, ответ не работает. Цель состоит в том, чтобы иметь возможность импортировать функцию в файл JS и вызывать ее, как если бы она была именованной функцией. Я скомпилировал файл JS с MODULARIZE=1 и WASM=0 с помощью следующей команды:

 emcc ../../helloWorld/ping.c -o ../../helloWorld/ping.js -s WASM=0 -s ENVIRONMENT=web -s EXTRA_EXPORTED_RUNTIME_METHODS="['cwrap']" -s MODULARIZE=1 

ping.c

 #include {amp}lt;stdio.h{amp}gt; #include {amp}lt;emscripten.h{amp}gt; EMSCRIPTEN_KEEPALIVE int pingIt() { return 1; } 

importPingIt.js

 let Module = require('./ping.js'); // Your Emscripten JS output file let pingIt = Module().cwrap('pingIt'); // Call Module as a function Module.exports = pingIt; 

App.js

 import React from 'react'; import './App.css'; import pingIt from './importPingIt.js'; export default class App extends React.Component { handleClick = () ={amp}gt; { console.log("button clicked OK"); pingIt(); } render() { return ( {amp}lt;div{amp}gt; {amp}lt;button onClick={this.handleClick}{amp}gt; Button 1 {amp}lt;/button{amp}gt; {amp}lt;/div{amp}gt; ); } } 

Когда я компилирую, я получаю следующие ошибки:

 index.js:1375 ./src/ping.js Line 87: Unexpected use of 'self' no-restricted-globals Line 695: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 744: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 836: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 1009: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 1233: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 1487: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 2133: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 2271: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 2284: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 2302: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 2585: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 2743: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 4006: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 4640: 'define' is not defined no-undef Line 4641: Expected imports instead of AMD define() import/no-amd Line 4641: 'define' is not defined no-undef 

Вам нужно будет использовать какой-то асинхронный шаблон для ожидания загрузки модуля Wasm. Попробуйте что-то вроде этого, которое использует обещание pingIt.ready :

 import pingItWasm from './importPingIt.js'; let pingIt = { ready: new Promise(resolve ={amp}gt; { pingItWasm({ onRuntimeInitialized() { pingIt = this.pingIt; pingIt.ready = Promise.resolve() resolve(); } }); }) }; (async () { await pingIt.ready; pingIt(); })()