2016-06-03 3 views
1

Nach dem Start meines Servers versuche ich den RequireJS-Optimierer zu verwenden, um alle meine RequireJS-Module in einer einzigen Datei zu kombinieren. Sobald der Optimierer fertig ist, versuche ich die Module zu benutzen, aber es scheint nicht zu funktionieren.Benötigt ein optimiertes Modul nach der Optimierung mit 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); 
}); 

Die Ausgabe von console.log ist die verketteten Dateien wie erwartet, aber Balken ist nicht definiert.

Wenn ich nach dem vorherigen Skript das folgende Skript ausführen, wird Balken definiert.

var requirejs = require('requirejs'); 

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

var main = requirejs('/build/main.js')); 
var bar = requirejs('src/bar'); 
console.log(bar); 

Kann mir jemand Einblick geben, was das erste Skript daran hindern könnte zu funktionieren?

Danke, Jake

Antwort

0

Ihr Weg für baseUrl in requirejs.config war falsch. Ich habe auch removeCombined in der Konfiguration des Optimierers hinzugefügt, um das Laden von Dateien zu verhindern, die in main kombiniert wurden.

Aber das nicht alles, was benötigt wurde. Sie sehen, dass ich auch den Wert von requirejs.config in r speichern und dann verwende ich r, um die Module zu laden. Dies ist dasselbe, was Sie tun würden, wenn Sie RequireJS contexts verwenden würden: Sie würden den Wert des Aufrufs requirejs.config für jeden Kontext speichern, sodass Sie eine Funktion zum Laden von Dingen aus einem Kontext und die andere zum Laden von Dingen aus dem anderen Kontext verwenden können . Ich muss zugeben, ich weiß nicht, warum das den Code funktioniert. Es riecht nach einem Käfer für mich.

Eine andere Sache, die ich entdeckte, ist, dass requirejs.optimize schluckt jede Ausnahme in seinem Abschluss Callback geworfen. Das ist definitiv ein Fehler. Wenn es keine Ausnahmen verschluckt hätte, hättest du eine bessere Vorstellung davon gehabt, was vor sich ging. Hier

ist der Code:

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); 
});