Estoy construyendo una biblioteca con Angular 6.1.0

  • ng new lib-demo
  • ng generate library my-lib

Todos los artículos aconsejan ejecutar la compilación para la biblioteca con un indicador --prod así:

ng build my-lib --prod

Sin embargo, esto arroja un error

Configuration 'production' could not be found in project 'my-lib'.

Lo que probablemente sea correcto porque cuando miro el angular.json no hay una definición para un production build configuration en el proyecto de la biblioteca. Está presente solo para el proyecto de aplicación.

Lo siguiente es lo que tengo bajo la configuración de compilación para el proyecto de biblioteca que usa ng-packagr

"build": {
      "builder": "@angular-devkit/build-ng-packagr:build",
      "options": {
        "tsConfig": "projects/my-lib/tsconfig.lib.json",
        "project": "projects/my-lib/ng-package.json"
      }
    }

Entonces, la pregunta aquí es si el indicador --prod ya no es necesario y solo ejecutar ng build m-lib generará una compilación de productos

Mirando el contenido de la carpeta dist parece que sí, pero no estoy 100% seguro. Si alguien pudiera validar esto, sería genial.

18
Himanshu Arora 13 sep. 2018 a las 21:13

4 respuestas

La mejor respuesta

A partir de la versión 6.1, Angular siempre realiza una compilación de producción de nuestra biblioteca, es decir, en las nuevas versiones de Angular ya no necesitamos el indicador --prod al compilarlo, las bibliotecas siempre se construyen en modo AOT. Para asegurarse, puede echar un vistazo a estos problemas en el repositorio de Angular-CLI:

https://github.com/angular/angular-cli/issues/12290

https://github.com/angular/angular-cli/issues/12226

Y este artículo (sección "Creación de la biblioteca" ):

https://blog.angularindepth.com/creating-a-library-in-angular-6-87799552e7e5

Si todavía está utilizando la versión 6.0.x (o inferior), querrá usar el indicador --prod al crear su biblioteca.

Aún tiene la opción de pasar un configuration como parámetro si es necesario: ng build --configuration=configuration (consulte documentos). Si es necesario, puede especificar reglas de compilación en angular.json, por ejemplo, para la compilación production:

"configurations": {
    "production": {
        // Options here
    }
}

Y el comando debería ser ng build --configuration=production.

20
Commercial Suicide 7 oct. 2019 a las 07:47

Debajo de la sección del arquitecto busque "configuraciones", si no tiene ninguna. intente agregar uno como a continuación.

"configurations": {
      "production": {
      "project": "projects/PROJECT-NAME/ng-package.json"
    }
}

your architect section should like this



"architect": {
    "build": {
      "builder": "@angular-devkit/build-ng-packagr:build",
      "options": {
        "tsConfig": "projects/PROJECT-NAME/tsconfig.lib.json",
        "project": "projects/PROJECT-NAME/ng-package.json"
      },
      "configurations": {
        "production": {
          "project": "projects/PROJECT-NAME/ng-package.json"
        }
      }
    }
0
user2306594 13 jun. 2019 a las 20:27

El --prod ya no es necesario ya que la biblioteca siempre se construye en modo AOT y sin el --prod Solo necesita ejecutar ng build

0
Rahul Tokase 28 mar. 2020 a las 16:16

En Angular 6+ es ng build --configuration=production

Luego ponga una configuración de producción en angular.json

 "configurations": {
        "production": {
          "fileReplacements": [
            {
              "replace": "src/environments/environment.ts",
              "with": "src/environments/environment.prod.ts"
            }
          ],
          "optimization": true,
          "outputHashing": "all",
          "sourceMap": false,
          "extractCss": true,
          "namedChunks": false,
          "aot": true,
          "extractLicenses": true,
          "vendorChunk": false,
          "buildOptimizer": true
        }
      }
16
HP Bruna 13 sep. 2018 a las 18:35