WASM / Yew — не удалось разрешить: не удалось найти `unix` в `os`

#windows #rust #webassembly #yew

#Windows #Ржавчина #webassembly #yew

Вопрос:

Создание приложения Yew в Windows

Я создаю приложение yew вместе с серверной частью rocket в Windows, следуя этому руководству (хотя руководство предназначено для среды Linux). Я пытаюсь создать приложение yew с помощью wasm-pack . Я не использую подсистему Linux для создания приложения, хотя оно у меня установлено.

Код / Конфигурация

Репозиторий.

Я уже установил набор инструментов wasm и cargo make:

 rustup target add wasm32-unknown-unknown
  

Ниже приведен мой список инструментов:

 stable-x86_64-pc-windows-gnu
stable-x86_64-pc-windows-msvc
nightly-x86_64-pc-windows-msvc (default)
1.30.0-x86_64-pc-windows-msvc
  

Вот моя структура папок:

 Project root
├───backend           <-- rocket backend
|   ├───Cargo.toml
│   └───src
│       ├───bin
│       └───db
├───frontend          <-- yew frontend
│   ├───pkg
│   ├───src
|   ├───Cargo.toml
|   └───Makefile.toml
├───src
├───Cargo.toml
└───Makefile.toml
  

Это rootdirCargo.toml :

 [package]
name = "sentinel"
version = "0.1.0"
authors = ["zachdelano <email>"]
edition = "2018"

[workspace]
members = ["backend", "frontend"]
  

Это rootdirMakefile.toml :

 [env]
CARGO_MAKE_EXTEND_WORKSPACE_MAKEFILE = "true"

[tasks.default]
clear = true
dependencies = ["build"]
  

Это rootdirfrontendCargo.toml :

 [dependencies]
sentinel = { path = ".." }
yew = "0.17.3"
wasm-pack = "0.9.1"
wasm-bindgen = "0.2.68"
web-sys = "0.3.45"

[lib]
crate-type = ["cdylib", "rlib"]
  

Это rootdirfrontendMakefile.toml :

 [tasks.default]
dependencies = ["create_wasm"]

[tasks.create_wasm]
command = "wasm-pack"
args = ["build", "--target", "web", "--out-name", "package", "--dev"] 
dependencies = ["build"]
  

Ожидаемый результат

Я ожидаю, что приложение завершит сборку без ошибок при запуске cargo make . Похоже, что в руководстве по Yew указано, что больше ничего не требуется.

Фактический вывод

Я получаю множество ошибок при запуске cargo make (из корневого каталога), например:

 error[E0433]: failed to resolve: could not find `unix` in `os`
  --> C:UsersZach.cargoregistrysrcgithub.com-1ecc6299db9ec823dirs-1.0.5srclin.rs:41:18
   |
41 |     use std::os::unix::ffi::OsStringExt;
   |                  ^^^^ could not find `unix` in `os`
  

Посмотрите весь список ошибок.

Это что-то вроде цепочки инструментов? Как я могу это исправить?

Выполняется rustup update

В результате выполнения я получаю следующий вывод rustup update .

Теперь, когда я запускаю cargo make из корневого каталога, я получаю разные ошибки:

 error[E0432]: unresolved import `crate::sys`                                                                                                                                                                                     
  --> C:UsersZach.cargoregistrysrcgithub.com-1ecc6299db9ec823socket2-0.3.15srcsocket.rs:23:5
   |
23 | use crate::sys;
   |     ^^^^^^^^^^ no `sys` in the root
  

Смотрите полный список ошибок.
В репозитории изменен некоторый код.

Ответ №1:

Проблема заключалась в том, что я пытался установить wasm-pack и web-sys . Я не знаю, почему это было проблемой, но когда я прокомментировал их и запустил cargo make , все было построено просто отлично. Я также удалил target и повторно cargo make запустил, чтобы убедиться.

 [package]
name = "frontend"
version = "0.1.0"
authors = ["zachdelano <email>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
sentinel = { path = ".." }
yew = "0.17.3"
wasm-bindgen = "0.2.68"
# wasm-pack = "0.9.1"
# web-sys = "0.3.45"

[lib]
crate-type = ["cdylib", "rlib"]