首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ES5导出函数未被识别

ES5导出函数未被识别
EN

Stack Overflow用户
提问于 2019-04-01 13:41:13
回答 4查看 1.5K关注 0票数 2

我得到了这个math.js:

代码语言:javascript
运行
复制
const sum = (a, b) => a + b
const mul = (a, b) => a * b

export default { sum, mul }

然后在math.test.js中:

代码语言:javascript
运行
复制
const { sum, mul } = require('./math')

test('Adding 1 + 1 equals 2', () => {
  expect(sum(1, 1)).toBe(2)
})

test('Multiplying 1 * 1 equals 1', () => {
  expect(mul(1, 1)).toBe(1)
})

我从玩笑中得到了这个错误:

代码语言:javascript
运行
复制
? Adding 1 + 1 equals 2

  TypeError: sum is not a function

    5 | })
    6 | test('Adding 1 + 1 equals 2', () => {
  > 7 |   expect(sum(1, 1)).toBe(2)
    8 | })
    9 |

如果我在测试文件中导入这些函数,jest就可以正常运行。无法理解在ES5中正确使用外部函数的方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-04-01 13:49:22

有两个问题:

  1. 这句话可能不像你想的那样: 导出默认{ sum,mul }
  2. 您将本机模块语法( ECMAScript M模块) (export/import,通常称为"ESM“)与CommonJS语法(require)混合使用。使用import导入ESM语法。

export default { sum, mul }导出一个默认导出,它是一个带有属性summul的对象(这对于ESM来说是件很奇怪的事情)。如果你真的想这么做的话,好吧,但这通常不是最好的做法。您无法在导入时进行重构,但可以在导入对象后对其进行重构:

代码语言:javascript
运行
复制
// BUT YOU PROBABLY DON'T WANT TO DO THIS, KEEP READING
import math from "./math"; // Imports that default export
cosnt {sum, mul} = math;   // Destructures it into constants

但是,通常您会使用命名导出,无论是在您使用的过程中:

代码语言:javascript
运行
复制
export const sum = (a, b) => a + b
export const mul = (a, b) => a * b

...or (风格决定):

代码语言:javascript
运行
复制
const sum = (a, b) => a + b
const mul = (a, b) => a * b

export { sum, mul };

对于名为exports的导入,您可以像使用import一样使用语法,而不是使用require

代码语言:javascript
运行
复制
import { sum, mul } from "./math";

这不是破坏,虽然看起来很相似。它缺乏破坏的几个特性(嵌套、默认值、.)。

也可以导入命名空间对象。

代码语言:javascript
运行
复制
import * as math from "./math";

它将具有summul属性(这就是为什么通常不导出带有JavaScript本机模块的对象;任何真正需要的对象都可以得到一个命名空间对象)。

票数 4
EN

Stack Overflow用户

发布于 2019-04-01 13:44:49

使用named export

代码语言:javascript
运行
复制
export const sum = (a, b) => a + b
export const mul = (a, b) => a * b

代码语言:javascript
运行
复制
export {sum,mul}

然后

代码语言:javascript
运行
复制
import { sum, mul } from './math'
票数 3
EN

Stack Overflow用户

发布于 2019-04-01 13:43:43

替换

代码语言:javascript
运行
复制
const { sum, mul } = require('./math')

使用

代码语言:javascript
运行
复制
import { sum, mul } from './math'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55456575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档