首页 > 解决方案 > Webpack导入所有文件并将其导出为数组

问题描述

所以我正在使用 Graphql 并且一直在进行模式拼接,我的索引文件看起来非常长。举个小例子:

import userSchema from "./user";
import hobbiesSchema from "./hobbies";
import jobSchema from "./job";
import petSchema from "./pet";


const linkSchema = gql`
  scalar Date

  type Query {
    _: Boolean
  }
  type Mutation {
    _: Boolean
  }
  type Subscription {
    _: Boolean
  }
`;

export default [
  linkSchema,
  userSchema,
  petSchema,
  jobSchema,
  hobbiesSchema,
];

如果我计划再添加 20 个模式,这将变得非常长!我想要一种将所有文件添加到目录中然后能够导出它们的方法。所以我已经看到很多相同答案的实例这样做:

const context = require.context('.', true, /^\.\/(?!index\.js).*\.js$/, 'sync');

let schemas = {};
context.keys().forEach(module => {
  schemas[module] = context(module);
});

因此,我尝试将其放入一个数组中,并将其导出为我所有模式的数组,推动数组中的每个模块并将其导出到底部。我认为这会起作用,但它不起作用,我想知道为什么?我得到一个错误。

我的模式以以下形式定义和导出

export default gql`
  //schema stuff
`

我尝试为解析器单独做同样的事情,因为索引文件看起来与架构索引文件几乎完全相同,并且我收到错误“[错误:“默认”在解析器中定义,但不在架构中]”

标签: node.jswebpackgraphql

解决方案


显然,我所要做的就是将 .default 添加到上下文(模块)!

const context = require.context('.', true, /^\.\/(?!index\.js).*\.js$/, 'sync');
let resolvers = [];

context.keys().forEach(module => {
  resolvers.push(context(module).default)
});

export default resolvers

推荐阅读