angularjs - templatecache - Calza de grunt-contrib-requirejs no envolviendo la biblioteca
npm angular templatecache (1)
Es solo una suposición descabellada (dependiendo de la versión de su optimizador) pero la configuración de documentación no es tan genial aquí:
A partir de 2.1.11, las dependencias cortadas se pueden envolver en un contenedor define () para ayudar cuando las dependencias intermedias son AMD tienen dependencias propias. El ejemplo canónico es un proyecto que usa Backbone, que depende de jQuery y Underscore. Las dependencias cortadas que quieren que Backbone esté disponible inmediatamente no lo verán en una compilación, ya que las versiones compatibles de AMD de Backbone no ejecutarán la función define () hasta que las dependencias estén listas. Al incluir esas dependencias cortadas, esto se puede evitar, pero podría introducir otros errores si esas dependencias cortadas usan el alcance global de maneras extrañas, por lo que no es el comportamiento predeterminado para ajustar.
entonces tal vez use:
wrapShim: true
https://github.com/jrburke/r.js/blob/master/build/example.build.js
ya que al usar "mainConfigFile" la configuración shim ya debería estar en el optimizador, este es a menudo otro punto de falla.
Estoy usando requirejs y configurando mis artefactos de productos, combinando así mis bibliotecas y configurando las dependencias de los módulos entre ellas para obtener la secuencia de carga apropiada usando la tarea de grunt para requirejs. No tengo problemas para usar la inyección del módulo de tiempo de ejecución en mi servidor de carga en vivo que tiene acceso a bibliotecas no combinadas. En aras de la claridad, he desactivado toda la minificación / uglificación y activo un js-beautify.
requirejs: {
dist: {
// Options: https://github.com/jrburke/r.js/blob/master/build/example.build.js
options: {
// `name` and `out` is set by grunt-usemin
// name: ''App'',
baseUrl: yeomanConfig.app + ''/scripts'',
mainConfigFile: yeomanConfig.app + ''/scripts/config.js'',
out: yeomanConfig.dist + ''/scripts/main.js'',
optimize: ''none'',
// TODO: Figure out how to make sourcemaps work with grunt-usemin
// https://github.com/yeoman/grunt-usemin/issues/30
//generateSourceMaps: true,
// required to support SourceMaps
// http://requirejs.org/docs/errors.html#sourcemapcomments
beautify: false,
removeCombined: false,
generateSourceMaps: false,
preserveLicenseComments: false,
useStrict: true,
mangle: false,
compress: false,
// wrap: true,
// https://github.com/mishoo/UglifyJS2
}
}
},
Estoy usando Kendo, Angular y Angular-Keno-UI. Entiendo que Kendo está listo para el módulo AMD pero no parece que Angular-Keno-UI lo esté. Esperaba crear un shim y estar envuelto en la función de definición requirejs apropiada, sin embargo, no creo que esto esté sucediendo.
require.config({
cjsTranslate: true,
paths: {
jquery: ''vendor/jquery/jquery'',
''angular-kendo-ui'': ''vendor/angular-kendo-ui/build/angular-kendo'',
kendo: ''vendor/kendoui.complete.2013.2.918.trial/js/kendo.all.min'',
angular: ''vendor/angular/angular'',
requirejs: ''vendor/requirejs/require'',
''angular-animate'': ''vendor/angular-animate/angular-animate'',
''angular-ui-router'': ''vendor/angular-ui-router/release/angular-ui-router.min'',
''angular-resource'': ''vendor/angular-resource/angular-resource''
},
shim: {
jquery: {
exports: ''$''
},
angular: {
deps: [
''jquery''
],
exports: ''angular''
},
''angular-resource'': {
deps: [
''angular''
]
},
''angular-kendo-ui'': {
deps: [
''angular'',
''kendo''
]
},
''angular-ui-router'': {
deps: [
''angular''
]
}
}
});
Para resolver la falta de preparación del módulo, lo envuelvo yo mismo como tal:
define(''angular-kendo-ui'', [
''angular'',
''kendo''
], function (
angular,
kendo
) {
< original angular-kendo-ui source >
});
¿He entendido mal la aplicación de las cuñas? Parece que tengo y en realidad no ajusta la ruta definida, sino que solo apunta a ella si se solicita el módulo (lo cual está bien en la carga del módulo dinámico)
Durante mi examen inicial de estas tecnologías, noté EN ALGÚN LUGAR que había una manera de tener requirejs (o uno de los mutadores de activos en mi pipeline) automáticamente envolver módulos para mí. Alguien tiene una pista para mí, supongo que era requirejs que envolvería los módulos definidos en la configuración como rutas, pero tal vez estaba equivocado. A continuación se muestra una copia impresa de las tareas que se ejecutan:
Done, without errors.
Elapsed time
build 887ms
useminPrepare:html 22ms
concurrent:dist 8s
autoprefixer:dist 174ms
requirejs:dist 19s
jsbeautifier:dist 2s
concat:public/styles/main.css 46ms
concat:public/scripts/main.js 56ms
cssmin:public/styles/main.css 81ms
copy:dist 26ms
usemin:html 5s
usemin:css 24s