我只是想构建一个模块/组件并将其作为 JS 包提供。它构建:
@Component({
selector: 'app-component-overview',
template: '<button><ng-content></ng-content></button>',
})
export class ButtonComponent {}
@NgModule({
declarations: [ButtonComponent],
})
export class AppModule {}
问题是在将其构建为 javascript 包之后。当我尝试将其导入另一个角度项目时。我得到:
//ERROR in ... error TS2306 '...' is not a module.
loadChildren: () => import('...').then(m=>m.ButtonModule)
也许我错过了这里的重点,事情在角度上有所不同,拥有 webpack 控制使它变得更容易,但我想避免引入自定义构建器并尽可能少地摆弄设置。
问题是,是否有一个有据可查的方法来捆绑模块甚至独立组件以作为 JS 捆绑在我的项目之外使用?除了同一项目中已经存在的重用和延迟加载的高级解释之外,我找不到任何有用的东西。
您似乎正在将此模块构建为应用程序的一部分,该应用程序应该在浏览器中运行。但您正在寻找的是将此模块构建为库的一部分,可以在其他项目中重复使用。
请参阅此官方 Angular 指南,了解如何创建库。
经过几个小时的浏览。我明白了。
@json-derulo 给出的答案是解决方案的一部分,但还有更多步骤可以实现此目的。
//my-lib-routing.module.ts
import { NgModule} from "@angular/core";
import { RouterModule } from "@angular/router";
import { MyLibComponent } from "./my-lib.component";
const routes= [
{ path: '', component: MyLibComponent },
];
@NgModule({
imports: [
RouterModule.forChild(
routes,
)
// other imports here
],
// providers: [RouterModule],
exports: [RouterModule]
})
export class myLibRoutingModule { }
//
import { NgModule } from '@angular/core';
import { myLibRoutingModule } from './my-lib-routing.module';
import { MyLibComponent } from './my-lib.component';
@NgModule({
declarations: [MyLibComponent],
imports: [
myLibRoutingModule
],
})
export class MyLibModule { }
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{path: 'test', loadChildren: () => import('my-lib').then(m=>m.MyLibModule)}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
现在,这更多的是学习练习,捆绑包几乎翻了一番。使用模块联合你会获益更多。但这是我们的一个用例。无论如何,步骤在这里,如果有人无法重现,请告诉我。
您想要做的是创建一个 Angular 自定义 Web 组件。 我在这里找到了一个关于如何执行此操作的很棒的教程:
https://blog.kalvad.com/export-your-angular-component-as-a-web-component/
将其升级到最近的 Angular 对我来说非常顺利。 如果您遇到任何挑战,我将发布一个更新的示例。