使用 webpack 3 和 react,我可以导入这样的文件:
import(`src/Main.sass`).then(...do something)
我有一个用于根据查询字符串更改module内容的导入文件的加载程序,我可以成功导入这样的文件:
import(`src/Main.sass?theme=themename`).then(...do something)
但是当查询字符串是一个变量时:
const themeQuery = '?theme=themename';
import(`src/Main.sass${themeQuery}`).then(...do something);
或者
const theme = 'themename';
import(`src/Main.sass?theme=${theme}`).then(...do something);
我收到错误:
Error: Cannot find module '.src/Main.sass?theme=themename'.
我希望这能根据这里的信息工作:
完全动态的语句,例如 import(foo),将会失败,因为 webpack 至少需要一些文件位置信息。这是因为 foo 可能是系统或项目中任何文件的任何路径。import() 必须至少包含一些有关module所在位置的信息,因此可以将捆绑限制为特定目录或文件集。
和
包括可能在 import() 调用中被请求的每个module。例如,import(
./locale/${language}.json
) 将导致 ./locale 目录中的每个 .json 文件被捆绑到新的块中。在运行时,当变量语言被计算出来时,任何像 english.json 或 German.json 的文件都可以使用。
这不是一个完全动态的语句,它具有完整的文件路径(位置信息),可以在没有查询字符串的情况下毫无问题地导入。
编辑:我创建了一个可以复制的测试仓库。使用由 prop 定义的查询字符串src/Main.js
导入。当使用这种组件中,你可以看到但是,使用完整的字符串,包括查询导入时,该文件是没有问题的进口。这可以通过用作组件来查看。Main.component.sass
themeName
<Main/>
src/App.js
Cannot find module './Main.module.sass?theme=themename' error.
src/Main-no-var.js
<Main>
这是用于此示例的webpack 配置。