maggior parte degli esempi per la configurazione RequireJS, posizionare l'oggetto di configurazione nel punto di ingresso main.js, qualcosa di simile:Come posso inserire RequireJS Config in file separati e far funzionare l'ottimizzatore r.js?
//main.js
require.config({
"paths": {
//libs
"lib1": "assets/js/lib/lib1",
"lib2": "assets/js/lib/lib2",
"lib3": "assets/js/lib/lib3",
"lib4": "assets/js/lib/lib4"
}
});
//start the app
define(["lib1"], function(lib1){/*start the app*/});
preferisco mettere l'oggetto di configurazione in un file separato, perché man mano che cresce, è difficile mantenere nello stesso file.
La configurazione che segue funziona quando l'eseguo nel browser, ma per qualche ragione ho un errore quando si esegue il r.js ottimizzatore:
//config.js
define({/*all configuration here*/});
//main.js
define(["config", "require"], function(config, require){
requirejs.config(config); //set configuration
require(["app"]); //launch app, where "app" path is defined in config.js
});
Quando eseguo r.js, ricevo il seguente errore:
*Tracing dependencies for: main
Error: ENOENT, no such file or directory 'C:\Work\project\target\app.js*
Così sembra che r.js non ottiene le impostazioni di configurazione, perché è alla ricerca di app.js come uno script relativo, non come un modulo con un percorso definito.
Ecco il mio file build.js (AppDir, dir e mainConfigFile sono relative al file build.js):
({
appDir: "../src",
baseUrl: ".",
dir: "../target",
mainConfigFile: "../src/main.js",
findNestedDependencies: true,
modules: [
{
name: "main"
}
]
})
Grazie, sembra buono. È fondamentalmente lo stesso che sto facendo, ma sto cercando di mantenere 1 tag script nel mio index.html - ovvero, require.js. Vedo che non stai usando data-main, piuttosto stai caricando tutti gli script separatamente. C'è un modo per caricare require-config da main.js usando require? In questo modo potresti continuare a tenerlo separato per i test – elanh
Penso che usare require per caricare require-cfg sia un problema di pollo e uova. Mi piace caricare require-cfg in un passaggio separato, perché mi consente di personalizzarlo (ad es. I18n) sul posto. E sì, 3 script sono più brutti di uno script, ma per me è qualcosa con cui posso convivere. –
La cosa strana è che funziona per me quando sono in esecuzione localmente nel browser. Ma quando eseguo r.js, non è così. Non riesco a capire perché. Posso ancora caricare i moduli con require, senza i percorsi definiti, questo è il motivo per cui mi aspetto che funzioni. – elanh