问题描述
我在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