Golang Wasm Webpack插件更新指南
Golang Wasm Webpack插件更新指南 适用于 Golang v1.13 WebAssembly 的 Webpack 插件,包含 CLI(NodeJS)和 Web(React 或 Svelte)的示例。
我已 Fork 并更新了适用于 Golang v1.13 的 webpack Go wasm 插件,并添加了一个 Svelte 示例:
happybeing/webpack-golang-wasm-async-loader
一个 webpack loader,用于生成 Golang WebAssembly 包,采用异步交互模型从 JavaScript 调用 Golang 代码 - happybeing/webpack-golang-wasm-async-loader
这是我一个巧妙计划的一部分,旨在创建一个去中心化的 git 门户(替代 github),它可以在浏览器中从 p2p 存储运行(因此是静态 HTML 且无服务器)。如果有兴趣,请参见这里。
更多关于Golang Wasm Webpack插件更新指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Wasm Webpack插件更新指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
针对你更新的 webpack-golang-wasm-async-loader 插件,这里提供在 React 和 Svelte 项目中集成 Golang WebAssembly 的示例代码。
React 示例
import React, { useEffect, useState } from 'react';
import loadWasm from 'golang-wasm-async-loader!./main.go';
function App() {
const [wasm, setWasm] = useState(null);
const [result, setResult] = useState('');
useEffect(() => {
loadWasm().then(instance => {
setWasm(instance);
});
}, []);
const handleClick = async () => {
if (wasm) {
const res = await wasm.exports.add(5, 3);
setResult(`5 + 3 = ${res}`);
}
};
return (
<div>
<button onClick={handleClick}>调用 Go 函数</button>
<p>{result}</p>
</div>
);
}
export default App;
Svelte 示例
<script>
import { onMount } from 'svelte';
import loadWasm from 'golang-wasm-async-loader!./main.go';
let wasm = null;
let result = '';
onMount(async () => {
wasm = await loadWasm();
});
async function callGoFunction() {
if (wasm) {
const res = await wasm.exports.multiply(4, 7);
result = `4 × 7 = ${res}`;
}
}
</script>
<button on:click={callGoFunction}>执行乘法</button>
<p>{result}</p>
Go WebAssembly 代码示例
// main.go
package main
import "syscall/js"
func add(this js.Value, args []js.Value) interface{} {
return args[0].Int() + args[1].Int()
}
func multiply(this js.Value, args []js.Value) interface{} {
return args[0].Int() * args[1].Int()
}
func main() {
c := make(chan struct{}, 0)
js.Global().Set("add", js.FuncOf(add))
js.Global().Set("multiply", js.FuncOf(multiply))
<-c
}
Webpack 配置
// webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.go$/,
use: 'golang-wasm-async-loader'
}
]
}
};
构建命令
# 安装依赖
npm install webpack-golang-wasm-async-loader
# 构建 WebAssembly
GOOS=js GOARCH=wasm go build -o main.wasm main.go
# 运行开发服务器
npm run dev
这些示例展示了如何在现代前端框架中加载和调用 Golang WebAssembly 模块。插件通过异步加载机制优化了 wasm 模块的初始化过程,避免了阻塞主线程。

