无法从非 EcmaScript 模块导入命名导出 XXXX(仅提供默认导出)

Elr*_*ano 35 node.js express reactjs graphql graphql-tools

我有一个客户端-服务器设置,其中客户端(create-react-app)在 localhost:3000 上运行,服务器是一个构建在节点上的快速服务器,我正在尝试构建 graphql 模式解析器设置。

我可以在服务器上导入 .graphql 文件,但是,在客户端,我通过graphql-tools使用此设置。

当我尝试在前端构建架构解析器时,我正在导入

import { GraphQLFileLoader } from '@graphql-tools/graphql-file-loader';
import { addResolversToSchema } from '@graphql-tools/schema';
import { loadSchema } from '@graphql-tools/load';
Run Code Online (Sandbox Code Playgroud)

...这会导致此错误:

./node_modules/@graphql-tools/graphql-file-loader/index.mjs 无法从非 EcmaScript 模块导入命名导出“AggregateError”(仅提供默认导出)

经过研究,我发现这是与webpack相关的问题。

这个问题有解决办法吗?

小智 16

解决方案是确保项目目录的根目录中有一个 webpack.config.js 文件,如下所示:

const config = {
  mode: 'production', // "production" | "development" | "none"
  resolve: {
    extensions: ['*', '.mjs', '.js', '.json']
  },
  module: {
    rules: [
      {
        test: /\.mjs$/,
        include: /node_modules/,
        type: 'javascript/auto'
      }
    ]
  }
}

module.exports = config
Run Code Online (Sandbox Code Playgroud)

你也可以看看https://github.com/vanruesc/postprocessing

  • “看起来像这样”像什么?此代码块中的哪些选项相关?他们在做什么?错误消息到底是什么意思? (51认同)
  • 我添加了文件,错误仍然存​​在 (11认同)
  • 所提供的链接有何关联? (5认同)
  • 很抱歉,这个答案与其分数相反,是 NAA 的学校例子。 (2认同)

小智 16

确保您有"react-scripts": "^5.0.1"package.json 依赖项,然后使用 command npm install。由于某种原因,我的反应脚本版本是 3.xx,这导致了问题。我也用过cra。

  • 这样做会使之前从 3.xx 安装(并在 package.json 中列出)的大多数其他软件包变得不受支持。 (2认同)

Rya*_*edy 7

为了澄清爱德华的答案:

  1. 添加.mjswebpack.config.jsextensions中的数组。这确保了可以在构建时找到相关文件。
  2. 添加{ test: /\.mjs$/, include: /node_modules/, type: 'javascript/auto' }webpack.config.jsrules中的数组。这会导致 Webpack 将文件识别为模块,并更改处理导入的方式。.mjs