La actualización del framework Angular desarrollado por Google se centra más en las mejoras del ecosistema que en las nuevas características. Angular 10 está configurado para ser más pequeño que las versiones anteriores.
Además, las configuraciones opcionales más estrictas ofrecen una configuración de proyecto más estricta al crear un nuevo espacio de trabajo con ng new, via ng new -- strict.
Al habilitar este indicador, se inicializa un nuevo proyecto con una nueva configuración para mejorar la capacidad de mantenimiento, ayudar a detectar errores y permitir que la CLI realice optimizaciones avanzadas en una aplicación.
**language-service**: Se ha agregado una interfaz de compilador que envuelve el ngtsccompilador real . El language-servicecompilador específico maneja múltiples archivos de verificación de tipos usando la interfaz del proyecto, creando ScriptInfos según sea necesario.**language-service**: Eliminar el autocompletado de entidades HTML. El autocompletado se está eliminando de las entidades HTML, como &, <etc., porque está fuera de la funcionalidad central de Angular LS y tiene un valor cuestionable y un costo de rendimiento.ng-content se ha agregado información de dependencia y selectores a los metadatos. Esta característica del compilador propuesta proporcionaría metadatos adicionales útiles para herramientas, como el Servicio de lenguaje angular, que ofrece la capacidad de proporcionar sugerencias para directivas / componentes definidos en bibliotecas.ExpressionBindingexpresión de microsintaxis a ParsedProperty, que, a su vez, propagaría el intervalo a los AST de plantilla (VE e Ivy)**ngcc**: Permite configurar tiempos de espera de bloqueo asíncrono. Esto agrega soporte para el ngcc.config.jsarchivo para configurar las opciones retryAttemptsy retryDelaypara AsyncLocker. Una prueba de integración agrega una nueva verificación para un tiempo de espera y se utiliza ngcc.config.jspara reducir el tiempo de espera para evitar que la prueba tarde demasiado.**ngcc**: Se ha implementado un buscador de puntos de entrada basado en un programa. Este buscador está diseñado para procesar solo puntos de entrada a los que puede acceder el programa definido por un archivo tsconfig.json. El uso de esta opción puede acelerar el procesamiento en casos en los que hay una gran cantidad de dependencias instaladas pero solo una pequeña proporción de los puntos de entrada se importan realmente a la aplicación."a.xlf”, "b.xmb"y "c.json"– a continuación, ningún mensaje de "a.xlf” se utilizará en lugar de un mensaje de "b.xmb" o "c.json"… y así sucesivamente. En la práctica, esto significa que primero debe colocar los archivos en orden de importancia, con las traducciones alternativas más tarde.CanLoad ahora puede regresar Urltree. Un CanLoad que regrese Urltree cancela la navegación actual y es redirigido. Esto coincide con el comportamiento actual disponible para los CanActivateguardias que también se ha agregado. Esto no afecta la precarga. Un CanLoadguardia bloquea cualquier carga previa; cualquier ruta con un CanLoadguardia no se cargará previamente, y los guardias no se ejecutarán como parte de la carga previa.**compiler-cli**: Realice una comprobación de tipo de plantilla de forma incremental y divida la comprobación de tipo de plantilla de Ivy en varios archivos**ngcc**: Ahora se permite la notificación inmediata de un archivo de bloqueo obsoleto. Además, un .tsconfigarchivo analizado se almacena en caché entre ejecuciones.**ngcc**: Reduce el tamaño del archivo de manifiesto de punto de entrada. Se conoce la ruta base para el paquete y los puntos de entrada, por lo que no es necesario almacenarlos en el archivo. Se evita almacenar matrices vacías innecesariamente. Anteriormente, incluso si un punto de entrada no necesitaba procesamiento, **ngcc**analizaría los archivos del punto de entrada para calcular las dependencias, lo que tomaría mucho tiempo para los módulos de nodo grande.**ngcc**:** Para mejorar el rendimiento, el cálculo de basePaths se ha hecho vago, por lo que el trabajo solo se realiza si es necesario TargetedEntryPointFinder. Anteriormente, basePathsse calculaba cada vez que se creaba una instancia del buscador, lo que era una pérdida de esfuerzo en el caso en que el punto de entrada objetivo ya había sido procesado.yarno npm installpara paquetes y bibliotecas angulares.Varyencabezados se tendrían en cuenta al recuperar recursos de la memoria caché, evitando por completo la recuperación de los activos en caché (debido a los ServiceWorkerdetalles de implementación) y dando lugar a un comportamiento impredecible debido a implementaciones inconsistentes / con errores en diferentes navegadores. Ahora, los Varyencabezados se ignoran cuando se recuperan recursos de los ServiceWorkercachés, lo que puede resultar en la recuperación de recursos incluso cuando sus encabezados son diferentes. Si su aplicación necesita diferenciar sus respuestas en función de los encabezados de solicitud, asegúrese de que Angular ServiceWorkeresté configurado para evitar el almacenamiento en caché de los recursos afectado.EMPTYcancelará la navegación. Si desea permitir la navegación para continuar, tendrá que actualizar los dispositivos de resolución para emitir algún valor, (es decir, defaultIfEmpty(...), of(..), etc).bo B, la cadena representada no manejaba adecuadamente los períodos de días que abarcaban días. En cambio, la lógica volvía al caso predeterminado de AM. Esta lógica se ha actualizado para que coincida con los tiempos dentro de un período de un día que se extiende más allá de la medianoche, por lo que ahora generará la salida correcta, como at nighten el caso del inglés. Las aplicaciones que utilizan uno formatDate()o DatePipelos códigos de formato by Bse verán afectadas por este cambio.console.error.ModuleWithProviders. Se ha requerido un parámetro de tipo genérico para que el ModuleWithProviderspatrón funcione con la compilación de Ivy y la canalización de representación, pero antes de esta confirmación, View Engine permitió que se omitiera el tipo genérico. Si un desarrollador está utilizando ModuleWithProviderssin un tipo genérico en el código de su aplicación, una migración de la versión 10 actualizará el código por usted.Sin embargo, si un desarrollador está utilizando View Engine y, dependiendo de una biblioteca que omita el tipo genérico, ahora obtendrá un error de tiempo de compilación similar a:
error TS2314: Generic type 'ModuleWithProviders<T>' requires 1 type argument(s).
En este caso, ngccno lo ayudará (porque es solo Ivy), y la migración solo cubre el código de la aplicación. Debe ponerse en contacto con el autor de la biblioteca para corregir su biblioteca para proporcionar un parámetro de tipo cuando utilizan esta clase. Como solución alternativa, skipLibChecks puede configurarse como false en el archivo .tsconfig o puede actualizar su aplicación para usar Ivy.
Puedes encontrar la versión general de Angular 10 en GitHub. Para actualizar su instalación de Angular puedes ejecutar el comando: ng update @angular / cli @angular / core
Para actualizar su instalación angular actual, puede ejecutar este comando (consulte la Guía de actualización angular aquí ):
ng update @ angular / cli @ angular / core
La microsintaxis en Angular te permite configurar una directiva en una cadena compacta y amigable. El analizador de microsintaxis traduce esa cadena en atributos de <ng-template>. Entonces, en lugar de <ng-template ngFor [ngForOf]="items"><div>{{item}}</div></ng-template escribirás <div *ngFor="let item of items">{{item}}</div>.
Hay cuatro tipos diferentes de enlaces de datos disponibles en Angular:
<button (click)="updateName()">Update button</button><input [(ngModel)]="name"><p>{{ name }}</p><button [disabled]="buttonDisabled"></button>AST es un acrónimo de árbol de sintaxis abstracta. Es una representación de tokens generados a partir de declaraciones y expresiones en un lenguaje de programación. Con el AST, el intérprete o el compilador pueden generar código de máquina o evaluar una instrucción. La plantilla angular AST es una versión transformada y anotada de HTML AST que hace lo siguiente:
*ngFor y [name] en sus versiones canónicas (y bind-name).#) y variables (atributo let-).terser es un kit de herramientas de analizador, gestor y compresor de JavaScript para ES6 +. El equipo de Angular CLI se trasladó a terser en Angular CLI 7.0 para la fase de minificación de la compilación porque uglify-es ya no se mantiene y uglify-js no es compatible con ES6 +.
UrlMatcher es una función para hacer coincidir una ruta con las URL. Puede implementar un comparador de URL personalizado para Route.matcher cuando una combinación de path y pathMatch no es lo suficientemente expresiva.
type UrlMatcher = (segments: UrlSegment[], group: UrlSegmentGroup, route: Route) => UrlMatchResult;
La siguiente coincidencia coincide con los archivos HTML:
content_copyexport function htmlFiles(url: UrlSegment[]) {
return url.length === 1 && url[0].path.endsWith('.html') ? ({consumed: url}) : null;
}
export const routes = [{ matcher: htmlFiles, component: AnyComponent }];
Bazel es un constructor para la CLI angular que fue desaprobada en la versión 10. Aquí hay algunas razones para esta desaprobación:
Angular Language Service es un motor de análisis que se integra en su editor de código y le proporciona una forma de completar, rastrear referencias, errores, sugerencias y navegación dentro de las plantillas angulares.
Funciona con plantillas externas en archivos HTML separados y también con plantillas en línea. Su editor detecta automáticamente que está abriendo un archivo angular.
Luego utiliza el Servicio de idiomas de Angular para leer su tsconfig.jsonarchivo, encontrar todas las plantillas que tiene en su aplicación y luego proporcionar servicios de idiomas para cualquier plantilla que abra.
Está disponible como una extensión para Visual Studio Code, WebStorm y Sublime Text. Puede instalarlo utilizando el siguiente comando:
npm install --save-dev @ angular / language-service
@angular/language-servicees una envoltura alrededor del servicio de lenguaje TypeScript (de manera similar a las envolturas ngtsc o tsc) y extiende el análisis de TypeScript con una comprensión específica de los conceptos angulares. Puede tender un puente entre la clase de componente en Typecript y las expresiones en las plantillas.
Angular ofrece dos formas de compilar su aplicación:
Ivy es una reescritura completa del compilador (y tiempo de ejecución) para:
View Engine es el predecesor de Ivy.
Podemos dividir el trabajo realizado en Ivy en tres categorías, como se indica en el estado de implementación:
@angular/compiler-cli: Tubería de transformador de TypeScript, que incluye dos herramientas de línea de comandos: ngtscyngcc@angular/compiler: Compilador Ivy que convierte decoradores en Ivy@angular/core: Decoradores que pueden ser convertidos por @angular/compiler.Para comprender cómo está configurado el compilador, es útil comprender la arquitectura de Typecript que se encuentra debajo.
El siguiente diagrama muestra elflujo normal del tsc y los pasos para transpilar un archivo .ts en uno .js ( tsces de la CLI de Typecript y compila el proyecto más cercano definido por tsconfig.json).
Aquí hay una breve explicación de este flujo:
asyncmétodos a máquinas de estado, etc.El compilador angular está construido sobre la arquitectura normal de TypeScript y utiliza sus tres fases principales: creación de programas, verificación de tipos y emisión, más un paso de análisis y un paso de resolución:
tsconfig.jsonngtsc.Angular ha introducido dos puntos de entrada del compilador: ngtscy ngcc.
NGTSC compila código compatible con Ivy. Es un transpilador de TypeScript a JavaScript que busca decoradores angulares @Componenty los sustituye con sus contrapartes o instrucciones específicas de tiempo de ejecución angular, como ɵɵdefineComponent. Es una envoltura mínima tsc. ngcfunciona como ngtsccuando el angularCompilerOption enableIvyindicador se establece trueen el tsconfig.jsonarchivo.
Cuando ngtsccomienza a ejecutarse, primero analiza el tsconfig.jsonarchivo y luego crea un archivo ts.Program. Deben suceder varias cosas antes de que se puedan ejecutar las transformaciones descritas anteriormente:
@Componentdecoradores deben resolverse de forma asíncrona. La CLI, por ejemplo, puede querer ejecutar webpack para producir la .cssentrada a la styleUrlspropiedad de a @Component.TypeCheckery toca todos los nodos del programa (una operación bastante costosa).NGCC significa compilador de compatibilidad angular. Convierte módulos pre-Ivy (estilo antiguo) en código compatible con Ivy. Procesa el código que proviene de npm y produce la versión equivalente de Ivy como si se compilara el código ngtsc. ngcctambién se puede ejecutar como parte de un cargador de código como webpack para que los paquetes se puedan node_modulestranspilar sobre la marcha.
Puede ejecutar ngccdespués de cada instalación node_modules agregando un script postinstall npm.
package.json
{
"scripts": {
"postinstall": "ngcc"
}
}
Si estás utilizando Angular 8, que fue el primer paso para Ivy, y desea comenzar un nuevo proyecto con Ivy habilitado, puede usar la bandera --enable-ivy con el comando ng new:
ng new shiny-ivy-app --enable-ivy
El nuevo proyecto se configura automáticamente para Ivy. La enableIvyopción está configurada trueen el archivo del proyecto : tsconfig.app.json.
"angularCompilerOptions": {
"enableIvy": true
}
Y, finalmente, puede ejecutar el compilador ejecutando el ngccomando dentro de la carpeta del proyecto recién creado con node_modules/.bin/ngc.
Luego, puede inspeccionar el código generado dentro de la carpeta dist/out-tsc.
UrlMatcher ahora puede regresarnullundecorated-classes-with-decorated-fields migración no decora clases derivadasSe necesita una funcionalidad de compatibilidad para migrar gradualmente a Ivy sin interrumpir los cambios. Asegura que las bibliotecas Ivy y no Ivy puedan coexistir durante el período de migración.
No todo el código angular se compila al mismo tiempo. Las aplicaciones dependen de bibliotecas compartidas, y esas bibliotecas se publican en npm en su forma compilada y no como código fuente de TypeScript.
Incluso si una aplicación se crea utilizando ngtsc, sus dependencias pueden no haber sido.
Si una biblioteca en particular no fue compilada ngtsc, no tiene propiedades decorativas reificadas en javascript. Vincularlo con una dependencia que no se compiló de la misma manera fallará en tiempo de ejecución.
Dado que el código Ivy solo se puede vincular con otro código Ivy, para compilar la aplicación, todas las dependencias anteriores a Ivy de npm deben convertirse a dependencias Ivy.
Esta transformación debe suceder como un precursor para ejecutarse ngtscen la aplicación, y las futuras operaciones de compilación y vinculación deben realizarse contra esta versión transformada de las dependencias.
La computación cuántica acaba de dar un salto gigante. John M. Martinis, recién galardonado con…
La biografía más vendida del cofundador de Apple, Steve Jobs; escrita por uno de los…
Hubo un tiempo en el que la “seguridad en el hogar” significaba confiar en un…
Elon Musk vuelve a romper todos los esquemas. Los accionistas de Tesla acaban de aprobar…
Los fans de Grand Theft Auto tendrán que esperar un poco más para volver a…
Five Nights at Freddy’s: Into the Pit nos sumerge en un misterioso mundo donde lo…