npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ngx-hybrid-helper

v0.0.3

Published

Help to launch an hybrid app with AngularJS and Angular

Downloads

7

Readme

ngx-hybrid-helper

Overview

This package helps to bootstrap an AngularJS application with Angular 5, so that you can migrate easily.

This is certainly not the only way to run an hybrid application, but it worked for me for many applications.

There are few steps to follow, but it can save some of your time, that I've lost to find this configuration.

You should read the official angular documentation about how to upgrade AngularJS apps https://angular.io/guide/upgrade

Prerequisites

  • Node v8+
  • npm v5+

Steps

You have to do the following steps so that it can work.

step-1 Install package

Install the ngx-hybrid-helper package :

npm install ngx-hybrid-helper --save

step-2 Install Angular dependencies

Install the following Angular dependencies :

"@angular/common": "~5.1.0"
"@angular/compiler": "~5.1.0",
"@angular/core": "~5.1.0",
"@angular/platform-browser": "~5.1.0",
"@angular/platform-browser-dynamic": "~5.1.0",
"@angular/upgrade": "~5.1.0",
"core-js": "~2.5.3",
"rxjs": "~5.5.5",
"zone.js": "^0.8.4"

npm install @angular/common@~5.1.0 @angular/compiler@~5.1.0 @angular/core@~5.1.0 @angular/platform-browser@~5.1.0 @angular/platform-browser-dynamic@~5.1.0 @angular/upgrade@~5.1.0 core-js@~2.5.3 rxjs@~5.5.5 zone.js@^0.8.4 --save

Install the following devDependencies :

"typescript": "~2.4.2",
"webpack-dev-server": "~2.9.5",
"rimraf": "^2.5.4"

npm install typescript@~2.4.2 webpack-dev-server@~2.9.5 rimraf@^2.5.4 --save-dev

step-3 Create TypeScript configuration file

At the root of your application, create a tsconfig.json file that contains :

{
    "compilerOptions": {
        "baseUrl": ".",
        "target": "es5",
        "module": "commonjs",
        "moduleResolution": "node",
        "sourceMap": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "lib": [
            "es2017",
            "dom"
        ],
        "noImplicitAny": false,
        "suppressImplicitAnyIndexErrors": true,
        "paths": {
            "@angular/*": ["node_modules/@angular/*"],
            "rxjs/*": ["node_modules/rxjs/*"]
        }
    },
    "files": [
        "app/ngx"
    ],
    "include": [
        "typings/typings.d.ts"
    ]
}

step-4 Create a typings/typings.d.ts file, usefull for TypeScript

The file should contain :

 declare const angular: any;
 
 interface NodeRequireFunction {
     (id: string): any;
 }
 
 interface NodeRequire extends NodeRequireFunction {
     resolve(id: string): string;
 
     cache: any;
     extensions: any;
     main: NodeModule | undefined;
 }
 
 declare var require: NodeRequire;
 
 interface NodeModule {
     exports: any;
     require: NodeRequireFunction;
     id: string;
     filename: string;
     loaded: boolean;
     parent: NodeModule | null;
     children: NodeModule[];
 }
 
 declare var module: NodeModule;

step-5 Create WebPack configuration file

At the root of the application, create a webpack.config.js file that should contains

const path = require('path');
const webPackGenericConf = require("ngx-hybrid-helper/webpack/webpack.config");

module.exports = env => {
    const webPackConfig = webPackGenericConf({
        env: env,
        //Path to your app
        app: path.resolve("./app"),
        //Path to the build app (for production)
        dist: path.resolve("./dist")
    });
    return webPackConfig;
};

step-6 Create an app/ngx/imports.ts file

This file will tell to TypeScript transpiler which files to import in the application.

Create this file in a ngx directory, it should contains :

//polyfills for es5 browsers
import "ngx-hybrid-helper/src/polyfills";
//Import ng1 component
import "ngx-hybrid-helper/src/hybrid-helper.ng1-root.component";
//Import ng5 scripts
import "ngx-hybrid-helper/src/hybrid-helper.bootstrap";

step-7 Replace start command line in package.json

{
    "scripts": {
        "start": "node ./node_modules/webpack-dev-server/bin/webpack-dev-server --env.dev --progress --inline --port 8000 --open"
    }
}

step-8 Create a main AngularJS module

Create an AngularJS module that depends on ngx-hybrid-helper and on your main module (the one which is in the ng-app property)

angular.module("ng1-app",
    [
        "HERE-YOUR-MAIN-APP-MODULE", //<- replace by your main module (from ng-app)
        "ngx-hybrid-helper"
    ]);

step-9 Create a main AngularJS component

Create an AngularJS component named ng1AppRoot that will be your root node, it should contains your main component that was in your index.html

angular.module("HERE-YOUR-MAIN-APP-MODULE")  //<- replace by your main module (from ng-app)
    .component("ng1AppRoot", {
        template: '<my-previous-main-node></my-previous-main-node>' //<- replace here by your main root nodes (that are in index.html)
    });

step-10 index.html

Remove ng-app from index.html

You have to remove your ng-app="your-main-app-module" from your index.html, because from now, it is Angular 5 that will bootstrap your application.

Replace your main AngularJS node

<!--Remove this node-->
<my-previous-main-node></my-previous-main-node>
<!--Add this one-->
<app-root></app-root>

step-11 Run your application

Launch npm start, open your browser on localhost:8000, and your application should be running as before, but bootstraped by Angular 5.


Next steps to develop Angular modules

With previous steps, you have validated that your AngularJS application could be running with Angular 5, but if it's not working, don't pursue next steps.

Create your own components

To add your own Angular code to your application, you have to bootstrap the application by your own in order to add your modules in the build process.

step-1 Root module

In the ngx directory, create an app.module.ts file, it will be the main module of your application.

The file should contains

import {NgModule} from "@angular/core";
import {HybridHelperModule, HybridHelperRootComponent} from "ngx-hybrid-helper";
import {CommonModule} from "@angular/common";

@NgModule({
    imports: [
        HybridHelperModule,
        CommonModule],
    bootstrap: [HybridHelperRootComponent]
})
export class AppModule {
}

step-2 bootstrap application

In the ngx directory, create an app.bootstrap.ts file, it will bootstrap your main AppModule

The file should contains

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import {AppModule} from "./app.module";

platformBrowserDynamic().bootstrapModule(AppModule);

step-3 Import bootstrap file

In the app/ngx/imports.ts file, change this :

//Remove this line
import "ngx-hybrid-helper/src/hybrid-helper.bootstrap";
//Replace with this one
import "./app.boostrap";

step-4 Run application

Launch npm start, open your browser on localhost:8000, and your application should be running as before, but bootstraped by your own Angular 5 module.

step-5 Create your components

You can now create your components/services... and import them in the app.module.ts file

step-6 Webpack

Don't hesitate to copy webpack.config.js file in your application because you will certainly need to have your own build configuration.

Production

To build your application for production use, you can add the following command in your package.json and run npm run build

    "scripts": {
        "build": "rimraf dist && node ./node_modules/webpack/bin/webpack --config webpack.config.js --env.prod --bail --display-error-details"
     }

This command will build Angular dependencies in dist directory, but you have to create your own task to copy/bundle your .js or .css files for instance.