【问题标题】:How does 'require' operates differently from 'import' es6?'require' 与 'import' es6 的运作方式有何不同?
【发布时间】:2016-04-05 08:23:11
【问题描述】:

我遇到了我无法解释的行为。 根据使用 import 或 require,此测试成功 (import) 或失败 (require)。

如果失败,我有以下错误:

PhantomJS 2.1.1 (Windows 7 0.0.0) 不可变性 数字是不可变的 FAILED undefined 不是构造函数(评估 'expect((0, _immutable.List)([1])).toEqualImmutable((0, _immutable .List)([1]))')

代码如下:

import { Map, List } from 'immutable';
const expect = require("expect");
// import expectImmutable from "expect-immutable";
const expectImmutable = require("expect-immutable");

expect.extend(expectImmutable);

describe("immutability", () => {
    describe("a number", () => {
        function increment(currentState) {
            return currentState + 1;
        }
        it("is immutable", () => {
            expect(List([1])).toEqualImmutable(List([1]));
            expect(Map({ a: 1 })).toEqualImmutable(Map({ a: 1 }));
            let state = 42;
            let nextState = increment(state);

            expect(List([nextState])).toEqualImmutable(List([43]));
            expect(List([state])).toEqualImmutable(List([42]));
        });
    });
});

有人对幕后发生的事情有解释吗?

【问题讨论】:

  • 不管怎样,只要你在编译它——你为什么不检查require和编译import的代码之间的区别(也将是require)?
  • 您可能正在寻找所需对象中的默认属性,请尝试require("expect").default 和require("expect-immutable").default

标签: javascript phantomjs ecmascript-6 require immutable.js


【解决方案1】:

感谢@zerkms 和@maioman,您的建议真的很有帮助。 你是对的@maioman,这是由于库使用的导出语法。

es6:

export default foo;

要求:

module.exports = foo;

所以当需要es6写导出的时候,我们应该处理default关键字。

require("foo").default;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 2018-11-26
    • 2018-08-02
    • 2014-02-14
    • 2011-03-11
    相关资源
    最近更新 更多