build dojo amd dojo-build

build - La compilación personalizada de Dojo obtiene errores del navegador debido a la falta de recursos



amd dojo-build (1)

Archivos y directorios extra

Creo que es una buena práctica no eliminarlos. La razón para realizar una construcción es mejorar el rendimiento del navegador web combinando todo lo que se usa en unos pocos (preferiblemente uno) archivo JavaScript.

Pero, ¿qué sucede si un archivo (módulo) que se utiliza no está incluido en una capa? Si tiene los otros archivos en el directorio de compilación, la aplicación seguirá funcionando, solo tendrá una llamada adicional al servidor para obtener ese archivo. Si eliminó estos directorios y archivos, su aplicación se romperá.

Tirar de los recursos

Después de hacer una compilación personalizada, tengo una

release/RELEASE_NAME/dojo/resources

directorio, que contiene todos los recursos que mencionas

EDITAR: Agregar ejemplo ...

Ejemplo

Mando

node path/to/dojo/dojo.js load=build --profile path/to/build.profile.js --release --version=1.9.0

build.profile.js

var profile = (function(){ return { // Assuming that the node command is being run in // the webroot directory. If not, update the basePath // to the libs directory using the current directory as // the starting point. basePath: "./libs", releaseDir: "/path/to/release/dir", action: "release", releaseName: "release", layerOptimize: "shrinksafe", optimize: false, cssOptimize: "comments", mini: false, stripConsole: "normal", selectorEngine: "acme", packages:[ {name: ''dojo'', location: ''dojo''}, {name: ''dijit'', location: ''dijit''}, {name: ''dojox'', location: ''dojox''}, {name: ''dgrid'', location: ''dgrid''}, {name: ''put-selector'', location: ''put-selector''}, {name: ''xstyle'', location: ''xstyle''} {name: ''irb'', location: ''../irb''}, ], layers: { ''irb/dojo": { include: ["dojo/dojo", "dijit/dijit", "dojox/app/main"], boot: true, customBase: true }, ... } }; })();

He estado luchando por aprender el sistema de compilación Dojo basado en AMD. Hasta ahora no he podido obtener una compilación que se pueda utilizar sin errores de carga en el navegador (FF).

Tengo preguntas sobre cómo administrar la compilación.

Mi archivo de perfil de compilación tiene una sección de paquetes. Lo que especifico parece correlacionarse directamente con los mismos directorios de paquetes que se escriben en el directorio de destino. Esto parece apropiado. Sin embargo, también tengo una sección de capas que intenta fusionar solo los módulos "referenciados" de dojo, dijit, dojox, etc. Cuando se combinan en un solo archivo dojo.js, todavía tengo todos esos directorios de biblioteca en mi directorio de destino . ¿Se entiende que solo debe ingresar y eliminarlos manualmente o existe una forma automática de eliminarlos durante la compilación?

En mi primera capa trato de construirlo para dojo, dijit y dojox / app / main. Esto no está tirando de ningún recurso, como dojo / resources / blank.gif o cualquier archivo .css en ese mismo directorio. ¿Cómo se obtienen esos archivos de recursos para copiar en el destino? Creo que dojo.profile.js (que indica copiar esos recursos) solo afecta el directorio dojo. Pero dado que estoy creando un archivo dojo / dijit / dojox personalizado que combina módulos js, no hay ningún directorio de recursos. Después de la compilación personalizada, ¿se supone que debo ingresar manualmente al directorio de dojo y mover el directorio de dojo / recursos hacia fuera pero arrojar el resto del directorio de dojo? Simplemente no estoy seguro de cómo acceder a los archivos img y css dependientes en el directorio de dojo para utilizarlos con el archivo de capa dojo.js personalizado cuando se crea una capa dojo / dijit.

Aquí está mi perfil de compilación:

var profile = { basePath: "./", //releaseDir: "irb-release", action: "release", cssOptimize: "comments", stripConsole: ''all'', selectorEngine: ''acme'', layerOptimize: ''closure'', optimize: ''closure'', mini: true, packages:[ { name: "dojo", location: "../libs/dojo" }, { name: "dijit", location: "../libs/dijit" }, { name: "dojox", location: "../libs/dojox" }, { name: "dgrid", location: "../libs/dgrid" }, { name: "put-selector", location: "../libs/put-selector" }, { name: "xstyle", location: "../libs/xstyle" }, { name: "myPkg", location: "../libs/myPkg" }, { name: "irb", location: "../irb" } ], layers: { "release/irb/libs/dojo": { include: ["dojo/dojo", "dijit/dijit", "dojox/app/main"], boot: true, customBase: true }, "release/irb/libs/myPkg": { include: [ "myPkg/dialog/MessageBox", "myPkg/grids/FilterGrid", "myPkg/util/WidgetMonitor", "myPkg/controllers/BorderLayout", "myPkg/controllers/UnloadViewController" ], includeLocales: [ ''en-us'' ] }, "release/irb/libs/store/Memory": { include: [ "dojo/store/Memory" ] }, "release/irb/libs/store/Observable": { include: [ "dojo/store/Observable" ] }, "irb/irb": { include: [ "irb/irb", "dojox/app/View", "dojox/css3/transit", "dojox/app/controllers/Load", "dojox/app/controllers/Transition", "dojox/app/controllers/History" ] } }, staticHasFeatures: { // The trace & log APIs are used for debugging the loader, so we do not need them in the build. ''dojo-trace-api'': 0, ''dojo-log-api'': 0, // This causes normally private loader data to be exposed for debugging. In a release build, we do not need // that either. ''dojo-publish-privates'': 0, // This application is pure AMD, so get rid of the legacy loader. ''dojo-sync-loader'': 0, // `dojo-xhr-factory` relies on `dojo-sync-loader`, which we have removed. ''dojo-xhr-factory'': 0, // We are not loading tests in production, so we can get rid of some test sniffing code. ''dojo-test-sniff'': 0 } };

ACTUALIZACIÓN: Aquí está mi estructura de directorio que es aprox. basado en la estructura dojox / app:

/(webroot) /irb /controllers /res /css /img /views build.sh config.json index.html irb.js package.js package.json release.profile.js /libs /dgrid /dijit /dojo /dojox /myPkg /put-selector /util /xstyle

Para la construcción, uso el archivo build.sh basado en el ejemplo de dojox / app pero la línea de comando interna a la que llama es:

node "/home/(user)/(project ... path)/(webroot)/libs/dojo/dojo.sh" load=build --require "/home/(user)/(project ... path)/(webroot)/irb/irb.js" --profile "/home/(user)/(project ... path)/(webroot)/irb/release.profile.js" --appConfigFile "/home/(user)/(project ... path)/(webroot)/irb/config.json" --releaseDir "/home/(user)/(project ... path)/(webroot)/build"