Радуйтесь, мои коллеги-разработчики!Наконец, после 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
даже из корня проекта.Конечно, это всего лишь обходной путь, но я рад, что это можно сделать по крайней мере.Счастливые Дни!