Библиотека Angular 6 - Сложность символической ссылки в новый проект - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть библиотека Angular 6, из которой я пытаюсь экспортировать отдельные компоненты. Очень похоже на Google Material Design.

Я следовал этому руководству: https://blog.angularindepth.com/creating-a-library-in-angular-6-87799552e7e5 и следовал этим рекомендациям: https://github.com/angular/angular-cli/wiki/stories-create-library

Когда я пытаюсь импортировать библиотеку в новый проект (созданный angular cli), я сталкиваюсь с ошибками.

библиотеки package.json: { "name": "sample-library", "version": "0.0.1", "peerDependencies": { "@angular/common": "^6.0.0-rc.0 || ^6.0.0", "@angular/core": "^6.0.0-rc.0 || ^6.0.0", "sass-flex-grid": "1.0.4", "rxjs": "6.2.2", "ng-inline-svg": "8.0.1" }, "dependencies": { } }

пакет верхнего уровня обоих проектов.json "@angular/animations": "6.0.3", "@angular/common": "6.1.4", "@angular/compiler": "6.1.4", "@angular/core": "6.1.4", "@angular/cli": "6.1.5"

Я использую npm link для импорта моей библиотеки в другой проект.

Через некоторое время поиск в Google начал ощущаться как проблема с символической ссылкой, поэтому я добавил "preserveSymlinks": true, в свой файл angular.json моего нового проекта, в который я импортирую библиотеку. Это создает новую группу ошибок:

ERROR in ./node_modules/imported-library/fesm5/imported-library.js
Module not found: Error: Can't resolve 'ng-inline-svg' in 
'/Users/mp945gl/Projects/new/new/node_modules/imported-library/fesm5'

ERROR in ./node_modules/imported-library/fesm5/imported-library.js
Module not found: Error: Can't resolve 
'rxjs/add/observable/combineLatest' in 
'/Users/mp945gl/Projects/new/new/node_modules/imported-library/fesm5'

ERROR in ./node_modules/imported-library/fesm5/imported-library.js
Module not found: Error: Can't resolve 'rxjs/add/observable/of' in 
'/Users/mp945gl/Projects/new/new/node_modules/imported-library/fesm5'

ERROR in ./node_modules/corteva-component-library/fesm5/imported- 
library.js
Module not found: Error: Can't resolve 'rxjs/add/observable/zip' in 
'/Users/mp945gl/Projects/new/new/node_modules/imported-library/fesm5'

Кажется, что модуль неправильно экспортирует rxjs или зависимости inline-svg; Из устранения неполадок, кажется, это наиболее релевантные фрагменты файлов

public_api.ts : 
export * from './lib/imported-library.service';
export * from './lib/imported-library.module';
export * from './lib/components/accordion/accordion.module';
export * from './lib/components/form-elements/checkbox/checkbox.module';

tsconfig.lib.json
"compilerOptions": {
  "baseUrl": "./",
  "outDir": "../out-tsc/lib",
  "target": "es5",
  "module": "es2015",
  "moduleResolution": "node",
  "declaration": true,
  "sourceMap": true,
  "inlineSources": true,
  "emitDecoratorMetadata": true,
  "experimentalDecorators": true,
  "importHelpers": true,
  "types": [],
  "lib": [
    "dom",
    "es2015"
],
"paths": {
  "@angular/*": [
    "../node_modules/@angular/*"
  ],
  "rxjs/*": ["../node_modules/rxjs/*"]
  }
}

Я действительно чувствую, что это связано с символической ссылкой. Любая помощь будет невероятно оценена. У меня нет идей.

1 Ответ

0 голосов
/ 02 ноября 2018

Попробуйте добавить свойство preserveSymlinks со значением true в ваш angular.json, как показано ниже

"projects": {
  "<your app name>": {
    ...
    "projectType": "application",
    ...
    "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
              "options": {
                 ...
                 "preserveSymlinks": true,
                 ...
              },
              "configurations": {
                 "production": {
                    ...
                    "preserveSymlinks": true,
                    ...
                 }
...