Typescript 动态导入模块要怎么做?

2019-02-16 18:12:31 +08:00
 Sparetire

想要在 typescript 中扫描一个目录, 然后导入该目录下的所有文件, 但是这样的话, 文件路径是运行时确定的, 有什么办法吗?

8223 次点击
所在节点    JavaScript
13 条回复
azh7138m
2019-02-16 18:20:11 +08:00
按照 js 的模式,就 require ;
或者做 code generate ?文件在打包的时候就要确定有哪些文件
VDimos
2019-02-16 18:21:29 +08:00
用 webpack 才能实现,和 js 一样,用 import + async 或者 require 实现
menyakun
2019-02-16 19:03:05 +08:00
import('./dir/' + filename).then(...) webpack 会帮你好这件事,但这样的话这个目录下所有文件都会打包到 bundle 里面
Sparetire
2019-02-16 19:03:07 +08:00
@azh7138m require 的话会丢失类型吧, 需要手动 as 吗? 这个路子好像可以...
Sparetire
2019-02-16 19:04:16 +08:00
@menyakun
@VDimos
是 Node 环境, 其实我就是想扫描一个目录下的 router 注册下
azh7138m
2019-02-16 19:43:58 +08:00
@Sparetire 那没有必要强类型,或者说这里强类型的意义何在。。。
加载路由肯定是框架做的吧,控制器算业务的吧,按道理也不会耦合,用 any 就行,或者直接当 baseController 用就行吧
vghdjgh
2019-02-16 19:54:55 +08:00
ES static import 必须是确定的模块路径,ES dynamic import 还不被 nodejs 默认支持( Experimental https://nodejs.org/dist/latest-v11.x/docs/api/esm.html ),所以默认只能用 require,需要类型信息的话用 as 来标注
momocraft
2019-02-16 19:58:54 +08:00
文件名都不知道類型自然更不知道
你仍然可以 require, 只是 require 得到的東西自己解決類型
Sparetire
2019-02-16 20:01:45 +08:00
@azh7138m emm, 好像也是...那就这样吧
只是想自己拿着 koa 照着 egg 撸一下, koa 不帮我加载路由咯
azh7138m
2019-02-16 20:35:06 +08:00
@Sparetire 其实也可以不用扫
写一个 router 的装饰器来收集这些东西也是可以的
azh7138m
2019-02-16 20:36:46 +08:00
哦,想错了,node 上面文件还没加载进来,忽略我吧
VDimos
2019-02-16 20:46:39 +08:00
静态类型必须在编译时确定,没有指定路径是无法确定的,所以不能实现你的需求
thomaspaine
2019-02-17 00:50:53 +08:00
@Sparetire require 会丢类型,但是你需要批量 require 的地方,比如统一注册路由信息,需要类型信息吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/535670

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX