Sto costruendo un'applicazione a pagina singola utilizzando, AngularJs + RequireJs in Play Framework 2.1.1. Ho due applicazioni che si trovano nello stesso server Play, nella dashboard dell'amministratore e nel normale sito web. Ecco perché ho due file main.js per Admin Dashboard e il sito web Normale. La struttura dell'applicazione è simile a questa. L'ho ottenuto da public/javascripts
Come utilizzare più file main.js per RequireJs in Play Framework 2.1.1 Java?
Vogliamo separare le due pagine, ecco perché abbiamo due file main.js. Tuttavia, il problema che sto affrontando ora è che nella root main.js tutto va bene. Se vado alla mia applicazione http://localhost:9000/
tutto è ok e se guardo il pannello di rete su Firebug vedo solo require.js e main.js che è quello che mi aspettavo. Tuttavia, quando vado alla dashboard dell'amministratore, http://localhost:9000/admin
, ogni file viene corretto in modo corretto. Ma quando guardo la rete vedo tutti i file javascript che non avrebbe dovuto essere quello. Ho pensato che ogni script dovrebbe essere caricato dinamicamente da requireJs. Quindi, significa che il browser effettua più chiamate per ottenere tutti i file necessari invece di ottenere require.js e main.js per risolvere le dipendenze. Sto facendo qualcosa di sbagliato?
ho avuto la struttura di questo progetto https://github.com/maxdow/angularjs-requirejs-seed
├── admin
│ ├── app.js
│ ├── bootstrap.js
│ ├── controllers
│ │ ├── AdminAppController.js
│ │ └── index.js
│ ├── directives
│ │ ├── Directive.js
│ │ └── index.js
│ ├── filters
│ │ └── index.js
│ ├── impl.js
│ ├── main.js
│ └── routes.js
├── app.js
├── bootstrap.js
├── controllers
│ ├── Controller.js
│ └── index.js
├── directives
│ ├── Directive.js
│ └── index.js
├── filters
│ └── index.js
├── impl.js
├── lib
│ └── angular
│ ├── angular-cookies.min.js
│ ├── angular-flash.min.js
│ ├── angular-resource.min.js
│ └── angular.min.js
├── main.js
├── routes.js
└── services
├── Service.js
└── index.js
Si noterà che amministratore dentro/c'è main.js e anche nella root ho un'altra main.js
Il codice sembra piuttosto molto simile a questo.
require.config({
paths: {
'angular': './lib/angular/angular.min',
'angular-resource': './lib/angular/angular-resource.min',
'angular-cookies': './lib/angular/angular-cookies.min'
},
/**
* for libs that either do not support AMD out of the box, or
* require some fine tuning to dependency mgt'
*/
shim: {
'angular': {
exports: 'angular',
deps: []
},
'angular-resource': {
deps: ['angular']
},
'angular-cookies': {
deps: ['angular']
}
}
});
require(['./bootstrap'], function() {
//nothing to do here...see bootstrap.js
});
Questo è ciò che il mio modello appare come per il sito normale
@helper.requireJs(core = routes.Assets.at("javascripts/require.js").url, module = routes.Assets.at("javascripts/main").url)
Questo è ciò che il mio modello per la pagina di amministrazione appare come
@helper.requireJs(core = routes.Assets.at("javascripts/require.js").url,
module = routes.Assets.at("javascripts/admin/main").url)
E questo è il mio Build.scala
val main = play.Project(appName, appVersion, appDependencies).settings(
requireJs += "main.js",
requireJsShim += "main.js"
)
Questo è ciò che la mia generazione si presenta come quando faccio play start
[info] Loading project definition from /Users/myuser/MyProject/project/main/project
[info] Set current project to project (in build file:/Users/myuser/MyProject/project/main/)
[info] RequireJS optimization has begun...
[info] app.build.js:
[info] ({appDir: "javascripts",
[info] baseUrl: ".",
[info] dir:"javascripts-min", mainConfigFile: "javascripts/main.js", modules: [{name: "main"}]})
Tracing dependencies for: main
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/admin/app.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/admin/bootstrap.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/admin/controllers/AdminAppController.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/admin/controllers/index.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/admin/directives/Directive.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/admin/directives/index.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/admin/filters/index.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/admin/impl.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/admin/main.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/admin/routes.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/app.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/bootstrap.js
min/controllers/Controller.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/directives/index.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/directives/Directive.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/filters/index.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/impl.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/lib/angular/angular-cookies.min.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/lib/angular/angular-flash.min.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/lib/angular/angular-resource.min.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/lib/angular/angular.min.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/main.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/routes.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/services/Service.js
Uglifying file: /Users/myuser/MyProject/project/main/target/scala-2.10/classes/public/javascripts-min/services/index.js
main.js
----------------
lib/angular/angular.min.js
filters/index.js
lib/angular/angular-resource.min.js
lib/angular/angular-cookies.min.js
services/index.js
directives/index.js
controllers/index.js
app.js
routes.js
controllers/Controller.js
directives/Directive.js
services/Service.js
impl.js
bootstrap.js
main.js
Ho fatto alcuni cambiamenti nella Build.scala essere
requireJsShim += "main.js",
requireJsShim += "admin/main.js",
requireJs += "main.js",
requireJs += "admin/main.js",
e ottengo questo errore invece
({appDir: "javascripts",
[info] baseUrl: ".",
[info] dir:"javascripts-min", mainConfigFile: "javascripts/main.jsadmin/main.js", modules: [{name: "main"},{name: "admin/main"}]})
Error: /Users/user/MyProject/project/main/target/scala-2.10/classes/public/javascripts/main.jsadmin/main.js does not exist.
Puoi vedere che concatena le due stringhe insieme in requireJsShim e ho bisogno che il bootstrap funzioni per angularjs.
per favore vedi la mia domanda modificata. Non riesco a inserire il codice nel commento. – toy
@toy, se entrambi i file main.js e admin/main.js hanno gli stessi file js in cui sono richiesti i percorsi di configurazione, allora sarà sufficiente se ne includi solo uno, ovvero uno di quei file nella proprietà requireJsShim, prova ad aggiungere solo uno di loro per richiedere JsShim, saranno già compilati e disponibili anche per l'altro modulo main.js. Altrimenti, se entrambi questi file main.js hanno dipendenze diverse, prova ad aggiungere tutte quelle dipendenze a uno dei file in require.config.paths e includerlo solo per la proprietà requireJsShim, saranno compilati e disponibili per tutti i moduli. – somedev
inoltre, ho dimenticato di menzionare, se si desidera utilizzare il file r.js, penso che sia necessario aver installato nodejs e requirejs, requirejs può essere installato tramite npm per nodo e r.js è presente in node_modules. – somedev