模块化阿波罗服务器上的导入问题

问题描述

我在nextJS上有一个完全工作的模块化阿波罗服务器(基于本文https://www.apollographql.com/blog/modularizing-your-graphql-schema-code-d7f71d5ed5f2/),基本上是在做我的typedef数组,并使用lodash的merge函数合并解析器...到目前为止,一切都很好。 ..该函数提供了一个makeExecutableSchema函数,该模式将进入服务器...并且效果很好...

问题是我正在尝试将服务器移到nextJS之外...并且当我尝试创建新项目并执行yarn init或npm init ...时,请安装依赖项,然后尝试将所有架构文件复制粘贴到新的npm init项目我所有的导入都搞砸了,我开始遇到所有这些错误,例如:

在我拥有的nextJS中(这只是在nextJS中起作用):

import { merge } from "lodash";

在新的节点项目中,它说在lodash中找不到合并... 或模块是commonjs并且无法执行命名导入... 或者如果我使用require进行导入,它说ReferenceError:require未定义,我认为这应该是由于节点希望在浏览器上运行此操作,但是我不知道如何指定此操作不会在浏览器上运行,因为它很简单一个旨在模块化阿波罗模式的js文件...

我只是不明白为什么所有导入语句在Next中都可以正常工作,但是当我在纯节点中启动apollo服务器时,每个导入都给出了很多错误...我通过在末尾添加扩展名来修复了一些错误导入文件名(nextJS中不需要的东西),或者在要导入的包的末尾添加“ / index” ...

有没有一种方法可以使导入的行为像Next中一样???但是在一个新的nodeJS项目中?

任何帮助或方向将不胜感激

解决方法

答案是:

使用Babel,安装NPM或YARN

"@babel/core"
"@babel/node"
"@babel/preset-env"

将.babelrc文件添加到项目的根目录:

{
  "presets": ["@babel/preset-env"]
}

要运行主文件,请使用package.json中的脚本,如:

"start": "nodemon --exec babel-node index.js"

这将允许执行现代JavaScript:D