You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Angular v18.2集成Gun Web3库遭遇模块缺失错误,无vite.config.js情况下的解决方案咨询

Angular v18.2集成Gun Web3库遭遇模块缺失错误,无vite.config.js情况下的解决方案咨询

我正在尝试把Gun Web3库集成到Angular v18.2项目中,但遇到了如下错误:

[vite] Internal server error: Cannot find module './lib/text-encoding'
Require stack:

我的项目里Vite是Angular内置的,package.jsontsconfig.jsonangular.json里都没有单独配置Vite。之前把登录逻辑放在app.component.ts里一切正常,但是当我把逻辑迁移到单独的登录组件后,这个错误就出现了。

Gun官方针对Vite的问题给出了一个解决方案,但它需要修改vite.config.js文件——而Angular v18.2项目里根本没有这个文件,这就让我犯难了。

下面是我的login-page.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版本是:"gun": "^0.2020.1240"

另外,我尝试过运行npm ci,结果又出现了新的错误:在登录组件的构造函数里提示“No suitable injection token for parameter 'router' of class 'LoginPageComponent'. Consider using the @Inject decorator to specify an injection token.(-992003)”,不过这个可能是次要问题,我现在主要想解决Gun和Vite的模块缺失问题。

有没有大佬知道,在Angular 18.2里,怎么等效实现Gun官方要求的Vite配置?或者有没有其他办法绕过这个./lib/text-encoding的模块找不到的问题?

备注:内容来源于stack exchange,提问作者Aethillium

火山引擎 最新活动