Angular CLI Workspace Bajo la Lupa

Nicolás Avila
Angular Chile
Published in
5 min readJun 13, 2018

Para poder trabajar con Angular utilizamos nuestra querida herramienta Angular CLI ❤️. Angular CLI es un proyecto desarrollado por la misma gente de Google para facilitarnos el trabajo de crear una estructura nueva de proyecto, creación de componentes / servicios / directivas, servir la aplicación en un entorno de desarrollo y realizar build, entre otras útiles tareas 💻.
Para que Angular CLI sepa que hacer, se vale de un archivo llamado Angular CLI Workspace. Este archivo se encuentra dentro de la estructura de nuestro proyecto y se identifica con el nombre angular.json.

En esta publicación revisaremos la estructura, contenido y función de cada uno de sus atributos. Se asume la ejecución previa de ng new angular-workspace-test para generar una nueva aplicación angular y así revisar el contenido del archivo angular.json.

Cada uno de los contenidos del archivo Angular CLI Workspace se encuentra definido en la documentación oficial de angular-cli

Estructura y función

Este archivo se encuentra en la carpeta raíz de nuestra aplicación Angular. Corresponde a un archivo que se crea al momento de generar un nuevo proyecto con el comando ng new NOMBRE_PROYECTO. Antiguamente este archivo se llamaba angular-cli.json, pero desde la versión 6.0.0 de Angular CLI cambió de nombre (y de estructura).
Si migramos un proyecto a Angular 6 con el comando ng update, Angular CLI tomará el contenido del archivo angular-cli.json y lo copiará en un nuevo archivo angular.json, respetando la nueva estructura y eliminando el archivo con la estructura antigua.

Ubicación del archivo Angular CLI Workspace en un proyecto generado

La función de este archivo es servir de guía para Angular CLI, declarando una serie de atributos que permiten a esta herramienta realizar operaciones sobre nuestra aplicación. A continuación revisaremos cada uno de los atributos de este archivo:

$schema

Este atributo de tipo string define el JSON Schema a utilizar en este archivo. JSON Schema es un vocabulario que permite anotar y validar documentos JSON. Permite a Angular CLI respetar y asegurar la especificación de Angular Workspace Schema declarado en node_modules/@angular/cli/lib/config/schema.json.

Parte del contenido de Angular CLI Schema ubicado en el módulo @angular/cli

La especificación de una estructura define todos los atributos posibles que puede contener el archivo angular.json, así como sus valores posibles. También ayuda al autocompletado 👍.

version

Número entero que declara cual es la versión actual de la especificación de Angular Workspace. Actualmente es la 1.

newProjectRoot

String que corresponde al path donde los nuevas aplicaciones o librerías serán creadas.

¿Por qué múltiples proyectos? Si nos fijamos en el atributo projects, vamos a tener 2 proyectos. Esto es porque Angular CLI creará un proyecto principal basado en el nombre del proyecto que declaramos en la ejecución del comando ng new. También se genera un proyecto e2e (End-to-End Testing), ya que corresponde a un tipo de testing que utiliza Protractor totalmente desacoplado de la aplicación principal.

defaultProject

String que declara el nombre del proyecto principal a utilizar.

projects

Objeto que declara la configuración para cualquier proyecto en nuestro workspace. Por defecto vienen 2 proyectos: el proyecto principal que hemos generado y un proyecto e2e (End-To-End) para realizar testing.
Cada proyecto es configurado con los siguientes atributos:

  • root: Propiedad que define cual es el directorio principal con todos los archivos de los proyectos. Normalmente es una string vacía.
  • sourceRoot: Propiedad que especifica el directorio donde se encontrará el código de fuente escrito por nosotros.
  • projectType: Propiedad que especifica el tipo de proyecto. Desde la versión 6 de Angular CLI es posible generar proyectos internos que viven dentro de nuestro proyecto principal, así como librerías (abordaremos la creación de librerías utilizando Angular en un post futuro 😃).
  • prefix: Propiedad que declara el prefijo utilizado al momento de crear nuestros componentes y directivas. La guía de estilo de Angular especifica el uso de un prefijo para así evitar posible colisiones de nombres.
  • schematics: Propiedad que permite definir la configuración del módulo de Schematics a nivel de proyecto.
  • architect: Cada proyecto permite definir una serie de acciones como el building, serve de la aplicación, testing, linting, entre otros. Estas tareas están basadas en “builders” predeterminados definidos dentro del módulo de Angular CLI. Estas configuraciones son llamadas Architect Targets
Ejemplo del Architect Target para el comando ng serve y sus posibles configuraciones

Atributos no presentes por defecto

Existen ciertos atributos que no se encuentran presentes en un archivo Angular CLI Workspace por defecto. Los describiremos brevemente a continuación:

cli

Objeto que permite definir opciones de configuración para Angular CLI. Posee los siguientes atributos:

  • defaultCollection: Propiedad que permite definir que set de Schematics está en uso. Permite declarar el uso de Schematics de terceras partes.
  • packageManager: Propiedad que permite declarar el package manager a utilizar. Comúnmente se utiliza npm, pero también es posible declarar otro como yarn.
  • warnings: Propiedad que permite manejar los warnings que aparecen ante la ejecución de comandos de Angular CLI.
Ejemplo de warning que indica version mismatch en la ejecución de un comando de Angular CLI

schematics

Para generar los archivos y sus relaciones, Angular se vale del módulo schematics, que permite construir los archivos respetando la estructura necesaria. Este módulo le dice a Angular CLI, por ejemplo, cómo debe generar la estructura de un nuevo componente.
En esta propiedad es posible declarar configuraciones para el módulo de schematics particulares. Para más información de Schematics, pueden visitar el repositorio oficial de angular-cli

Espero que hayas disfrutado esta publicación tanto como disfruté yo redactándola 😃. Recuerden que si tienen alguna duda pueden contactarme a través de mi Twitter @nicoavila_a.

Si te gustó la publicación, compártela y deja algunos claps 👏

--

--

Nicolás Avila
Angular Chile

MS Audiologist. Clinical Informatics Manager at Clínica Alemana de Santiago. Father, Dog Lover, 8-Bit Appreciator & Synth Geek