dojo dojo-build

dojo build-nls bundles, build falla a menos que los paquetes estén en "dojo/dojo"?



dojo-build (1)

Los módulos NLS no se deben especificar como incluidos en capas. Cuando se procesen los módulos de capa, todas las dependencias de NLS se agruparán automáticamente en capas relacionadas con un sufijo de nombre de archivo correspondiente a cada configuración regional posible. por ejemplo, para una capa MyLayer.js también obtendrás un MyLayer_en-us.js , MyLayer_es-es.js , etc. Esto permite a los visitantes cargar solo el paquete de idiomas que necesitan.

Si desea incluir a la fuerza una configuración regional particular dentro de sus capas (por ejemplo, porque sabe que todos sus visitantes solo hablan inglés), puede usar la propiedad includeLocales para hacerlo:

layers: { MyLayer: { includeLocales: [ ''en-us'' ] } }

Si bien su primer perfil puede parecer que funciona, es poco probable que realmente esté haciendo lo que esperaba, que es probablemente la razón por la cual ShrinkSafe se está cayendo.

Un par de otras notas:

  1. ShrinkSafe está en desuso realmente debería usar Closure Compiler o UglifyJS en su lugar.
  2. La bandera customBase aplica solo a la capa dojo/dojo principal y significa "no incluye automáticamente los módulos Dojo Base predeterminados". No necesita aplicarlo a sus otras capas.

Esta es mi destilación de una falla de compilación que estaba obteniendo. El síntoma fue que al optimizar con shrinksafe mi construcción fallaría con el error:

[exec] js: "<eval''ed string>#1(Function)#1(eval)", line 127: uncaught JavaScript runtime exception: TypeError: Cannot read property "1" from null [exec] at <eval''ed string>#1(Function)#1(eval):127 [exec] at <eval''ed string>#1(Function)#1(eval):163

Si mi código extrajo sus archivos nls con un patrón como

"dojo/i18n!./nls/MyResource"

Sin embargo, esta construcción es común a lo largo de mucho código dojo, que se construye limpiamente. Así que experimenté copiando un código dojo en mi módulo y descubrí que si el recurso nls se cargaba en la capa dojo / dojo, mis capas se creaban correctamente, si cargaba el mismo recurso nls en mi propia capa, obtienes el error anterior.

Así que reduciendo esto a un caso mínimo, copié dijit / form / _ComboBoxMenuMixin.js en mi propio módulo y también los recursos nls correspondientes.

Tengo tres casos de prueba, uno funciona, los otros dos dan el error anterior.

Mis preguntas:

Parece que necesito incluir mis propios recursos nls en la capa "dojo / dojo", debe ser precisamente esta capa. Sin duda, esto no puede ser cierto? ¿Cuáles son mis alternativas?

Perfil de trabajo:

layers: { "dojo/dojo" : { customBase: false, include: [ "modules/nls/ComboBox", ], exclude: [] }, "MyLayer" : { customBase: false, include: [ "modules/ComboCopy", ], exclude: [] }, }

Fallo: nls en la misma capa

layers: { "dojo/dojo" : { customBase: false, include: [ ], exclude: [] }, "MyLayer" : { customBase: false, include: [ "modules/nls/ComboBox", "modules/ComboCopy", ], exclude: [] }, }

error, cargar nls en un nombre de capa diferente

layers: { "myNlsLayer" : { customBase: false, include: [ "modules/nls/ComboBox", ], exclude: [] }, "MyLayer" : { customBase: false, include: [ "modules/ComboCopy", ], exclude: [] },