Rust 和 Wasm 初始设置

     2023-03-13     279

关键词:

【中文标题】Rust 和 Wasm 初始设置【英文标题】:Rust & Wasm intitial set up 【发布时间】:2020-12-29 14:47:53 【问题描述】:

我正在关注this tutorial 使用 rust 创建 webassembly 应用程序,但是当我尝试使用 node 运行捆绑的 web 程序集代码时(在添加我自己的任何代码之前并完全按照教程进行操作)

$ npm run start
> create-wasm-app@0.1.0 start /Users/jakearmendariz/Desktop/wasm/wasm-game-of-life/www
> webpack-dev-server

/Users/jakearmendariz/Desktop/wasm/wasm-game-of-life/www/node_modules/copy-webpack-plugin/node_modules/schema-utils/dist/validate.js:98
    throw new _ValidationError.default(errors, schema, configuration);
    ^

ValidationError: Invalid options object. Copy Plugin has been initialized using an options object that does not match the API schema.
 - options[0] should be an object:
   object  patterns, options? 
    at validate (/Users/jakearmendariz/Desktop/wasm/wasm-game-of-life/www/node_modules/copy-webpack-plugin/node_modules/schema-utils/dist/validate.js:98:11)
    at new CopyPlugin (/Users/jakearmendariz/Desktop/wasm/wasm-game-of-life/www/node_modules/copy-webpack-plugin/dist/index.js:32:30)
    at Object.<anonymous> (/Users/jakearmendariz/Desktop/wasm/wasm-game-of-life/www/webpack.config.js:12:5)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:690:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at WEBPACK_OPTIONS (/Users/jakearmendariz/Desktop/wasm/wasm-game-of-life/www/node_modules/webpack-cli/bin/utils/convert-argv.js:114:13)
    at requireConfig (/Users/jakearmendariz/Desktop/wasm/wasm-game-of-life/www/node_modules/webpack-cli/bin/utils/convert-argv.js:116:6)
    at /Users/jakearmendariz/Desktop/wasm/wasm-game-of-life/www/node_modules/webpack-cli/bin/utils/convert-argv.js:123:17
    at Array.forEach (<anonymous>)
    at module.exports (/Users/jakearmendariz/Desktop/wasm/wasm-game-of-life/www/node_modules/webpack-cli/bin/utils/convert-argv.js:121:15)
    at Object.<anonymous> (/Users/jakearmendariz/Desktop/wasm/wasm-game-of-life/www/node_modules/webpack-dev-server/bin/webpack-dev-server.js:84:40)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! create-wasm-app@0.1.0 start: `webpack-dev-server`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the create-wasm-app@0.1.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/jakearmendariz/.npm/_logs/2020-09-11T04_46_27_442Z-debug.log

webpack.config

const CopyWebpackPlugin = require("copy-webpack-plugin");
const path = require('path');

module.exports = 
  entry: "./bootstrap.js",
  output: 
    path: path.resolve(__dirname, "dist"),
    filename: "bootstrap.js",
  ,
  mode: "development",
  plugins: [
    new CopyWebpackPlugin(['index.html'])
  ],
;

package.json 依赖项

  "dependencies": 
    "minimist": "^1.2.5",
    "wasm-game-of-life": "file:../pkg"
  ,
  "devDependencies": 
    "copy-webpack-plugin": "^6.1.0",
    "hello-wasm-pack": "^0.1.0",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.11.0"
  

我像以前一样重新编写了教程,得到了相同的结果。我认为这是我的 npm 设置的问题,但我不确定。

【问题讨论】:

这能回答你的问题吗? Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema 不,这是一个类似的问题,但我已经卸载并重新安装了我所有的 webpack 依赖项,但我仍然遇到这个问题 插件在webpack.config.js中初始化,因此您需要更新您的问题以显示该配置,以及您的package.json的内容 @Herohtar 添加了这些文件 【参考方案1】:

由于安全警报,当我从教程文件中指定的版本更新 copy-webpack-plugin 的版本时,我遇到了类似的错误。配置参数的格式同时发生了变化,所以我不得不更改它们以匹配。

