问下大佬们,webpack 的动态导入怎么实现比较好?

2020-10-11 11:29:05 +08:00
 wszgrcy

不是 import 或者说不是你们想的 import

如何实现真正的动态?

是否需要其他的配置配合

不知道大佬们有没有这种技术,帮忙提个醒就行了

2469 次点击
所在节点    webpack
10 条回复
randyo
2020-10-11 11:36:25 +08:00
自己写一个函数用来直接插入 script 标签吧
wszgrcy
2020-10-11 11:37:31 +08:00
@randyo 我知道这种方式直接导出变量就行……但是感觉不优雅
tyx1703
2020-10-11 12:06:53 +08:00
wszgrcy
2020-10-11 12:38:53 +08:00
@tyx1703 externals 在打包时名字已经定义好了吧?
mscststs
2020-10-11 13:14:59 +08:00
webpack 的 external 不知道为啥不符合你的要求。

external 是支持从 window 上获取的,如果你需要导入一个未知的依赖,却又不依赖这个模块的代码,那 1L 、3L 的做法就够了。

如果你期望获取一个值却又不能保证取值的时机,那就自己设计一套取值方法,约定好把值挂在 window 上或者某个地方。如果先加载了 js 但是依赖的值还没载入,就 js 提供一个回调允许后期填入这个值。

之前在做一个编辑器,允许异步加载插件就是这样做的。

插件自己去挂载到 window 并且检查有没有 callback,有就自动调用。

可以参考 Vue 的组件注册的流程,Vue.use()
wszgrcy
2020-10-11 13:18:50 +08:00
@mscststs 不是说 1l 3l 没用,1l 的我的意思是不优雅,因为 webpack 内部做的引入,很多东西都处理好了,而自己写的话还要搞一套.3l 是的 externals 在打包时就替换了,也是一个常量,即使是我指定多个 externals,也是有限个.不能达到无限个
mscststs
2020-10-11 13:24:39 +08:00
@wszgrcy 没有挑战你的意思,确实依赖 webpack 会导致依赖的内容是固定的

没有特别的要求的话可以考虑一下我上面的做法,在 Runtime 通过特定 API 注入就可以了
noe132
2020-10-11 13:53:58 +08:00
如果你的 import 不能被静态分析,webpack 会尝试对所有文件都单独生成一个 chunk,会导致打包速度异常缓慢,并且最终输出体积异常大。

就算你要动态 import,正确的做法是先在 if 里判断变量,然后再 import 相应的模块。
wszgrcy
2020-10-11 18:09:10 +08:00
@mscststs @noe132 准备写一个类似 webpackJsonP 的插件,自己构建模块在启动是的自解析
MiracleKagari
2020-10-11 22:24:14 +08:00
import ( prefix+var )

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

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

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

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

© 2021 V2EX