Angular CLI 6: где разместить библиотечные зависимости - PullRequest
0 голосов
/ 05 мая 2018

Я конвертирую библиотеку ( ng-app-state ), чтобы использовать угловой cli, теперь, когда v6 поддерживает библиотеки (ууу!).

После скаффолдинга и копирования в некотором коде мой первый вопрос:

Как / где я могу добавить сторонние зависимости?

К package.json или projects/ng-app-state/package.json?

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Сторонние зависимости должны быть помещены в dependencies из projects/ng-app-state/package.json

Однако если сторонние зависимости также поддерживают ng 6, то у вас другой вопрос и более сложный, выходящий за рамки этого вопроса. Я кратко скажу, что вам, возможно, придется вызывать ng update для их библиотек или разрабатывать схемы, которые вызывают их, которые ожидают присутствия их версии ng 6.

0 голосов
/ 18 августа 2018

Оказывается, ответ типа "оба". Понимание ответа исходит из этого:

  • package.json - это то, что будет использоваться во время разработки. Вы фактически устанавливаете здесь все свои библиотеки для собственного использования, в том числе те, которые также потребуются пользователям. У вас должен быть только каталог node_modules/ в корне вашего проекта, а не в каталоге библиотеки (поэтому запускайте только npm install и аналогичные здесь).
  • projects/ng-app-state/package.json - это то, что будет развернуто в npm (с некоторыми дополнительными полями, добавленными в процессе сборки). Поэтому скопируйте dependencies и / или peerDependencies, которые понадобятся пользователям вашей библиотеки. Нет смысла ставить devDependencies здесь.

Это полный ответ. Читайте дальше, чтобы увидеть пример.

В моем случае package.json имеет длинный список из многих dependencies и devDependencies (вы можете увидеть это здесь ), но все это влияет только на меня (и любого, кто хочет внести свой вклад до ng-app-state). projects/ng-app-state/package.json намного меньше, и это то, что влияет на пользователей моей библиотеки:

{
  "name": "ng-app-state",
  "version": "8.0.0",
  "author": "Simonton Software",
  "license": "MIT",
  "repository": "simontonsoftware/ng-app-state",
  "peerDependencies": {
    "@angular/common": ">=6.0.0 <7.0.0",
    "@angular/core": ">=6.0.0 <7.0.0",
    "@ngrx/store": ">=6.0.0 <7.0.0",
    "micro-dash": ">=3.5.0 <4.0.0"
  }
}

После запуска ng build np-app-state --prod для генерации того, что будет выпущено в npm, вот что заканчивается в dist/ng-app-state/ (что и должно быть опубликовано):

{
  "name": "ng-app-state",
  "version": "8.0.0",
  "author": "Simonton Software",
  "license": "MIT",
  "repository": "simontonsoftware/ng-app-state",
  "peerDependencies": {
    "@angular/common": ">=6.0.0 <7.0.0",
    "@angular/core": ">=6.0.0 <7.0.0",
    "@ngrx/store": ">=6.0.0 <7.0.0",
    "micro-dash": ">=3.5.0 <4.0.0"
  },
  "main": "bundles/ng-app-state.umd.js",
  "module": "fesm5/ng-app-state.js",
  "es2015": "fesm2015/ng-app-state.js",
  "esm5": "esm5/ng-app-state.js",
  "esm2015": "esm2015/ng-app-state.js",
  "fesm5": "fesm5/ng-app-state.js",
  "fesm2015": "fesm2015/ng-app-state.js",
  "typings": "ng-app-state.d.ts",
  "metadata": "ng-app-state.metadata.json",
  "sideEffects": false,
  "dependencies": {
    "tslib": "^1.9.0"
  }
}
0 голосов
/ 11 мая 2018

Следует добавить в package.json как peerDependencies

...