V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
V2EX  ›  nekochyan  ›  全部回复第 2 页 / 共 13 页
回复总数  250
1  2  3  4  5  6  7  8  9  10 ... 13  
2025 年 8 月 14 日
回复了 llej 创建的主题 程序员 如何实现模块化加载的前端和后端代码?
听起来意思是依赖注入,其他模块想用另一个模块都通过基座包去获取;我们项目大概是这么实现的:每个模块是一个文件夹,文件夹下只可引用基座包,里面调用基座包注入自身模块,这样剪切文件夹就实现了新增和移除模块

至于强类型支持就需要 ts 的类型体操了,可以写一个模块生成器实现在依赖注入,声明其注入的一定是某个类型

下面是我们项目的简单示例

模块生成器文件:

// 声明所有模块都是 TypeModules 类型
declare global {
interface TypeModules { }
}


class _coreModule {
static instance: _coreModule;
moduleMap: { [key: string]: any } = {};
static initInstance(): _coreModule {
return _coreModule.instance = new _coreModule();
}
setModule<T extends keyof TypeModules>(name: T, module: TypeModules[T]) {
this.moduleMap[name] = module;
}
getModule<T extends keyof TypeModules>(name: T): TypeModules[T] {
return this.moduleMap[name] as TypeModules[T];
}
}
export const coreModule = _coreModule.initInstance();


/**
* @desc: 模块生成器
* @param {T} name 模块名称
* @param {new () => TypeModules[T]} moduleClass 模块类
* @return {TypeModules[T]} 模块实例
*/
export function ModuleGenerate<T extends keyof TypeModules>(name: T, moduleClass: new () => TypeModules[T]): TypeModules[T] {
// eg:具体的实现; coreModule 保存注入依赖
const instance = new moduleClass();
coreModule.setModule(name, instance);
return instance;
}



测试文件:
declare global {
interface TypeModules {
/**
* @desc: [模块] 测试模块
*/
testData: TestDataClass
}
}

export class TestDataClass {
// 具体实现
}

// 注入
const testData = ModuleGenerate('testData', TestDataClass);


其他 文件或模块中

// testData 类型就是 TestDataClass ,完全不需要引入 测试模块的文件,但当测试模块删除时,这段代码编译时会报错
let testData = coreModule.getModule('testData');
2025 年 8 月 13 日
回复了 Joomaen 创建的主题 macOS macOS 26 public beta 系统数据 100 多 G
我的 MacOs40G ,系统数据 150G ,清理都清理不掉
2025 年 8 月 7 日
回复了 xiafuxin 创建的主题 问与答 V2 怎么输入 emoji,谁教教我,谢谢
这个不应该是输入法的事吗,每个输入法有不同的快捷键🤔
据我所知国内小游戏基本都是 cocos 开发,基本说明问题了
2025 年 6 月 18 日
回复了 pweng286 创建的主题 分享发现 平板长时间不充电电池饿死了
赶紧给我的小米 6 充一充,看了看三月没开机还有 45%电
2025 年 6 月 17 日
回复了 tedaz 创建的主题 问与答 大家有过突然一夜未眠的经历吗
我晚上喝可乐就会这样,有一次喝太多第二天七八点才睡着
2025 年 4 月 21 日
回复了 Justin3go 创建的主题 问与答 你用的什么视频录制软件?
用 obs 推流录屏真的很爽,之前经常跟朋友 YY 聊天老是漏麦,obs 直接配置,不捕捉 YY 声音
2025 年 4 月 10 日
回复了 coldmonkeybit 创建的主题 健康 鼠标滚轮滚到食指关节很疼有什么办法
我换了 mac 的触摸板 3 年了,有明显好转
现在我用 JB 的唯一理由是他的 git 好用,但是我发现完全可以下载个免费 pycharm 当 git 工具使用,所以转向 vs code 了,只有使用需要使用 git 时才打开一下 pycharm
2025 年 3 月 5 日
回复了 sngxx 创建的主题 git 请教一个开发流程中 GIT 解决冲突的问题
我比较喜欢 feature 开发完成后,master rebase 到 feature ,然后 feature 再 merge 到 master ,冲突都在 feature 上解决了
2025 年 2 月 11 日
回复了 yuanyao 创建的主题 职场话题 八小时工作制不包括吃饭时间?
第一次见到晚餐回来还要继续正常上班的,难道不是下班才是去晚餐吗,当然加班另算
2025 年 1 月 21 日
回复了 felix9ia 创建的主题 Web Dev 应不应该把主键 id 暴露在 url 上?
我们有个项目是直接用 ID 异或一个较大的数给前端就行了,然后再异或回来
2025 年 1 月 2 日
回复了 IurNusRay 创建的主题 硬件 显卡坏了,准备买个二手的
如果真的喜欢玩游戏,为啥不买个好点的显卡呢
我玩基三的时候是过图掉线,但不过图挂机又不会掉线,不知道什么原理;找师傅路由器光猫换了一遍还是不行
2024 年 12 月 6 日
回复了 Karte 创建的主题 程序员 前端真的可以这么水吗?
有一说一,作为前端我工作了七年确实一次也没有用到,基本都忘光了
2024 年 12 月 4 日
回复了 usax 创建的主题 程序员 各位程序员,你们日常「中文与英文间添加空格」吗
当然是看情况加,比如有事 call 我、合并到 beta ,这种加他干嘛,别人也不会复制什么的;像账号名称是:nekochyan404 ,这种才会加,而且会加冒号标注,也方便别人复制
1  2  3  4  5  6  7  8  9  10 ... 13  
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4434 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 44ms · UTC 10:04 · PVG 18:04 · LAX 03:04 · JFK 06:04
♥ Do have faith in what you're doing.