我正在尝试将 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):该类型没有值,因此不能用作注入令牌。
对于任何遇到类似问题的人 - 我通过从头开始重写系统来“解决”它,正如 @JamesP 所写的,他所做的并且它有效。也许由于安装了很多依赖项,其中一些依赖项彼此冲突,我不确定。
感谢@JamesP 的帮助!