Я разрабатываю приложение и кучу библиотек, которые будут использоваться в приложении. Все они недавно обновлены до Angular 9. Библиотеки настроены на сборку без ivy, а приложение настроено на сборку с ivy, что соответствует рекомендациям по обновлению. Процесс локальной разработки, которому я следовал, выглядит следующим образом:
- Создайте библиотеку и приложение с помощью --watch.
- Внесите изменения в библиотеку. После успешной сборки библиотеки скопируйте dist / my-lib и вставьте его в папку node_modules приложения (это запустит сборку приложения).
Это работало до Angular 8 и ниже, но с Angular 9 ошибки сборки приложения говорили: ОШИБКА в Пытался перезаписать путь / node_modules / my-lib / lib / services / payment.service.d.ts .__ ivy_ngcc_bak с помощью ngcc файл резервной копии, который запрещен.
Итак, теперь я должен дополнительно сделать следующее -
- Остановите сборку приложения.
- Удалите библиотеку из node_modules приложения, а затем скопируйте и вставьте новую.
- Снова запустите приложение.
В документах angular говорится об использовании ссылки npm https://angular.io/guide/creating-libraries#linked-libraries. Но я не могу понять:
конфигурация библиотеки package.json указывает на правильные точки входа. Например, main должен указывать на файл JavaScript, а не на файл TypeScript.
Я попробовал ссылку npm, но это не запускает сборку приложения, и мои изменения не отражаются. Я хотел бы знать, как решить проблему с ссылками на npm или есть ли лучший способ совместной работы с библиотеками и приложениями.
Моя библиотека package.json выглядит так (поскольку я работаю над клиентским приложением, я публикую только структуру package.json):
{
"name": "my-lib",
"version": "1.2.0",
"description": "description",
"repository": {
"url": "http://private-nexus-url"
},
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"build-ci": "npm run test-headless && npm run sonar && npm run publish",
"test-headless": "ng test --watch=false --browsers=ChromeHeadlessNoSandbox --code-coverage",
"sonar": "sonar-scanner",
"test": "ng test --code-coverage",
"lint": "ng lint",
"e2e": "ng e2e",
"build-lib": "ng build --prod my-lib",
"publish": "npm run build-lib && cd dist/my-lib && npm publish",
"postinstall": "ngcc"
},
"dependencies": {
"@angular/animations": "^9.1.6",
"@angular/common": "^9.1.6",
"@angular/compiler": "^9.1.6",
"@angular/core": "^9.1.6",
"@angular/forms": "^9.1.6",
"@angular/platform-browser": "^9.1.6",
"@angular/platform-browser-dynamic": "^9.1.6",
"@angular/router": "^9.1.6",
...
},
"devDependencies": {
"@angular-devkit/build-angular": "^0.901.5",
"@angular-devkit/build-ng-packagr": "~0.901.5",
"@angular/cli": "~9.1.5",
"@angular/compiler-cli": "~9.1.6",
"@angular/language-service": "~9.1.6",
...
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.ts": [
"prettier --write",
"git add"
]
}
}
npm i
? Также закройте все терминалы или редакторы, открытые в этом каталоге. - person Richard Dunn   schedule 09.09.2020