wasm的hello,world
This commit is contained in:
parent
51cfafb7ec
commit
2c5b4b2170
@ -1,42 +0,0 @@
|
|||||||
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
|
||||||
use tokio::{net, runtime};
|
|
||||||
use tokio::sync;
|
|
||||||
|
|
||||||
|
|
||||||
pub struct Server {
|
|
||||||
listener_addr: &'static str,
|
|
||||||
listener_port: i32,
|
|
||||||
status: bool,
|
|
||||||
route_vec:Vec<(&'static str,&'static str)>,
|
|
||||||
}
|
|
||||||
impl Server {
|
|
||||||
pub fn new(listener_port:i32) -> Self {
|
|
||||||
if listener_port < 1 || listener_port > 65535 {
|
|
||||||
panic!("listener port must be between 1 and 65535");
|
|
||||||
}
|
|
||||||
Self {
|
|
||||||
listener_addr: "127.0.0.1",
|
|
||||||
listener_port,
|
|
||||||
status: false,
|
|
||||||
route_vec: Vec::new(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pub fn start(&self) {
|
|
||||||
let address=format!("{}:{}", self.listener_addr, self.listener_port);
|
|
||||||
let rt = runtime::Runtime::new().unwrap();
|
|
||||||
println!("Listening on {}", address);
|
|
||||||
let listener =rt.block_on(async { net::TcpListener::bind(address).await.expect("Failed to bind listener") });
|
|
||||||
rt.block_on(Self::receive(listener))
|
|
||||||
}
|
|
||||||
async fn receive(listener:net::TcpListener) {
|
|
||||||
loop {
|
|
||||||
let (mut socket, _) = listener.accept().await.expect("Failed to accept connection");
|
|
||||||
tokio::spawn(async move {
|
|
||||||
println!("监听成功");
|
|
||||||
let mut buf = [0; 1024];
|
|
||||||
socket.read(&mut buf).await.unwrap();
|
|
||||||
socket.write_all(b"Hello, World!").await.unwrap();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +1,13 @@
|
|||||||
use core::Server;
|
extern crate wasm_bindgen;
|
||||||
mod core;
|
|
||||||
|
|
||||||
fn main() {
|
use wasm_bindgen::prelude::*;
|
||||||
let server = core::Server::new( 8000);
|
|
||||||
server.start();
|
#[wasm_bindgen]
|
||||||
}
|
extern {
|
||||||
|
pub fn alert(s: &str);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub fn greet(name: &str) {
|
||||||
|
alert(&format!("Hello, {}!", name));
|
||||||
|
}
|
||||||
|
13
rust/wasm/hello_world/Cargo.toml
Normal file
13
rust/wasm/hello_world/Cargo.toml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[package]
|
||||||
|
name = "wasm"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
wasm-bindgen = "0.2.95"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
|
[package.metadata.wasm-pack.profile.release]
|
||||||
|
wasm-opt = false
|
BIN
rust/wasm/hello_world/dist/bd225cef621f4330ec1f.module.wasm
vendored
Normal file
BIN
rust/wasm/hello_world/dist/bd225cef621f4330ec1f.module.wasm
vendored
Normal file
Binary file not shown.
377
rust/wasm/hello_world/dist/main.js
vendored
Normal file
377
rust/wasm/hello_world/dist/main.js
vendored
Normal file
@ -0,0 +1,377 @@
|
|||||||
|
/*
|
||||||
|
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
|
||||||
|
* This devtool is neither made for production nor for readable output files.
|
||||||
|
* It uses "eval()" calls to create a separate source file in the browser devtools.
|
||||||
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
||||||
|
* or disable the default devtool with "devtool: false".
|
||||||
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
||||||
|
*/
|
||||||
|
/******/ (() => { // webpackBootstrap
|
||||||
|
/******/ var __webpack_modules__ = ({
|
||||||
|
|
||||||
|
/***/ "./src/index.js":
|
||||||
|
/*!**********************!*\
|
||||||
|
!*** ./src/index.js ***!
|
||||||
|
\**********************/
|
||||||
|
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
||||||
|
|
||||||
|
eval("const js = __webpack_require__.e(/*! import() */ \"pkg_wasm_js\").then(__webpack_require__.bind(__webpack_require__, /*! ../pkg/wasm */ \"./pkg/wasm.js\"));\r\n\r\njs.then((js) => {\r\n js.greet();\r\n})\n\n//# sourceURL=webpack://wasm/./src/index.js?");
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
/******/ });
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ // The module cache
|
||||||
|
/******/ var __webpack_module_cache__ = {};
|
||||||
|
/******/
|
||||||
|
/******/ // The require function
|
||||||
|
/******/ function __webpack_require__(moduleId) {
|
||||||
|
/******/ // Check if module is in cache
|
||||||
|
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||||
|
/******/ if (cachedModule !== undefined) {
|
||||||
|
/******/ return cachedModule.exports;
|
||||||
|
/******/ }
|
||||||
|
/******/ // Create a new module (and put it into the cache)
|
||||||
|
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||||
|
/******/ id: moduleId,
|
||||||
|
/******/ // no module.loaded needed
|
||||||
|
/******/ exports: {}
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // Execute the module function
|
||||||
|
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||||
|
/******/
|
||||||
|
/******/ // Return the exports of the module
|
||||||
|
/******/ return module.exports;
|
||||||
|
/******/ }
|
||||||
|
/******/
|
||||||
|
/******/ // expose the modules object (__webpack_modules__)
|
||||||
|
/******/ __webpack_require__.m = __webpack_modules__;
|
||||||
|
/******/
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ /* webpack/runtime/async module */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ var webpackQueues = typeof Symbol === "function" ? Symbol("webpack queues") : "__webpack_queues__";
|
||||||
|
/******/ var webpackExports = typeof Symbol === "function" ? Symbol("webpack exports") : "__webpack_exports__";
|
||||||
|
/******/ var webpackError = typeof Symbol === "function" ? Symbol("webpack error") : "__webpack_error__";
|
||||||
|
/******/ var resolveQueue = (queue) => {
|
||||||
|
/******/ if(queue && queue.d < 1) {
|
||||||
|
/******/ queue.d = 1;
|
||||||
|
/******/ queue.forEach((fn) => (fn.r--));
|
||||||
|
/******/ queue.forEach((fn) => (fn.r-- ? fn.r++ : fn()));
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ var wrapDeps = (deps) => (deps.map((dep) => {
|
||||||
|
/******/ if(dep !== null && typeof dep === "object") {
|
||||||
|
/******/ if(dep[webpackQueues]) return dep;
|
||||||
|
/******/ if(dep.then) {
|
||||||
|
/******/ var queue = [];
|
||||||
|
/******/ queue.d = 0;
|
||||||
|
/******/ dep.then((r) => {
|
||||||
|
/******/ obj[webpackExports] = r;
|
||||||
|
/******/ resolveQueue(queue);
|
||||||
|
/******/ }, (e) => {
|
||||||
|
/******/ obj[webpackError] = e;
|
||||||
|
/******/ resolveQueue(queue);
|
||||||
|
/******/ });
|
||||||
|
/******/ var obj = {};
|
||||||
|
/******/ obj[webpackQueues] = (fn) => (fn(queue));
|
||||||
|
/******/ return obj;
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ var ret = {};
|
||||||
|
/******/ ret[webpackQueues] = x => {};
|
||||||
|
/******/ ret[webpackExports] = dep;
|
||||||
|
/******/ return ret;
|
||||||
|
/******/ }));
|
||||||
|
/******/ __webpack_require__.a = (module, body, hasAwait) => {
|
||||||
|
/******/ var queue;
|
||||||
|
/******/ hasAwait && ((queue = []).d = -1);
|
||||||
|
/******/ var depQueues = new Set();
|
||||||
|
/******/ var exports = module.exports;
|
||||||
|
/******/ var currentDeps;
|
||||||
|
/******/ var outerResolve;
|
||||||
|
/******/ var reject;
|
||||||
|
/******/ var promise = new Promise((resolve, rej) => {
|
||||||
|
/******/ reject = rej;
|
||||||
|
/******/ outerResolve = resolve;
|
||||||
|
/******/ });
|
||||||
|
/******/ promise[webpackExports] = exports;
|
||||||
|
/******/ promise[webpackQueues] = (fn) => (queue && fn(queue), depQueues.forEach(fn), promise["catch"](x => {}));
|
||||||
|
/******/ module.exports = promise;
|
||||||
|
/******/ body((deps) => {
|
||||||
|
/******/ currentDeps = wrapDeps(deps);
|
||||||
|
/******/ var fn;
|
||||||
|
/******/ var getResult = () => (currentDeps.map((d) => {
|
||||||
|
/******/ if(d[webpackError]) throw d[webpackError];
|
||||||
|
/******/ return d[webpackExports];
|
||||||
|
/******/ }))
|
||||||
|
/******/ var promise = new Promise((resolve) => {
|
||||||
|
/******/ fn = () => (resolve(getResult));
|
||||||
|
/******/ fn.r = 0;
|
||||||
|
/******/ var fnQueue = (q) => (q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn))));
|
||||||
|
/******/ currentDeps.map((dep) => (dep[webpackQueues](fnQueue)));
|
||||||
|
/******/ });
|
||||||
|
/******/ return fn.r ? promise : getResult();
|
||||||
|
/******/ }, (err) => ((err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)));
|
||||||
|
/******/ queue && queue.d < 0 && (queue.d = 0);
|
||||||
|
/******/ };
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/define property getters */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ // define getter functions for harmony exports
|
||||||
|
/******/ __webpack_require__.d = (exports, definition) => {
|
||||||
|
/******/ for(var key in definition) {
|
||||||
|
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||||
|
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ };
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/ensure chunk */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ __webpack_require__.f = {};
|
||||||
|
/******/ // This file contains only the entry chunk.
|
||||||
|
/******/ // The chunk loading function for additional chunks
|
||||||
|
/******/ __webpack_require__.e = (chunkId) => {
|
||||||
|
/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {
|
||||||
|
/******/ __webpack_require__.f[key](chunkId, promises);
|
||||||
|
/******/ return promises;
|
||||||
|
/******/ }, []));
|
||||||
|
/******/ };
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/get javascript chunk filename */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ // This function allow to reference async chunks
|
||||||
|
/******/ __webpack_require__.u = (chunkId) => {
|
||||||
|
/******/ // return url for filenames based on template
|
||||||
|
/******/ return "" + chunkId + ".js";
|
||||||
|
/******/ };
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/global */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ __webpack_require__.g = (function() {
|
||||||
|
/******/ if (typeof globalThis === 'object') return globalThis;
|
||||||
|
/******/ try {
|
||||||
|
/******/ return this || new Function('return this')();
|
||||||
|
/******/ } catch (e) {
|
||||||
|
/******/ if (typeof window === 'object') return window;
|
||||||
|
/******/ }
|
||||||
|
/******/ })();
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/load script */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ var inProgress = {};
|
||||||
|
/******/ var dataWebpackPrefix = "wasm:";
|
||||||
|
/******/ // loadScript function to load a script via script tag
|
||||||
|
/******/ __webpack_require__.l = (url, done, key, chunkId) => {
|
||||||
|
/******/ if(inProgress[url]) { inProgress[url].push(done); return; }
|
||||||
|
/******/ var script, needAttach;
|
||||||
|
/******/ if(key !== undefined) {
|
||||||
|
/******/ var scripts = document.getElementsByTagName("script");
|
||||||
|
/******/ for(var i = 0; i < scripts.length; i++) {
|
||||||
|
/******/ var s = scripts[i];
|
||||||
|
/******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; }
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ if(!script) {
|
||||||
|
/******/ needAttach = true;
|
||||||
|
/******/ script = document.createElement('script');
|
||||||
|
/******/
|
||||||
|
/******/ script.charset = 'utf-8';
|
||||||
|
/******/ script.timeout = 120;
|
||||||
|
/******/ if (__webpack_require__.nc) {
|
||||||
|
/******/ script.setAttribute("nonce", __webpack_require__.nc);
|
||||||
|
/******/ }
|
||||||
|
/******/ script.setAttribute("data-webpack", dataWebpackPrefix + key);
|
||||||
|
/******/
|
||||||
|
/******/ script.src = url;
|
||||||
|
/******/ }
|
||||||
|
/******/ inProgress[url] = [done];
|
||||||
|
/******/ var onScriptComplete = (prev, event) => {
|
||||||
|
/******/ // avoid mem leaks in IE.
|
||||||
|
/******/ script.onerror = script.onload = null;
|
||||||
|
/******/ clearTimeout(timeout);
|
||||||
|
/******/ var doneFns = inProgress[url];
|
||||||
|
/******/ delete inProgress[url];
|
||||||
|
/******/ script.parentNode && script.parentNode.removeChild(script);
|
||||||
|
/******/ doneFns && doneFns.forEach((fn) => (fn(event)));
|
||||||
|
/******/ if(prev) return prev(event);
|
||||||
|
/******/ }
|
||||||
|
/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);
|
||||||
|
/******/ script.onerror = onScriptComplete.bind(null, script.onerror);
|
||||||
|
/******/ script.onload = onScriptComplete.bind(null, script.onload);
|
||||||
|
/******/ needAttach && document.head.appendChild(script);
|
||||||
|
/******/ };
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/make namespace object */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ // define __esModule on exports
|
||||||
|
/******/ __webpack_require__.r = (exports) => {
|
||||||
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||||
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||||
|
/******/ }
|
||||||
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||||
|
/******/ };
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/wasm loading */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ __webpack_require__.v = (exports, wasmModuleId, wasmModuleHash, importsObj) => {
|
||||||
|
/******/ var req = fetch(__webpack_require__.p + "" + wasmModuleHash + ".module.wasm");
|
||||||
|
/******/ var fallback = () => (req
|
||||||
|
/******/ .then((x) => (x.arrayBuffer()))
|
||||||
|
/******/ .then((bytes) => (WebAssembly.instantiate(bytes, importsObj)))
|
||||||
|
/******/ .then((res) => (Object.assign(exports, res.instance.exports))));
|
||||||
|
/******/ return req.then((res) => {
|
||||||
|
/******/ if (typeof WebAssembly.instantiateStreaming === "function") {
|
||||||
|
/******/ return WebAssembly.instantiateStreaming(res, importsObj)
|
||||||
|
/******/ .then(
|
||||||
|
/******/ (res) => (Object.assign(exports, res.instance.exports)),
|
||||||
|
/******/ (e) => {
|
||||||
|
/******/ if(res.headers.get("Content-Type") !== "application/wasm") {
|
||||||
|
/******/ console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
|
||||||
|
/******/ return fallback();
|
||||||
|
/******/ }
|
||||||
|
/******/ throw e;
|
||||||
|
/******/ }
|
||||||
|
/******/ );
|
||||||
|
/******/ }
|
||||||
|
/******/ return fallback();
|
||||||
|
/******/ });
|
||||||
|
/******/ };
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/publicPath */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ var scriptUrl;
|
||||||
|
/******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + "";
|
||||||
|
/******/ var document = __webpack_require__.g.document;
|
||||||
|
/******/ if (!scriptUrl && document) {
|
||||||
|
/******/ if (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')
|
||||||
|
/******/ scriptUrl = document.currentScript.src;
|
||||||
|
/******/ if (!scriptUrl) {
|
||||||
|
/******/ var scripts = document.getElementsByTagName("script");
|
||||||
|
/******/ if(scripts.length) {
|
||||||
|
/******/ var i = scripts.length - 1;
|
||||||
|
/******/ while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration
|
||||||
|
/******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.
|
||||||
|
/******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");
|
||||||
|
/******/ scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/");
|
||||||
|
/******/ __webpack_require__.p = scriptUrl;
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/jsonp chunk loading */
|
||||||
|
/******/ (() => {
|
||||||
|
/******/ // no baseURI
|
||||||
|
/******/
|
||||||
|
/******/ // object to store loaded and loading chunks
|
||||||
|
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
|
||||||
|
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
|
||||||
|
/******/ var installedChunks = {
|
||||||
|
/******/ "main": 0
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ __webpack_require__.f.j = (chunkId, promises) => {
|
||||||
|
/******/ // JSONP chunk loading for javascript
|
||||||
|
/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;
|
||||||
|
/******/ if(installedChunkData !== 0) { // 0 means "already installed".
|
||||||
|
/******/
|
||||||
|
/******/ // a Promise means "currently loading".
|
||||||
|
/******/ if(installedChunkData) {
|
||||||
|
/******/ promises.push(installedChunkData[2]);
|
||||||
|
/******/ } else {
|
||||||
|
/******/ if(true) { // all chunks have JS
|
||||||
|
/******/ // setup Promise in chunk cache
|
||||||
|
/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));
|
||||||
|
/******/ promises.push(installedChunkData[2] = promise);
|
||||||
|
/******/
|
||||||
|
/******/ // start chunk loading
|
||||||
|
/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId);
|
||||||
|
/******/ // create error before stack unwound to get useful stacktrace later
|
||||||
|
/******/ var error = new Error();
|
||||||
|
/******/ var loadingEnded = (event) => {
|
||||||
|
/******/ if(__webpack_require__.o(installedChunks, chunkId)) {
|
||||||
|
/******/ installedChunkData = installedChunks[chunkId];
|
||||||
|
/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined;
|
||||||
|
/******/ if(installedChunkData) {
|
||||||
|
/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
|
||||||
|
/******/ var realSrc = event && event.target && event.target.src;
|
||||||
|
/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
|
||||||
|
/******/ error.name = 'ChunkLoadError';
|
||||||
|
/******/ error.type = errorType;
|
||||||
|
/******/ error.request = realSrc;
|
||||||
|
/******/ installedChunkData[1](error);
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ };
|
||||||
|
/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId);
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // no prefetching
|
||||||
|
/******/
|
||||||
|
/******/ // no preloaded
|
||||||
|
/******/
|
||||||
|
/******/ // no HMR
|
||||||
|
/******/
|
||||||
|
/******/ // no HMR manifest
|
||||||
|
/******/
|
||||||
|
/******/ // no on chunks loaded
|
||||||
|
/******/
|
||||||
|
/******/ // install a JSONP callback for chunk loading
|
||||||
|
/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
|
||||||
|
/******/ var [chunkIds, moreModules, runtime] = data;
|
||||||
|
/******/ // add "moreModules" to the modules object,
|
||||||
|
/******/ // then flag all "chunkIds" as loaded and fire callback
|
||||||
|
/******/ var moduleId, chunkId, i = 0;
|
||||||
|
/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
|
||||||
|
/******/ for(moduleId in moreModules) {
|
||||||
|
/******/ if(__webpack_require__.o(moreModules, moduleId)) {
|
||||||
|
/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ if(runtime) var result = runtime(__webpack_require__);
|
||||||
|
/******/ }
|
||||||
|
/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
|
||||||
|
/******/ for(;i < chunkIds.length; i++) {
|
||||||
|
/******/ chunkId = chunkIds[i];
|
||||||
|
/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
|
||||||
|
/******/ installedChunks[chunkId][0]();
|
||||||
|
/******/ }
|
||||||
|
/******/ installedChunks[chunkId] = 0;
|
||||||
|
/******/ }
|
||||||
|
/******/
|
||||||
|
/******/ }
|
||||||
|
/******/
|
||||||
|
/******/ var chunkLoadingGlobal = self["webpackChunkwasm"] = self["webpackChunkwasm"] || [];
|
||||||
|
/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
|
||||||
|
/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
|
||||||
|
/******/ })();
|
||||||
|
/******/
|
||||||
|
/************************************************************************/
|
||||||
|
/******/
|
||||||
|
/******/ // startup
|
||||||
|
/******/ // Load entry module and return exports
|
||||||
|
/******/ // This entry module can't be inlined because the eval devtool is used.
|
||||||
|
/******/ var __webpack_exports__ = __webpack_require__("./src/index.js");
|
||||||
|
/******/
|
||||||
|
/******/ })()
|
||||||
|
;
|
42
rust/wasm/hello_world/dist/pkg_wasm_js.js
vendored
Normal file
42
rust/wasm/hello_world/dist/pkg_wasm_js.js
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
"use strict";
|
||||||
|
/*
|
||||||
|
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
|
||||||
|
* This devtool is neither made for production nor for readable output files.
|
||||||
|
* It uses "eval()" calls to create a separate source file in the browser devtools.
|
||||||
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
||||||
|
* or disable the default devtool with "devtool: false".
|
||||||
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
||||||
|
*/
|
||||||
|
(self["webpackChunkwasm"] = self["webpackChunkwasm"] || []).push([["pkg_wasm_js"],{
|
||||||
|
|
||||||
|
/***/ "./pkg/wasm.js":
|
||||||
|
/*!*********************!*\
|
||||||
|
!*** ./pkg/wasm.js ***!
|
||||||
|
\*********************/
|
||||||
|
/***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => {
|
||||||
|
|
||||||
|
eval("__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ __wbg_alert_e63a4c41bbd7a3e9: () => (/* reexport safe */ _wasm_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_alert_e63a4c41bbd7a3e9),\n/* harmony export */ __wbg_set_wasm: () => (/* reexport safe */ _wasm_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_set_wasm),\n/* harmony export */ greet: () => (/* reexport safe */ _wasm_bg_js__WEBPACK_IMPORTED_MODULE_0__.greet)\n/* harmony export */ });\n/* harmony import */ var _wasm_bg_wasm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./wasm_bg.wasm */ \"./pkg/wasm_bg.wasm\");\n/* harmony import */ var _wasm_bg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wasm_bg.js */ \"./pkg/wasm_bg.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_wasm_bg_wasm__WEBPACK_IMPORTED_MODULE_1__]);\n_wasm_bg_wasm__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];\n\n\n\n(0,_wasm_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_set_wasm)(_wasm_bg_wasm__WEBPACK_IMPORTED_MODULE_1__);\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });\n\n//# sourceURL=webpack://wasm/./pkg/wasm.js?");
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ "./pkg/wasm_bg.js":
|
||||||
|
/*!************************!*\
|
||||||
|
!*** ./pkg/wasm_bg.js ***!
|
||||||
|
\************************/
|
||||||
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
||||||
|
|
||||||
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ __wbg_alert_e63a4c41bbd7a3e9: () => (/* binding */ __wbg_alert_e63a4c41bbd7a3e9),\n/* harmony export */ __wbg_set_wasm: () => (/* binding */ __wbg_set_wasm),\n/* harmony export */ greet: () => (/* binding */ greet)\n/* harmony export */ });\nlet wasm;\nfunction __wbg_set_wasm(val) {\n wasm = val;\n}\n\n\nconst lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;\n\nlet cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nlet cachedUint8ArrayMemory0 = null;\n\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nfunction greet() {\n wasm.greet();\n}\n\nfunction __wbg_alert_e63a4c41bbd7a3e9(arg0, arg1) {\n alert(getStringFromWasm0(arg0, arg1));\n};\n\n\n\n//# sourceURL=webpack://wasm/./pkg/wasm_bg.js?");
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ "./pkg/wasm_bg.wasm":
|
||||||
|
/*!**************************!*\
|
||||||
|
!*** ./pkg/wasm_bg.wasm ***!
|
||||||
|
\**************************/
|
||||||
|
/***/ ((module, exports, __webpack_require__) => {
|
||||||
|
|
||||||
|
eval("/* harmony import */ var WEBPACK_IMPORTED_MODULE_0 = __webpack_require__(/*! ./wasm_bg.js */ \"./pkg/wasm_bg.js\");\nmodule.exports = __webpack_require__.v(exports, module.id, \"bd225cef621f4330ec1f\", {\n\t\"./wasm_bg.js\": {\n\t\t\"__wbg_alert_e63a4c41bbd7a3e9\": WEBPACK_IMPORTED_MODULE_0.__wbg_alert_e63a4c41bbd7a3e9\n\t}\n});\n\n//# sourceURL=webpack://wasm/./pkg/wasm_bg.wasm?");
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
}]);
|
20
rust/wasm/hello_world/package.json
Normal file
20
rust/wasm/hello_world/package.json
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"name": "wasm",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"serve": "webpack-dev-server"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"description": "",
|
||||||
|
"dependencies": {
|
||||||
|
"@lsy2246/wasm": "^0.1.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"webpack": "^5.95.0",
|
||||||
|
"webpack-cli": "^5.1.4",
|
||||||
|
"webpack-dev-server": "^5.1.0"
|
||||||
|
}
|
||||||
|
}
|
12
rust/wasm/hello_world/src/index.html
Normal file
12
rust/wasm/hello_world/src/index.html
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>WebAssembly Example</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>WebAssembly Example</h1>
|
||||||
|
<script src="../dist/main.js"></script> <!-- 确保路径正确 -->
|
||||||
|
</body>
|
||||||
|
</html>
|
5
rust/wasm/hello_world/src/index.js
Normal file
5
rust/wasm/hello_world/src/index.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
const js = import("../pkg/wasm");
|
||||||
|
|
||||||
|
js.then((js) => {
|
||||||
|
js.greet();
|
||||||
|
})
|
13
rust/wasm/hello_world/src/lib.rs
Normal file
13
rust/wasm/hello_world/src/lib.rs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
extern crate wasm_bindgen;
|
||||||
|
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
extern {
|
||||||
|
pub fn alert(s: &str);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub fn greet() {
|
||||||
|
alert(&format!("Hello, world!"));
|
||||||
|
}
|
16
rust/wasm/hello_world/webpack.config.js
Normal file
16
rust/wasm/hello_world/webpack.config.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
module.exports = {
|
||||||
|
entry: './src/index.js',
|
||||||
|
mode: 'development', // 或 'production'
|
||||||
|
experiments: {
|
||||||
|
asyncWebAssembly: true, // 或 syncWebAssembly
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.wasm$/,
|
||||||
|
type: "webassembly/async" // 如果你选择异步方式
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// 其他配置
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user