【问题标题】:Dynamic Webpack require contents from folder动态 Webpack 需要文件夹中的内容
【发布时间】: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-vars eslint 警告?

标签: javascript reactjs webpack import require


【解决方案1】:

我会设置一个构建脚本,根据它找到的组件文件为您生成所有导入。

你可以生成这样的代码行,只要你在文件名和组件名之间有一个约定

export { Card } from './components/card';
export { Button } from './components/button';

然后你可以将它们导入到你的主要组件中,并随意使用它们

这有帮助吗?

【讨论】:

  • 感谢您的回答。我确实考虑过这个,也许它是更好的解决方案?我将看看是否有办法按照我建议的方式进行操作,否则您的解决方案可能会更直接。谢谢!
  • 经过大量研究,我认为这可能是正确的方法。但是我将把它再开放两天,看看是否有人在接受之前使用建议的方法解决它。谢谢!
猜你喜欢
  • 2017-01-20
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 2017-01-04
  • 2018-08-26
  • 1970-01-01
  • 2011-01-14
  • 2018-05-03
相关资源
最近更新 更多