【发布时间】:2020-05-07 21:53:53
【问题描述】:
对于每个主要的React 组件,我在它旁边都有一个组件文件夹。在每个主要组件中,我必须分别import components 文件夹中的每个组件。我正在尝试设置一些代码,自动将组件文件夹中的所有组件放入该主要组件文件/范围/环境中。
const app = require.context(".", true, /^\.\/.*\jsx$/)
const mainComponentFile = app('./path/to/file')
const components = require.context('./path/to/file/components', true, /^\.\/.*\jsx$/)
components.keys().forEach((x) => {
mainComponentFile.require(x) // I know this doesn't work, my question is how can I do this?
})
我可以看到[[Scopes]] 中定义的每个模块的闭包,但我无法以编程方式访问该对象(我已在其他 SO 问题中阅读了原因)。
更新
我有我正在寻找的确切解决方案,并将在周末更新这个问题的答案。简而言之,您需要创建一个Webpack 加载程序,通过以编程方式将import 字符串放入其中来更改源代码。它不会编辑文件本身,只是在将其发送给 webpack 编译之前以字符串格式的代码源。整体解决方案并不太复杂,但为了您的理智,除非您想做一些高度动态的事情,否则请选择@xadm 在 cmets 中提到的解决方案:babel-plugin-import-directory
【问题讨论】:
-
export * from './components';? -
感谢您的评论。我认为这仍然需要@Mikkel 的回答中提到的脚本文件。如果是这样,它只会加载
components文件夹内容(如果成功,我只能用require.context执行此操作),而不是将它们注入mainComponentFile词法范围,这就是我正在尝试的去做。谢谢。 -
可能是一些 CLI 工具,例如 github.com/sysgears/apollo-universal-starter-kit/tree/…
-
非常有创意的解决方案,但我真的想找到适合
Webpack工作方式的东西。我真的花了一天时间检查它的文档、代码和内部工作原理,里面的东西非常复杂。 -
您可能正在寻找npmjs.com/package/babel-plugin-import-directory ...
no-unused-varseslint 警告?
标签: javascript reactjs webpack import require