在Node中使用RequireJS导出函数会返回一个空对象

时间:2016-07-28 09:55:50

标签: backbone.js requirejs mocha

如何从Node中的RequireJS模块导出函数?使用我的代码,我得到一个空对象而不是我期待的Backbone模型。

first.js包含:

'use strict';
var define=require('amd-define');
define(function (require) {

var Backbone = require('backbone');

// Our basic **Todo** model has `title`, `order`, and `completed` attributes.
var Todo = Backbone.Model.extend({
    // Customizations of my model...
});

return Todo;
})

我的测试文件test.js包含:

'use strict';
var chai =require("chai");
var assert=chai.assert;
var expect=chai.expect;
var Todo=require("first");

describe('Tests for Todo model', function () {
    it('should create global variables for Todo', function () {
        expect(Todo).to.be.exist;
        console.log(typeof (Todo))
    });

    it('should be created with default values for its attributes',               function() {
        var todo = new Todo();
        expect(todo.get('title')).to.equal('');
    });

    it('should fire a custom event when state change', function() {
        var todo = new Todo();
        todo.set({completed: true, order: 1});
        todo.set('title', 'my title');
    });
});

它给出Todo不是函数的错误。 console.log语句打印object

1 个答案:

答案 0 :(得分:0)

amd-define要么是错误的,要么不支持CommonJS sugar。 (后者可能就是这种情况。我没有看到任何代码来处理支持CommonJS糖所必需的依赖转换。)

我建议转储amd-define并使用amd-loader代替。我已经使用它多年了,它有效。

代码:

  1. var define=require('amd-define');移除first.js

  2. 在加载任何AMD模块之前,在测试文件中添加require('amd-loader')(安装后)

  3. 我能够从first.js进行导出。