教程有"copy-webpack-plugin": "^5.0.3",我升级到"copy-webpack-plugin": "^6.0.3",在webpack.config.js我不得不改变

    new CopyPlugin([
      path.resolve(__dirname, "static")
    ]),
    new CopyPlugin(
      patterns: [
        path.resolve(__dirname, "static")
      ]
    ),

我不熟悉 webpack 或 copy-webpack-plugin,除了通过你正在遵循的相同的 rust-wasm 教程,所以使用这个建议需要你自担风险;我只能说它似乎有效。

【讨论】:

@JakeArmendariz 如果之前的构造函数是new CopyWebpackPlugin(['index.html']),那么你需要把它改成new CopyWebpackPlugin( patterns: ['index.html']) 哇,这很明显哈哈,修好了。谢谢@Herohtar 和凯文·里德

微软的wasm和rust的wasm方案对比

微软家的:blazor看图即可见原理。mono.wasm用来构造了一个dotnet解释器。在blazor被微软收购之前是用的dotnetanywhere,现在换成了mono然后,直接加载那些dll,执行正经的IL代码。这个方案,稳健,除了加载容量... 查看详情

rust语言编写wasm简单例子(代码片段)

rust的wasm使用wasm-pack来build,有很多选项和target用于不同的目的,本文描述一个最简单的示例,不使用webpack和npm,让你可以快速入门和了解。全局安装wasm-packcargoinstallwasm-pack--no-default-features#忽略OpenSSL实例代码extern... 查看详情

如何使用 Wasm 和 Rust 服务多个 HTML 页面?

】如何使用Wasm和Rust服务多个HTML页面?【英文标题】:HowtoservemultipleHTMLpagesusingWasmwithRust?【发布时间】:2020-07-1001:43:17【问题描述】:我正在尝试构建一个在客户端运行wasm的Web应用程序,我想知道什么是服务多个页面的好方法... 查看详情

从 Rust 为机器类型 wasm32 构建 LLVM

】从Rust为机器类型wasm32构建LLVM【英文标题】:BuildLLVMfromRustformachinetypewasm32【发布时间】:2020-02-1311:11:40【问题描述】:我正在尝试构建一个爱好项目,在其中我将Rust文件构建到WebAssembly。我想将更多选项传递给emscripten,然后Ru... 查看详情

rust语言编写wasm简单例子(代码片段)

rust的wasm使用wasm-pack来build,有很多选项和target用于不同的目的,本文描述一个最简单的示例,不使用webpack和npm,让你可以快速入门和了解。全局安装wasm-packcargoinstallwasm-pack--no-default-features#忽略OpenSSL实例代码extern... 查看详情

如何通过 wasm-pack 将 Rust Wasm 应用程序与 libpq 链接?

】如何通过wasm-pack将RustWasm应用程序与libpq链接?【英文标题】:HowcanIlinkaRustWasmapplicationwithlibpqviawasm-pack?【发布时间】:2020-02-2900:57:30【问题描述】:我正在尝试创建一个带有Wasm数据库层的NodeJS应用程序。我使用Rust、Diesel作为... 查看详情

如何使用 Rust 生成最小的 wasm 文件?

】如何使用Rust生成最小的wasm文件?【英文标题】:HowdoIgenerateaminimalwasmfilewithRust?【发布时间】:2018-03-2108:08:23【问题描述】:通过运行emcc-O3-sWASM=1-sSIDE_MODULE=1-osum.wasmsum.c,我可以从以下C代码生成一个相当小的(203字节)wasm文... 查看详情

全栈程序员的新玩具rust第一个wasm程序

先上代码https://gitee.com/lightsever/rust_study/tree/master/wasm_hello01 webassembly就不用再赘述了,耳朵里面快磨出茧子来了。rustwasm是火狐自家的玩具,让我们来继续做实验,让rust飞起来吧。环境安装安装好rust环境之后仍然需要一个wasm... 查看详情

worker-rust(代码片段)

