Конфигурация 'production' не найдена в проекте 'my-lib'

Я строю библиотеку с Angular 6.1.0

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

Все статьи советуют запускать сборку для библиотеки с флагом --prod следующим образом:

ng build my-lib --prod

Однако это выдает ошибку

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

Что, вероятно, правильно, потому что когда я смотрю на angular.json, в проекте библиотеки нет определения для production build configuration. Он присутствует только для проекта приложения.

Ниже приведено то, что я имею в конфигурации сборки для проекта библиотеки, который использует 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"
      }
    }

Итак, вопрос здесь в том, что флаг --prod больше не требуется, и просто запуск ng build m-lib сгенерирует сборку prod?

Глядя на содержимое папки dist, все выглядит так, но я не уверен на 100%. Если кто-то сможет это подтвердить, это будет здорово.

Ответы

Ответ 1

Начиная с версии 6.1, Angular всегда производит производственную сборку нашей библиотеки, то есть в новых версиях Angular нам больше не нужен флаг --prod при его сборке, библиотеки всегда собираются в режиме AOT. Чтобы убедиться, вы можете взглянуть на эти проблемы в репозитории Angular-CLI:

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

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

И эта статья (раздел "Создание библиотеки"):

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

Если вы все еще используете версию 6.0.x (или ниже), вы захотите использовать флаг --prod при сборке библиотеки.

У вас все еще есть возможность передать configuration в качестве параметра при необходимости: ng build --configuration=configuration (см. документы). При необходимости вы можете указать правила сборки в angular.json, например, для сборки production:

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

И команда должна быть ng build --configuration=production.

Ответ 2

В Angular 6+ это ng build --configuration=production

Затем введите конфигурацию производства в 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
        }
      }

Ответ 3

под разделом архитектора ищите "конфигурации", если у вас их нет. попробуйте добавить один, как показано ниже.

"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"
        }
      }
    }