【问题标题】:How to export multiple components如何导出多个组件
【发布时间】:2020-06-24 13:36:51
【问题描述】:

我有一个共享文件夹,我将其公开为一个 npm 模块。 在该共享文件夹中,我有一个带有 index.js 的组件文件夹,将它们导出为默认值:

export { default as AqMegaMenu } from "./megaMenu/AqMegaMenu.vue";
export { default as AqDetailsCard } from "./AqDetailsCard.vue";
export { default as AqDoughnutChart } from "./charts/AqDoughnutChart.vue";
...

我的库入口文件是 main.js,我想通过它公开我的整个组件,所以我将它们导入到其他项目中,如下所示:

import {Comp1, Comp2} from "@my/shared"

目前我在main.js中一一导出:

export { default as AqDetailsCard } from "./components/AqDetailsCard.vue";
...

但我想知道是否有办法使用它的 index.js 导出整个组件目录 并且仍然能够将它导入到我上面显示的其他项目中。

【问题讨论】:

  • this 回答你的问题了吗?

标签: javascript webpack ecmascript-6


【解决方案1】:

你可以试试这样的


import camelCase from 'lodash/camelCase'
const requireModule = require.context('./components', true, /\.vue$/)
const modules = {}

requireModule.keys().forEach(filename => 
{
    const moduleName = camelCase(fileName.match(/([^\\\/]+)\.vue$/)[1]);
    modules[moduleName] = requireModule(fileName)
})
export default modules

【讨论】:

  • 我把它放在 main.js 中吗?这是否允许我按照我的意愿导入它们:import {Comp1, Comp2} from "@my/shared"?和这样做有什么不同:从“./components”导入*作为模块,然后导出它?
  • import 不适用于文件夹 - 仅适用于文件。因此,如果您已经在 ./components(whatever-extension-it-has) 中导出多个实体 - 在您执行 import * as modules 之后,它们将作为 modules 中的键可用。上面的 sn -p 会遍历 VUE 文件的文件夹(及其子文件夹)并全部导入,然后在default 对象下导出。
  • 我在导出所有模块的组件中有一个 index.js 文件,所以这样做import * as components from './components' 基本上会给我一个包含所有组件的对象
  • 可能有一些误解。显然import * as components from "./components/index.js" 会将所有组件作为一个对象 - 但您的问题是如何自动而不是手动生成该对象。还是我错了?
  • 仔细阅读,问题是如何从 main.js 导出它们,以便我可以将它们导入为import {Comp1} from @my/shared。我认为您的解决方案对我没有帮助
猜你喜欢
  • 2021-04-23
  • 2016-12-02
  • 2021-04-28
  • 2018-10-08
  • 2018-05-30
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 2020-10-20
相关资源
最近更新 更多