2016-07-28 2 views
0

노드의 RequireJS 모듈에서 함수를 내보내는 방법은 무엇입니까? 내가 가지고있는 코드로, 나는 기대하고있는 백본 모델보다는 빈 객체를 얻는다.노드에서 RequireJS를 사용하여 함수를 내보내는 경우 빈 객체가 반환됩니다.

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을 인쇄합니다.

답변

0

패키지 amd-define은 버그이거나 CommonJS sugar을 지원하지 않습니다. (CommonJS 설탕을 지원하는 데 필요한 의존성 변환을 처리하는 코드가 전혀 없습니다.)

amd-define을 덤핑하고 amd-loader을 대신 사용하는 것이 좋습니다. 나는 수년 동안 그것을 사용 해왔다. 코드에 대한

:

  1. first.js에서 var define=require('amd-define');를 제거합니다.

  2. require('amd-loader') (설치 후)을 입력하고 전에 AMD 모듈을로드하십시오.

이렇게하면 first.js에서 내보내기를 가져올 수있었습니다.

+0

매력적인 남자처럼 일했습니다. 모든 도움에 감사드립니다! –

+0

하지만 문제는 amd-loader를 설치하기 위해 모카에서 사용되는 npm이 아닌 코드에 의해 사용되는 bower를 통해 설치된 q 및 my.Class와 같은 thirdparty 라이브러리를로드하지 않는다는 것입니다. –

관련 문제