将代码从 ES5 转换为 ES6 并导出未按预期工作
Posted
技术标签:
【中文标题】将代码从 ES5 转换为 ES6 并导出未按预期工作【英文标题】:Converting code from ES5 to ES6 and export is not working as expected 【发布时间】:2018-11-09 10:45:07 【问题描述】:在尝试将一些 GraphQL 代码从 ES5 转换为 ES6 时出现以下错误:
_graphql2.default is not a constructor
这是新的 ES6 代码:
import GraphQLList from 'graphql'
import ConfigModel from '../../models/config'
import configType as ConfigType from '../types/config'
// Query
export default queryType =
type: new GraphQLList(ConfigType),
description: "The configuration for the home 'page'",
resolve: function ()
const config = ConfigModel.find()
if (!config)
throw new Error('Error')
return config
ES5 代码如下所示:
var GraphQLList = require('graphql').GraphQLList;
var ConfigModel = require('../../models/config');
var ConfigType = require('../types/config').configType;
// Query
exports.queryType =
type: new GraphQLList(ConfigType),
description: 'The configuration for the home \'page\'',
resolve: function ()
const config = ConfigModel.find()
if (!config)
throw new Error('Error')
return config
我猜转译器希望这段代码是一个类,但它应该只是一个对象文字,我做错了什么?
【问题讨论】:
试试import GraphQLList from 'graphql'
(graphql
不是构造函数,而且从来不是;你曾经实例化require('graphql').GraphQLList
)
是的,做到了。我能问一下为什么会这样吗?如果我想解构或重命名我的导入,我认为我只需要大括号?为什么一件物品需要它?
或者,您可以(并且应该)使用:import graphql from 'graphql';
和 new graphql.GraphQLList(...)
,这正是您之前所做的。
【参考方案1】:
你基本上转换了这个 ES5 行:
var GraphQLList = require('graphql').GraphQLList;
到这里:
import GraphQLList from 'graphql'
您应该可以在此处看到错误。
在 ES6 代码中,GraphQLList
将是一个对象包含来自该模块的所有导出,其中包括一个名为 GraphQLList
的对象。
所以你可以从这里改变你的 ES6 代码:
new GraphQLList(ConfigType)
到这里:
new GraphQLList.GraphQLList(ConfigType)
或者,正如评论者所提到的,就这样做:
import GraphQLList from 'graphql'
【讨论】:
谢谢。我不知道命名导入,我认为import ex1, ex2, ex3 from 'blah'
语法仅用于重命名和解构,我一定跳过了文档中的那部分:)
您应该修复 new GraphQLList.GraphQLList(ConfigType)
,将其替换为 new graphql.GraphQLList(ConfigType)
并说明适当的导入行。以上是关于将代码从 ES5 转换为 ES6 并导出未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章