2012-09-23 8 views
4

백본 앱이 잘 최적화 된 상태로 잘 작동합니다. r.js (아몬드 포함)를 사용한 후, 백본 다음 모듈에서 항상 'TypeError : Backbone is undefined'오류가 발생하는 것으로 보이는 단일 출력 파일을 성공적으로 생성합니다. 예를 들어Require.js + TypeError : 최적화 후 백본이 정의되지 않았습니다.

, r.js로부터의 출력은 다음과 같다 : 브라우저에 최적화 된 파일의로드시

/consumer/public/javascripts/vendor/almond.js 
/consumer/public/javascripts/vendor/jquery-1.7.2.js 
/consumer/public/javascripts/vendor/underscore.js 
/consumer/public/javascripts/vendor/bootstrap.js 
/consumer/public/javascripts/vendor/backbone.js 
/consumer/public/javascripts/rjs/src/mnp/prop_m.js 
/consumer/public/javascripts/rjs/src/mnp/prop_c.js 
/consumer/public/javascripts/vendor/play-mustache.js 
... 
/consumer/public/javascripts/main.js 

는 위 'prop_m.js'모듈에서 발생 될 에러를 참조 할 때 등뼈. require 2.0.5, Backbone 0.9.2 및 almond 0.1.4를 사용합니다. 모든 도움을 미리 감사드립니다.

PS : build.js은 다음과 같습니다

({ 
    baseUrl: "./", 
    mainConfigFile: "main.js", 
    paths: { 
    'almond': 'vendor/almond', 

     // need a path to the cs-compiled .js file 
     'app' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/app', 
     'mnp/router' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/mnp/router', 
     'mnp/search_form_v' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/mnp/search_form_v', 
     'mnp/prop_c' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/mnp/prop_c', 
     'mnp/prop_m' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/mnp/prop_m', 
     'mnp/prop_list_v' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/mnp/prop_list_v', 
     'mnp/prop_item_v' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/mnp/prop_item_v' 
    }, 


    /*not compatible with modules*/ 
    name: 'vendor/almond', 
    include: ["main"], 

    out: "dist/app.js", 
    /*not compatible with modules*/ 

    keepBuildDir: false, 

    preserveLicenseComments: false, 
    optimize: "none", 
    wrap: { 
     start: "(function(global, define) {\n"+ 
      // check for amd loader on global namespace 
      " var globalDefine = global.define;\n", 

     end: " var library = require('main');\n"+ 
      " if(typeof module !== 'undefined' && module.exports) {\n"+ 
      // export library for node 
      " module.exports = library;\n"+ 
      " } else if(globalDefine) {\n"+ 
      // define library for global amd loader that is already present 
      " (function (define) {\n"+ 
      "  define(function() { return library; });\n"+ 
      " }(globalDefine));\n"+ 
      " } else {\n"+ 
      // define library on global namespace for inline script loading 
      " global['main'] = library;\n"+ 
      " }\n"+ 
      "}(this));\n" 
    } 


})` 

답변

0

당신이 눈을 유지하는 것을 피하기 위해,

또한 백본 컴파일 .js 파일이 있는지 확인 inlineText: true를 사용을 시도 할 수 있습니다 경로를 저장하는 2 개체에 나는 mainConfigFile: "main.js"과 같은 것을 추천한다. - 매력처럼 작동한다.) 편집 : 왜 mainConfigFile 옵션 을 경로로 설정합니까?

+0

감사합니다. 행운과 함께 inlineText : true를 추가하려고했습니다. build.js에서 mainConfig와 경로가 모두 설정되었습니다. 컴파일 된 coffeescript를 'managed_resources' baseUrl 외부의 디렉토리. 따라서 mainConfig 파일을 사용하여 공급 업체 경로 (및 shim)를 한 곳에서만 설정하고 build.js의 경로를 사용하여 재생 된 coffeescript의 실제 물리적 위치를 재정의하고 설정합니다 (managed_resources에서). 하지만 어쩌면 이것은 잘못된 접근입니까? ... – user1691935

+0

sry, coffeescript에 익숙하지 않습니다 :/ 하지만 어쩌면 백본을로드하고 있지만 매개 변수로 전달하는 것을 잊어 버렸습니다 (적어도 오류는 이와 같은 이유로 인해 나타납니다) – Peter

2

FWIW : 누군가이 문제에 부딪히면 ... amd 버전의 백본과 밑줄을 사용하면 문제가 해결되는 것 같습니다. 즉. AMD의-버전이 근무하고 심의는 내 shim의를 포함하는 것을 잊었다 때이 문제가 없었

Loading Backbone and Underscore using RequireJS

관련 문제