为什么 web3 枪库不能与 Angular v18.2 很好地配合使用?

问题描述 投票:0回答:1

我正在尝试将 Gun web3 库合并到我的 Angular 应用程序中,但遇到以下错误:

[vite] 内部服务器错误:找不到模块“./lib/text-encoding” 需要堆栈:

我使用的是 Angular v18.2,因此 Vite 已合并到管道中,但它不包含在 package.json 中,也不包含在 tsconfig.json 中,也不包含在 angular.json 中。

一切似乎都工作正常,直到我决定将登录逻辑从主 app.component.ts 移至单独的组件中

我生成了一个新组件,将逻辑移到那里,然后错误就弹出了。这些是我通过登录从新组件导入的内容:

开发人员似乎为这个问题提供了一种解决方案(https://gun.eco/docs/Vite),但它也需要在内部进行更改 vite.config.js 在 Angular v18.2 中不可用。

这是整个登录页面.component.ts:

import { Component, OnInit } from '@angular/core';
import { PinataSDK } from "pinata-web3";
import { Router, RouterLink, RouterModule, RouterOutlet } from '@angular/router';
import { CommonModule } from '@angular/common';
import { FormBuilder, FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MetaMaskSDK } from "@metamask/sdk";
import Gun from 'gun';
import 'gun/sea';
import { LoggedUserDataService } from '../../../resources/LoggedUserDataService/logged-user-data.service';
import { env } from '../../../env';


@Component({
  selector: 'app-login-page',
  standalone: true,
  imports: [FormsModule, ReactiveFormsModule, RouterModule, CommonModule],
  templateUrl: './login-page.component.html',
  styleUrl: './login-page.component.scss'
})
export class LoginPageComponent implements OnInit{

  MetaMaskSDK : any;
  PinataSDK : any;
  UserAccount : any;

  title : string = "STF";
  accountConnected : boolean = false;
  loginNeeded : boolean = false;
  registerNeeded : boolean = false;
  myForm: FormGroup;
  routerAN : any;

  ngOnInit(): void {
      this.PinataSDK = new PinataSDK({
        pinataJwt: env.JWT,
        pinataGateway: "brown-faithful-shrimp-92.mypinata.cloud",
      });
  
      const MMSDK = new MetaMaskSDK({
        dappMetadata: {
          name: "STF",
          url: window.location.href,
        },
        infuraAPIKey: env.INFURA_API_KEY,
      });
      setTimeout(() => {
        MMSDK.init().then(() => {
          this.MetaMaskSDK = MMSDK.getProvider();   
        });
      }, 0);
    }

    
  constructor(private fb : FormBuilder, private router1 : Router, private loggeduserData : LoggedUserDataService){
      this.myForm = this.fb.group({
        password: ['']
      });
      this.routerAN = router1;
    }

  async ConnectMetaMask(){
    await this.MetaMaskSDK.request({ method: 'eth_requestAccounts' }).then((accounts : any) => {    
      this.UserAccount = accounts[0];
    });

    if(this.UserAccount != null){
      const gun = Gun();
      this.accountConnected = true;

      gun.get(`~@${this.UserAccount + "STF"}`).once(data => {
        console.log(data);
        if (data) {
          this.loginNeeded = true;
        } else {
          this.registerNeeded = true;
        }
      });
    }
  }

  async Login(){
    const gun = Gun();
    const user = gun.user();
    const SEA = Gun.SEA;
    
    if(this.loginNeeded){
      user.auth(this.UserAccount + "STF", this.myForm.get('password')?.value, (ack) =>{
        if ('err' in ack) {
          // Niepoprawne hasło
        } else {
          console.log("zalogowano");
          this.loggeduserData.loggedUserWalletAddress = this.UserAccount;
          this.loggeduserData.loggedUserWalletAddressSTF = this.UserAccount + "STF";
          this.routerAN.navigate(['/dashboard']);
        }
      });
    }
    else{
      user.create(this.UserAccount + "STF", this.myForm.get('password')?.value, ack => {
        if (ack) {
          console.log('Error:', ack);
        } else {
          console.log('User created successfully:', ack);
        }
      });
    }
  }
}

当我在运行

ng serve
后尝试打开应用程序时,发生错误。 这些是我遇到的所有错误:

    [vite] Error when evaluating SSR module /@fs/C:/Users/aethi/source/repos/SpaceTradeFedeartion/STF_UI/.angular/cache/18.2.12/SpaceTradeFederationUI/vite/deps_ssr/gun_sea.js?v=7542137e:
    |- Error: Cannot find module './lib/text-encoding'
    Require stack:
    - C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-LIXJWMGQ.js
        at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
        at Module._load (node:internal/modules/cjs/loader:1051:27)
        at Module.require (node:internal/modules/cjs/loader:1311:19)
        at Module.require (node:internal/modules/helpers:179:18)
        at USE (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:14:22)
        at eval (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:237:15)
        at eval (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:15:11)
        at eval (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:259:9)
        at node_modules/gun/sea.js (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:1947:7)
        at Module.__require2 (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-LIXJWMGQ.js:56:50)
    
    17:09:49 [vite] Error when evaluating SSR module /main.server.mjs:
    |- Error: Cannot find module './lib/text-encoding'
    Require stack:
    - C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-LIXJWMGQ.js
        at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
        at Module._load (node:internal/modules/cjs/loader:1051:27)
        at Module.require (node:internal/modules/cjs/loader:1311:19)
        at Module.require (node:internal/modules/helpers:179:18)
        at USE (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:14:22)
        at eval (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:237:15)
        at eval (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:15:11)
        at eval (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:259:9)
        at node_modules/gun/sea.js (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:1947:7)
        at Module.__require2 (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-LIXJWMGQ.js:56:50)
    
    17:09:49 [vite] Internal server error: Cannot find module './lib/text-encoding'
    Require stack:
    - C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-LIXJWMGQ.js
          at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
          at Module._load (node:internal/modules/cjs/loader:1051:27)
          at Module.require (node:internal/modules/cjs/loader:1311:19)
          at Module.require (node:internal/modules/helpers:179:18)
          at USE (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:14:22)
          at eval (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:237:15)
          at eval (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:15:11)
          at eval (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:259:9)
          at node_modules/gun/sea.js (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-5BFEBUKD.js:1947:7)
          at Module.__require2 (C:\Users\aethi\source\repos\SpaceTradeFedeartion\STF_UI\.angular\cache\18.2.12\SpaceTradeFederationUI\vite\deps_ssr\chunk-LIXJWMGQ.js:56:50)

这是枪的版本:

"gun": "^0.2020.1240",

使用

npm ci
只在登录页面构造函数中给了我一个新错误: “LoginPageComponent”类的参数“router”没有合适的注入令牌。 考虑使用 @Inject 装饰器来指定注入令牌。(-992003) login-page.component.ts(54, 58):该类型没有值,因此不能用作注入令牌。

javascript angular vite web3js gun
1个回答
0
投票

对于任何遇到类似问题的人 - 我通过从头开始重写系统来“解决”它,正如 @JamesP 所写的,他所做的并且它有效。也许由于安装了很多依赖项,其中一些依赖项彼此冲突,我不确定。

感谢@JamesP 的帮助!

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.