【问题标题】:Exporting a function with RequireJS in Node returns an empty object在 Node 中使用 RequireJS 导出函数会返回一个空对象
【发布时间】:2016-07-28 09:55:50
【问题描述】:

如何从 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

【问题讨论】:

    标签: backbone.js requirejs mocha.js


    【解决方案1】:

    amd-define 有问题或不支持CommonJS sugar。 (可能是后者。我没有看到任何代码负责执行支持 CommonJS 糖所需的依赖项转换。)

    我建议转储amd-define 并改用amd-loader。我已经用了很多年了,效果很好。

    对于您的代码:

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

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

    这样做我可以从first.js 导出。

    【讨论】:

    • 但问题在于它不加载像 q 和 my.Class 这样的第三方库,这些库是通过代码使用的 bower 安装的,而不是 mocha 中用于安装 amd-loader 的 npm。
    猜你喜欢
    • 2018-12-16
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 2021-10-13
    • 2022-01-23
    • 2016-11-16
    相关资源
    最近更新 更多