【发布时间】:2020-01-20 11:55:44
【问题描述】:
我正在构建一个 gatsby 站点,其中每个页面都是从模板生成的,但是每个页面都需要不同的模块导入。
具体来说,每个页面都包含一个observablehq notebook,这些都是从可观察到的模块中导出的。见here。
页面是从json 文件动态生成的,例如:
[
{ "path": "page1",
"modulename": "gatsby-test"
},
{
"path": "page2",
"modulename": "gatsby-test-2"
}
]
这是在gatsby-node.js 中使用createPages 完成的。
我已经yarn added 每个笔记本项目,例如yarn add https://api.observablehq.com/@robinl/gatsby-test.tgz.
我正在尝试编写一个将模块名称作为属性的组件,然后从this.props 的内容中加载正确的模块。
我的组件的轮廓如下所示:
class ImportedNotebook extends Component {
componentDidMount() {
var promise = import(this.props.modulename).then(function(themodule) {
// do stuff here
})
}
render() {
return (<div>blah</div>);
}
}
这不起作用 - 我在使用 gatsby develop 访问本地主机上的页面时收到 Unhandled Rejection (Error): Cannot find module 'gatsby-test-2' 错误。
但是,如果我将 this.props.modulename 替换为 "gatsby-test-2",它就可以正常工作。
有没有办法从变量中动态加载模块?或者更适合解决这个问题的不同方法?
【问题讨论】:
-
我觉得this 可能是相关的。