2016-06-03 4 views
1

내 서버를 시작할 때 RequireJS 최적화 프로그램을 사용하여 모든 RequireJS 모듈을 단일 파일로 결합하려고합니다. 일단 옵티마이 저가 끝나면 모듈을 사용하려고 시도하고 있지만 작동하지 않는 것 같습니다.RequireJS로 최적화 한 후 최적화 된 모듈 필요

var path = require('path'); 
var fs = require('fs'); 

var requirejs = require('requirejs'); 

requirejs.config({ 
    baseUrl: __dirname, 
    nodeRequire: require 
}); 

requirejs.optimize({ 
    baseUrl: path.join(__dirname, 'foo'), 
    dir: 'build', 
    modules: [{ 
     name: 'main', 
     include: [ 'src/bar' ] 
    }] 
}, function (data) { 
    console.log(fs.readFileSync(path.join(__dirname, 'build', 'main.js'), 'utf-8')); 
    var main = requirejs('/build/main.js')); 
    var bar = requirejs('src/bar'); 
}, function (error) { 
    console.log(error); 
}); 

console.log의 출력은 예상대로 연결된 파일이지만 bar는 정의되지 않습니다.

이전 스크립트 이후에 다음 스크립트를 실행하면 bar가 정의됩니다.

어떤 사람이 첫 번째 스크립트가 작동하지 않을 수 있는지에 대한 통찰력을 제공 할 수 있습니까?

감사합니다, requirejs.config에서 baseUrl에 대한 제이크

답변

0

귀하의 경로가 잘못되었습니다. 또한 main에 결합 된 파일로드를 방지하기 위해 옵티마이 저 구성에 removeCombined을 추가했습니다.

그러나 이 아닙니다. 또한 requirejs.config의 값을 r에 저장 한 다음이 모듈을로드하는 데이 r을 사용합니다. 이것은 RequireJS contexts을 사용한 경우와 동일합니다. 각 컨텍스트에 대해 requirejs.config 호출의 값을 저장하면 하나의 컨텍스트에서로드 할 함수와 다른 컨텍스트에서로드 할 함수를 사용할 수 있습니다 . 왜 이것이 코드 작업을하는지 모르겠다. 그것은 나에게 벌레처럼 냄새가 난다.

내가 발견 한 또 다른 한 가지는 requirejs.optimize은 완료 콜백에 던져진 예외를 삼킨다는 것입니다. 이것은 분명히 버그입니다. 예외를 삼키지 않았다면, 무슨 일이 벌어 졌는지 더 잘 알았을 것입니다.

var path = require('path'); 
var fs = require('fs'); 

var requirejs = require('requirejs'); 

var r = requirejs.config({ 
    baseUrl: path.join(__dirname, 'build'), 
    nodeRequire: require 
}); 

requirejs.optimize({ 
    baseUrl: path.join(__dirname, 'foo'), 
    dir: 'build', 
    // You should do this to make sure that you are not accidentally loading 
    // files that have *not* been combined. 
    removeCombined: true, 
    modules: [{ 
     name: 'main', 
     include: [ 'src/bar' ] 
    }] 
}, function (data) { 
    // console.log(fs.readFileSync(path.join(__dirname, 'build', 'main.js'), 'utf-8')); 
    var main = r('main'); 
    console.log(main); 
    var bar = r('src/bar'); 
    console.log(bar); 
}, function (error) { 
    console.log(error); 
}); 
: 여기

코드입니다