添加target:wasm32-unknown-unknownrustuptargetaddwasm32-unknown-unknowninfo:downloadingcomponent\'rust-std\'for\'wasm32-unknown-unknown\'info:installingcomponent\'rust-std\'for\'wasm32-unknown-unknown\'19.0MiB/19.0MiB(100%)14.9MiB/sin1sETA:0s安装wasm-packcargoinstallwasm-packCargo安装可能... 查看详情

编译为 Wasm 时,指向堆分配内存的 Rust 指针可以为 0 吗?

】编译为Wasm时,指向堆分配内存的Rust指针可以为0吗?【英文标题】:CanaRustpointertoheap-allocatedmemorybe0whencompiledtoWasm?【发布时间】:2020-09-1411:19:06【问题描述】:在编译成Wasm的Rust代码中进行堆分配内存时,会分配Wasm线性内存中... 查看详情

wasm-pack 代码中的 Rust 导入导致 JS 错误

】wasm-pack代码中的Rust导入导致JS错误【英文标题】:Rustimportsinwasm-packcodecausingJSerror【发布时间】:2021-09-1716:58:05【问题描述】:我收到一个JS错误:Uncaught(inpromise)TypeError:WebAssembly.instantiate():Import#0module="env"error:moduleisnotano 查看详情

如何使用 Wasm-Bindgen Web_sys Wasm-pack 将字符串从 Js 传递到通过 Rust 生成的 Wasm

】如何使用Wasm-BindgenWeb_sysWasm-pack将字符串从Js传递到通过Rust生成的Wasm【英文标题】:HowtoPassaStringfromJstoWasmgeneratedthroughRustusingWasm-BindgenWeb_sysWasm-pack【发布时间】:2020-09-1104:16:01【问题描述】:代码是基本的,我从js调用一个函... 查看详情

使用 wasm-bindgen 对大型 rust 对象进行 Js 绑定

】使用wasm-bindgen对大型rust对象进行Js绑定【英文标题】:Jsbindingforlargerustobjectusingwasm-bindgen【发布时间】:2021-03-2208:05:21【问题描述】:我想写一个显示大二进制文件内容的vscode扩展,用bincode写的:#[macro_use]externcrateserde_derive;use... 查看详情

在 WASM-Bindgen Rust 中使用鼠标输入事件闭包创建回调时出现闭包调用错误

】在WASM-BindgenRust中使用鼠标输入事件闭包创建回调时出现闭包调用错误【英文标题】:ClousureInvocationErrorwhenCreatingaCallbackwithaClousureonMouseInputEventinWASM-BindgenRust【发布时间】:2020-12-1718:54:09【问题描述】:我有一个从WASM-Bindgen"canva... 查看详情

Rust wasm 将输入事件侦听器附加到元素

】Rustwasm将输入事件侦听器附加到元素【英文标题】:Rustwasmattatchinputeventlistenertoelement【发布时间】:2021-10-2620:09:11【问题描述】:如何将input事件侦听器添加到HtmlInputElement/HtmlTextAreaElement。我正在使用web-sys并阅读this,但随后,... 查看详情

原创来玩儿!rust+wasm开发的一个方便实用的大会海报工具

先来一张图镇楼:是不是很实用!!!此工具由专注于wasm 生态的SecondState提供。生成的海报可用于朋友圈等渠道传播不过,仅供娱乐哈!对专业运营团队可能很有用!还等什么,大家一起来玩玩儿吧!!​​https://second-state.... 查看详情

认识webassembly与rust实践(代码片段)

作者基于WebAssembly的兴趣写下本文,提供了一种未来在业务中遇到性能问题时的优化手段和思路。简介先来说下在WebAssembly(后续称WASM)官网上的介绍,主要有四点:高效:WASM有一套完整的语义,实际上WASM是体... 查看详情

在 Rust WASM Game of Life 教程中,无法让鼠标单击事件起作用

】在RustWASMGameofLife教程中,无法让鼠标单击事件起作用【英文标题】:InRustWASMGameofLifetutorial,can\'tgetthemouseclickeventtowork【发布时间】:2021-01-2803:31:31【问题描述】:问题:似乎无法使鼠标单击切换事件起作用。点击时,一个活细... 查看详情