npm опубликовать для Angular Library - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть «библиотека ng» с проектами lib, tester и e2e.Когда я запускаю 'ng build', он упаковывает все 3 проекта в 'dist'.Мне нужно опубликовать только проект lib.Я знаю, что 'cd' для 'dist / lib' и 'npm publish' работает, но у меня нет этой опции, так как наша сборка CI делает только 'npm publish' в корне проекта.Поэтому мой вопрос заключается в том, как добиться публикации из корня только для проекта lib?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Радуйтесь, мои коллеги-разработчики!Наконец, после 5 дней стуча головой об этой проблеме, у нас есть решение!Это все еще «обходной путь», так как не существует четкого способа, которым текущая версия «npm» (по состоянию на февраль 2009 года) поддерживает определение каталога публикации «по умолчанию» через package.json - это было бы идеально и проще.Итак, здесь -

Решение

Запустите ng build для корневого проекта ng library.Это создаст папку dist с проектом library и проектом tester.Откройте dist/your-library-project/package.json - это package.json, который ng-packager генерирует на основе package.json вашей библиотеки.

Скопируйте автоматически сгенерированные атрибуты из dist/your-library-project/package.json в свой корень /package.json

"main": "bundles/your-library-project.umd.js",
"module": "fesm5/your-library-project.js",
"es2015": "fesm2015/your-library-project.js",
"esm5": "esm5/your-library-project.js",
"esm2015": "esm2015/your-library-project.js",
"fesm5": "fesm5/your-library-project.js",
"fesm2015": "fesm2015/your-library-project.js",
"typings": "your-library-project.d.ts",
"metadata": "your-library-project.metadata.json",
"sideEffects": false,
"dependencies": {
"tslib": "^1.9.0"
}

Измените все пути относительно корня package.json.Так

"main": "bundles / your-library-project.umd.js",

становится

"main": "dist / your-library-project / bundles / your-library-project.umd.js",

По сути, это говорит npm, что когда он импортирует ваш библиотечный модуль в другое приложение,точка входа находится в dist/your-library-project/bundles/your-library-project.umd.js - что позволяет веб-приложениям импортировать модуль следующим образом:

import {YourLibraryModule} from 'your-library';

Кроме того, в зависимости от того, какие другие атрибуты есть в вашем корне package.json, возможно, потребуется дальнейшее исправление.Например, мне пришлось избавиться от всех dependencies, которые не были напрямую использованы проектом library.Плюс превратить библиотеки dependencies в peerDependencies или devDependencies в зависимости от того, для чего это было.Кроме того, корневой проект Angular angular.json пришлось обновить, чтобы удалить проект tester.Я создал еще один проект angular.json в tester, чтобы сделать его приложением Angular отдельно от проекта library, который не публикуется.

После всех этих изменений я наконец-то смог запуститьnpm publish из корня моего проекта и публикую только dist/your-library-project.Это очень важно для меня, так как шаг «Публикация» моего CI-сервера может выполнить npm publish только из корня проекта.С этими изменениями я могу опубликовать только модуль library даже из корня проекта.Конечно, это всего лишь обходной путь, но я рад, что это можно сделать по крайней мере.Счастливые Дни!

0 голосов
/ 01 февраля 2019

У вас есть два варианта, но оба требуют изменения вашего скрипта CI:

Опция 1:

$ npm publish <path-to-lib-folder>

Опция 2:

$ cd <path-to-lib-folder>
$ npm publish
...