NodeJS 无法从非EcmaScript模块导入命名导出XXXX(仅默认导出可用)

czq61nw1  于 2023-01-01  发布在  Node.js
关注(0)|答案(6)|浏览(282)

我有一个客户端-服务器设置,其中客户端(create-react-app)运行在localhost:3000上,服务器是一个构建在node上的express服务器,我正在尝试构建graphql schema-resolvers设置。
我可以在服务器上导入.graphql文件,但是在客户端,我使用的是graphql-tools的设置。
当我试图在前端构建模式解析器时,我导入

import { GraphQLFileLoader } from '@graphql-tools/graphql-file-loader';
import { addResolversToSchema } from '@graphql-tools/schema';
import { loadSchema } from '@graphql-tools/load';

...导致此错误:
./node_modules/@graphql-tools/graphql-file-loader/index.mjs无法从非EcmaScript模块导入命名导出“AggregateError”(仅默认导出可用)
经过研究,我发现这是一个与webpack有关的问题。
这个问题有什么解决办法吗?

eagi6jfj

eagi6jfj1#

解决方案是确保在项目目录的根目录下有一个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

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

o7jaxewo

o7jaxewo2#

确保你的package.json依赖项上有"react-scripts": "^5.0.1",然后使用命令npm install.由于某种原因,我的react-scripts版本是3.x.x,这就是问题的原因.我也使用了cra.

ssm49v7z

ssm49v7z3#

下面是glahql库的另一个示例

module.exports = {
    chainWebpack: config => {
        // ...other chains
        config.module // fixes https://github.com/graphql/graphql-js/issues/1272
            .rule('mjs$')
            .test(/\.mjs$/)
            .include
                .add(/node_modules/)
                .end()
            .type('javascript/auto');
    },
    configureWebpack: {
        resolve: {
            // .mjs needed for https://github.com/graphql/graphql-js/issues/1272
            extensions: ['*', '.mjs', '.js', '.vue', '.json']
        }
    }
}
wd2eg0qa

wd2eg0qa4#

试试这个,希望会有帮助

mkdir webpack-test
cd webpack-test
npm init -y
npm install --save graphql webpack webpack-cli
./node_modules/.bin/webpack-cli index.js
wwtsj6pe

wwtsj6pe5#

为了澄清爱德华的回答:
1.将.mjs添加到 webpack.config.js 中的extensions数组中,这样可以确保在构建时找到相关文件。
1.将{ test: /\.mjs$/, include: /node_modules/, type: 'javascript/auto' }添加到 webpack.config.js 中的rules数组中。这会使Webpack将.mjs文件识别为模块,并更改导入时处理它们的方式。

dhxwm5r4

dhxwm5r46#

我在每个**@graphql-tools**子文件夹(merge、mock和schema)中手动将index.mjs重命名为index.mjs_old,并且成功了。

相关问题