【发布时间】:2018-06-05 21:12:28
【问题描述】:
最近偶然发现了 dynamic import proposal 和这个 Youtube video 。将它用于 React 中组件的按需导入是一个好主意。
当import 将字符串文字作为运行时变量传递时,我无法“解析”路径。
例如:
<div>
<button onClick={this._fetchComp.bind(this, "../component/Counter")}>Get Async Comp</button>
</div>
尝试了 _fetchComp 的多个选项,但传递参数似乎不起作用。尝试的不同选项的细分。
- 模板字符串 不起作用:点击时出现以下错误
错误:找不到模块“../components/Counter”。在 webpackAsyncContext (^.*$:53)
代码
_fetchComp(res) {
import(`${res}`).then(() => {
console.log("Loaded")
},(err)=>{
console.log("Error",err)
})}
- Variabes 不起作用:在 webpack 构建过程中出现错误,时间为 55:12-23
关键依赖:依赖的请求是一个表达式
**Code**
_fetchComp(res) {
import(res).then(() => {
console.log("Loaded")
},(err)=>{
console.log("Error",err)
})}
-
String literal Works:只传递纯字符串文字。单击时,我可以在开发工具网络选项卡中看到正在下载的块
代码
_fetchComp(res) { import("../components/Counter").then(() => { console.log("Loaded") },(err)=>{ console.log("Error",err) })}
按照规范,
import() 接受任意字符串(使用运行时确定的模板 此处显示的字符串),而不仅仅是静态字符串文字。
所以我希望字符串文字能起到作用,但事实并非如此。
我在flow issue tracker 上遇到了类似的问题。但提议的解决方案再次提倡使用字符串文字。
我会给大家留下一个CodeSandbox 链接。
【问题讨论】:
-
嗯,这只是一个提议(绝对不是 ES6!),是什么让你认为 webpack 已经支持它了?此外,它还需要支持动态模块加载的客户端设置。
-
@Bergi :“webpack 已经支持它了” - 啊担心这个! :( 。我在本地使用
create-react-app进行了试验,这不是一个很好的客户端设置来破解动态导入吗?
标签: ecmascript-6 dynamic-import