Skip to content

Instantly share code, notes, and snippets.

@paul58914080
Last active March 13, 2020 03:16
Show Gist options
  • Save paul58914080/07dca0d6dde5225bf33c18032581a5a3 to your computer and use it in GitHub Desktop.
Save paul58914080/07dca0d6dde5225bf33c18032581a5a3 to your computer and use it in GitHub Desktop.
create-todo-micro-app

$ ng g application create-todo --style=scss --prefix=create --viewEncapsulation=ShadowDom --routing=false

Only delete the content inside projects/create-todo/app and not the app directory

$ ng g module create-todo --flat=true --project=create-todo

$ ng g component create-todo --module=create-todo --selector=create-todo --entryComponent=true --flat=true --project=create-todo

$ ng g service create-todo --flat=true --project=create-todo

import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {HomeComponent} from './home.component';
import {CreateTodoModule} from '../../../projects/create-todo/src/app/create-todo.module';
@NgModule({
declarations: [ HomeComponent ],
imports: [
CommonModule,
CreateTodoModule
]
})
export class HomeModule {
}
<div class="container-fluid">
<create-todo></create-todo>
</div>

$ ng add @angular/elements --project=create-todo

import {Injector, NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {CreateTodoComponent} from './create-todo.component';
import {BrowserModule} from '@angular/platform-browser';
import {createCustomElement} from '@angular/elements';
@NgModule({
declarations: [ CreateTodoComponent ],
imports: [
CommonModule,
BrowserModule
],
entryComponents: [ CreateTodoComponent ],
bootstrap: [ CreateTodoComponent ],
exports: [ CreateTodoComponent ]
})
export class CreateTodoModule {
constructor(private injector: Injector) {
}
ngDoBootstrap() {
const createTodoElement = createCustomElement(CreateTodoComponent, { injector: this.injector });
customElements.define('create-todo-element', createTodoElement);
}
}
const fs = require('fs-extra');
const concat = require('concat');
const del = require('del');
(async function build() {
const files = [
'dist/create-todo/runtime-es2015.js',
'dist/create-todo/polyfills-es2015.js',
'dist/create-todo/main-es2015.js'
];
await del(['dist/elements/create-todo.js']);
await fs.ensureDir('dist/elements');
await concat(files, 'dist/elements/create-todo.js');
})();
export const environment = {
production: false,
loadBootstrap: true
};
export const environment = {
production: true,
loadBootstrap: false
};
import {Injector, NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {CreateTodoComponent} from './create-todo.component';
import {BrowserModule} from '@angular/platform-browser';
import {createCustomElement} from '@angular/elements';
import {environment} from '../environments/environment';
@NgModule({
declarations: [ CreateTodoComponent ],
imports: [
CommonModule,
BrowserModule
],
entryComponents: [ CreateTodoComponent ],
bootstrap: environment.loadBootstrap? [ CreateTodoComponent ] : [],
exports: [ CreateTodoComponent ]
})
export class CreateTodoModule {
constructor(private injector: Injector) {
}
ngDoBootstrap() {
const createTodoElement = createCustomElement(CreateTodoComponent, { injector: this.injector });
customElements.define('create-todo-element', createTodoElement);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Web component</title>
</head>
<body>
<create-todo-element></create-todo-element>
<script type='application/javascript' src='create-todo.js'></script>
</body>
</html>

$ npm i --save @angular-builders/custom-webpack

"create-todo": {
"projectType": "application",
"architect": {
"build": {
"builder": "@angular-builders/custom-webpack:browser",
"options": {
"customWebpackConfig": {
"path": "projects/create-todo/build/extra-webpack.config.js",
"mergeStrategies": {
"externals": "replace"
}
}
}
}
}
}
module.exports = {
output: {
jsonpFunction: 'webpackJsonpCreateTodo'
}
};
"micro-frontend-todo": {
"architect": {
"build": {
"options": {
"scripts": [
{
"input": "node_modules/document-register-element/build/document-register-element.js"
},
"dist/elements/create-todo.js"
]
}
}
}
}
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'todo-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {
loadElement = false;
constructor() { }
ngOnInit() {
}
}
@import url(‘https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css');
@import url("https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css");
@import url("https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment