Skip to content

patrikx3/angular-compile

Repository files navigation

NPM Donate for Corifeus / P3X Contact Corifeus / P3X Corifeus @ Facebook Uptime Robot ratio (30 days)

πŸ†– Angular Dynamic Compile - Convert strings to Angular components v2024.10.104

Bugs are evidentβ„’ - MATRIX️

NodeJS LTS is supported

Built on NodeJs version

v22.3.0

Built on Angular

18.0.5

Description

WARNING

Angular has changed, so it stricts many things for dynamic compilation. The only solution right now, is to simple copy the code into your code and it will work (like on https://angular-compile.corifeus.com/).

The code you just copy into your project is here:
https://github.com/patrikx3/angular-compile/tree/master/projects/angular-compile/src/lib

The package on the NPM is the pure TypeScript code. Not built using Angular.

Use case

Dynamically compile standard strings to fully functional Angular components. Supports imports, exports, and standard context.

Install

npm install --save p3x-angular-compile
# or
yarn add p3x-angular-compile

Check out how it works and code

https://angular-compile.corifeus.com

https://github.com/patrikx3/angular-compile/blob/master/src/app/app.component.ts

IMPORTANT

Make sure AOT is disabled in the angular.json:

{ 
    "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist/workspace",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "tsconfig.app.json",
            
            // make sure it is false
            "aot": false,

            "assets": [
              "src/favicon.ico",
              "src/assets"
            ],
            "styles": [
              "src/styles.scss"
            ],
            "scripts": []
          }
    }
}

Minimum build requirement arguments

ng build --aot=false --build-optimizer=false

Usage

import { CompileModule} from "p3x-angular-compile"

// the module settings
@NgModule({
    imports: [
        CorifeusWebMaterialModule, // Optional
        CompileModule, // Required
    ],
    declarations: [
        Page,
    ],
    providers: [
    ],
    bootstrap: [ Page ]
})
export class Module { };

Template

 <span 
 
 <!--- Not required -->
 *ngIf="isEnabled" 

 <!--- Required -->
 [p3x-compile]="template"

 <!--- Required -->
 [p3x-compile-ctx]="this"

 <!--- Not required, will just throw the component's exception if not provided -->
 [p3x-compile-error-handler]="handleCompileErrorHandler"

 <!--- Not required -->
 [p3x-compile-module]="dataModule"
 >     
</span>

Code

// A page example
export class Page {
    
    isEnabled: boolean = true;
    
    dataModule : any =  {
        //schemas: [CUSTOM_ELEMENTS_SCHEMA],
        //declarations: [],
        imports: [
            MatButtonModule
        ],
        exports: [       
        ]
    }

    template: string = "<button mat-button mat-raised-button (click)="context.alert()">Dynamic template</button>";

    handleCompileErrorHandler(error: Error) {
        console.error(error)
    }

    alert() {
        alert('ok');
    }
}

Options

Reference for the Angular module settings which are available.

Dev environment end test

npm install -g yarn
git clone https://github.com/patrikx3/angular-compile.git
cd angular-compile
npm install
npm run start

http://localhost:4200

Errors

Type x is part of the declarations of 2 modules

Basically, you need a shared component.

https://stackoverflow.com/questions/42993580/angular-2-type-childcomponent-is-a-part-of-the-declarations-of-2-modules-par

AOT + JIT

Since Angular 5.x.x +

We cannot use AOT + JIT at once.

Info

angular/angular#20156 (comment)

On the issue, you can see:

To reduce the payload, we do not ship the compiler in AOT.

So right now, it is not possible.

Although, there are some hacks, but you are on your own...
angular/angular#20156 (comment)

Size

If you want very small bundle, use gzip.


Support Our Open-Source Project ❀️

If you appreciate our work, consider starring this repository or making a donation to support server maintenance and ongoing development. Your support means the world to usβ€”thank you!

Server Availability

Our server may occasionally be down, but please be patient. Typically, it will be back online within 15-30 minutes. We appreciate your understanding.

About My Domains

All my domains, including patrikx3.com and corifeus.com, are developed in my spare time. While you may encounter minor errors, the sites are generally stable and fully functional.

Versioning Policy

Version Structure: We follow a Major.Minor.Patch versioning scheme:

  • Major: Corresponds to the current year.
  • Minor: Set as 4 for releases from January to June, and 10 for July to December.
  • Patch: Incremental, updated with each build.

Important Changes: Any breaking changes are prominently noted in the readme to keep you informed.


P3X-ANGULAR-COMPILE Build v2024.10.104

NPM Donate for Corifeus / P3X Contact Corifeus / P3X Like Corifeus @ Facebook