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.json、tsconfig.json和angular.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




