Я смотрю на использование этот генератор Yeoman в качестве стартера для мини-проекта, содержащего несколько многоразовых форм компоненты, которые я могу опубликовать. Генератор создает модуль и примерный компонент, директиву, канал и службу, настроенные для использования (вы можете увидеть файлы шаблонов для генератора здесь).
Затем я использовал npm link
, чтобы разрешить мне сгенерировать сгенерированный проект в моем приложении Angular, который, как представляется, работает нормально, как показано ниже, из каталога проекта node_modules
;
Затем я импортировал модуль в свой модуль в моем приложении Angular;
import { SampleModule } from 'my-test-library';
@NgModule({
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule,
NgbModule,
MomentModule,
SampleModule // <-- Imported Here
],
declarations: [],
providers: []
})
export class TasksModule { }
Этот импорт модуля вызывает ошибку Uncaught Error: Unexpected value 'SampleModule' imported by the module 'TasksModule'
, и я не могу понять, почему.
Есть две вещи, которые я замечаю при сравнении библиотеки, которую я импортировал с другой сторонней библиотекой (например, ng-bootstrap
)
- Поскольку я использовал
npm link
для импорта библиотеки, чтобы я мог протестировать ее во время разработки, была импортирована вся структура папок (а не только каталогdist
). Я предполагаю, что это означает, что импортируемый код не импортируется поTasksModule
. Если я попытаюсь импортироватьmy-test-library/dist
, я получаю модуль, который не может быть найден. - В отличие от
ng-bootstrap
в моей библиотеке отсутствуют файлы*.metadata.json
на выходе.
Моя библиотека tsconfig.json
выглядит следующим образом (без изменений от установки генератора)
{
"compilerOptions": {
"noImplicitAny": true,
"module": "commonjs",
"target": "ES5",
"emitDecoratorMetadata": true, <-- Checked to ensure this was true
"experimentalDecorators": true,
"sourceMap": true,
"declaration": true,
"outDir": "./dist"
},
"files": [
"typings/index.d.ts",
"index.ts"
],
"exclude": [
"node_modules",
"dist"
]
}
На основе этих элементов или чего-то еще, чего мне не хватает, чтобы заставить это работать? Спасибо!
Изменить: sample. *.d.ts файлы (по умолчанию после установки)
// sample.component.d.ts
export declare class SampleComponent {
constructor();
}
// sample.directive.d.ts
import { ElementRef } from '@angular/core';
export declare class SampleDirective {
private el;
constructor(el: ElementRef);
}
Изменить 2
Поэтому я попытался сопоставить каталог dist
(my-test-library/dist
) с корнем node_modules
и импортировать модуль оттуда, и он работал нормально.
- Есть ли способ, используя
npm link
, импортировать только каталог dist (в корневой каталог)? - Я также не понимаю, почему обновление моего исходного импорта до
import { SampleModule } from 'my-test-library/dist';
не работает?