Gathering detailed insights and metrics for generator-ng-cli-lib
Gathering detailed insights and metrics for generator-ng-cli-lib
Gathering detailed insights and metrics for generator-ng-cli-lib
Gathering detailed insights and metrics for generator-ng-cli-lib
npm install generator-ng-cli-lib
Typescript
Module System
Node Version
NPM Version
41.9
Supply Chain
87.3
Quality
68.9
Maintenance
25
Vulnerability
97.6
License
JavaScript (84.9%)
TypeScript (12.58%)
HTML (2.52%)
Total Downloads
1,004
Last Day
1
Last Week
1
Last Month
3
Last Year
121
751 Stars
241 Commits
122 Forks
33 Watching
1 Branches
28 Contributors
Latest Version
11.0.3
Package Id
generator-ng-cli-lib@11.0.3
Size
11.51 kB
NPM Version
5.3.0
Node Version
8.2.1
Cumulative downloads
Total Downloads
Last day
0%
1
Compared to previous day
Last week
0%
1
Compared to previous week
Last month
-70%
3
Compared to previous month
Last year
7.1%
121
Compared to previous year
Yeoman generator to create a standalone Angular library in seconds.
If you want to create an Angular library with directives, services and/or pipes, then this generator is just what you need.
This generator aligns with the official Angular Package Format and automatically generates a Flat ES Module, a UMD bundle, a single metadata.json and type definitions to make your library ready for AOT compilation by the consuming Angular application.
Watch Jason Aden's talk to learn more about the Angular Package Format.
More specifically, this generator:
package.json
for the development of your librarypackage.json
for the distribution of your librarytsconfig.json
for your editor during developmenttslint.json
for linting purposes.gitignore
, .npmignore
and .travis.yml
This generator is built for Angular version 2 and above, hence the name generator-angular2-library. If you are looking for a similar generator for AngularJS 1.x, please visit generator-angularjs-library.
First, install Yeoman and generator-angular2-library using npm (assuming you already have node.js pre-installed).
1$ npm install -g yo 2$ npm install -g generator-angular2-library
make a new directory and cd
into it:
1$ mkdir angular-library-name 2$ cd angular-library-name
and generate your new library:
1$ yo angular2-library
The generator will prompt you for:
1? Your full name: Jurgen Van de Moere 2? Your email address: jurgen.van.de.moere@gmail.com 3? Your library name (kebab case): angular-library-name 4? Git repository url: https://github.com/jvandemo/angular2-library-name
and create the following files for you:
1. 2├── README.MD 3├── gulpfile.js 4├── package.json 5├── src 6│  ├── index.ts 7│  ├── package.json 8│  ├── sample.component.ts 9│  ├── sample.directive.ts 10│  ├── sample.pipe.ts 11│  ├── sample.service.ts 12│  └── tsconfig.es5.json 13├── tsconfig.json 14└── tslint.json
You can then add or edit *.ts
files in the src/
directory and run:
1$ npm run build
to automatically create all *.js
, *.d.ts
and *.metadata.json
files in the dist
directory:
1dist 2├── index.d.ts # Typings for AOT compilation 3├── index.js # Flat ES Module (FESM) for us with webpack 4├── lib.d.ts # Typings for AOT compilation 5├── lib.metadata.json # Metadata for AOT compilation 6├── lib.umd.js # UMD bundle for use with Node.js, SystemJS or script tag 7├── package.json # package.json for consumer of your library 8├── sample.component.d.ts # Typings for AOT compilation 9├── sample.directive.d.ts # Typings for AOT compilation 10├── sample.pipe.d.ts # Typings for AOT compilation 11└── sample.service.d.ts # Typings for AOT compilation
Finally you publish your library to NPM by publishing the contents of the dist
directory:
1$ npm publish dist
The generator creates 2 TypeScript config files:
tsconfig.json
is used to configure your editor during development and is not used for building your librarysrc/tsconfig.es5.json
is used by the Angular compiler to build the files in the dist
directory when you run npm run build
Your library comes pre-configured with tslint and codelyzer support. To lint your code:
1$ npm run lint
From the root of your library directory, run:
1$ npm run build
This will generate a dist
directory with:
package.json
file specifically for distribution with Angular listed in the peerDependencies
sample-library.js
: a Flat ES Module (FESM) file that contains all your library code in a single filesample-library.umd.js
: a Universal Module Definition (UMD) bundle file that contains all your library code in UMD format for use in Node.js, SystemJS or via a script tag (e.g. in Plunker, Fiddle, etc)*.d.ts
: type definitions for you librarysample-library.metadata.json
: metadata for your library to support AOT compilationFrom the root of your library directory, run:
1$ npm run docs:build
This will generate a docs
directory with all documentation of your library.
To serve your documentation, run:
1$ npm run docs:serve
and navigate your browser to http://localhost:8080
.
To automatically rebuild your documentation every time a file in the src
directory changes, run:
1$ npm run docs:watch
For more features, check out the compodoc website.
To publish your library to NPM, first generate the dist
directory:
1$ npm run build
and then publish the contents of the dist
directory to NPM:
1$ npm publish dist
Once you have published your library to the NPM registry, you can import it in any Angular application by first installing it using NPM:
1$ npm install sample-library # use the name you used to publish to npm
and then importing your library in your Angular AppModule
(or whatever module you wish to import your library into):
1import { BrowserModule } from '@angular/platform-browser'; 2import { NgModule } from '@angular/core'; 3 4import { AppComponent } from './app.component'; 5 6// Import your library 7import { SampleModule } from 'sample-library'; 8 9@NgModule({ 10 declarations: [ 11 AppComponent 12 ], 13 imports: [ 14 BrowserModule, 15 16 // Specify your library as an import 17 SampleModule.forRoot() 18 ], 19 providers: [], 20 bootstrap: [AppComponent] 21}) 22export class AppModule { }
Once your shared library is imported, you can use its components, directives and pipes in your Angular application templates:
1<!-- app.component.html --> 2<h1>{{ title }}</h1> 3<sample-component> 4 This component is part of the shared library and will now work as expected. 5</sample-component>
and if you need to access a service from your shared library, you can inject it using Dependency Injection:
1import { Component } from '@angular/core'; 2 3// Import the shared service 4import { SampleService } from 'sample-library'; 5 6@Component({ 7 template: 'Injecting a service from the shared library' 8}) 9export class HomeComponent { 10 11 // Inject the service using Angular DI 12 constructor(private sampleService: SampleService){ 13 14 } 15 16}
To learn more about Angular Dependency Injection, check out the Official Angular Documentation.
To consume your library before you publish it to npm, you can follow the following steps:
$ yo angular2-library
Let's assume you name your library sample-library
.
sample-library
directory:$ cd sample-library
$ npm run build
sample-library/dist
directory, create a symlink in the global node_modules directory to the dist
directory of your library:$ cd dist
$ npm link
$ cd /your-projects-path
$ ng new my-app
my-app
directory:$ cd my-app
my-app
directory, link the global sample-library
directory to node_modules of the my-app
directory:$ npm link sample-library
SampleModule
in your Angular application:1import { BrowserModule } from '@angular/platform-browser'; 2import { NgModule } from '@angular/core'; 3 4import { AppComponent } from './app.component'; 5 6// Import your library 7import { SampleModule } from 'sample-library'; 8 9@NgModule({ 10 declarations: [ 11 AppComponent 12 ], 13 imports: [ 14 BrowserModule, 15 16 // Specify your library as an import 17 SampleModule.forRoot() 18 ], 19 providers: [], 20 bootstrap: [AppComponent] 21}) 22export class AppModule { }
1<!-- app.component.html --> 2<h1>{{ title }}</h1> 3<sample-component> 4 This component is part of the shared library and will now work as expected. 5</sample-component>
and if you need to access a service from your shared library, you can inject it using Dependency Injection:
1import { Component } from '@angular/core'; 2 3// Import the shared service 4import { SampleService } from 'sample-library'; 5 6@Component({ 7 template: 'Injecting a service from the shared library' 8}) 9export class HomeComponent { 10 11 // Inject the service using Angular DI 12 constructor(private sampleService: SampleService){ 13 14 } 15 16}
sample-library
directory:$ npm run build
src
changes, run$ npm run build:watch
/src/tsconfig.app.json
of your consuming application (not your library):1{ 2 "compilerOptions": { 3 // ... 4 // Note: these paths are relative to `baseUrl` path. 5 "paths": { 6 "@angular/*": [ 7 "../node_modules/@angular/*" 8 ] 9 } 10 } 11}
Currently, the generator does not create a custom Karma configuration for running unit tests.
If your library requires a custom Karma setup, please check out this tutorial on how to configure Karma for your libraray (Credits to Raphael).
As soon as official recommendations are available on how to set up Karma for testing libraries, this generator will be updated accordingly.
First update the package name in src/package.json
:
1"name": "@scope/library-name"
and then also update flatModuleId
in src/tsconfig.es5.json
accordingly:
1"flatModuleId": "@scope/library-name"
See #75 for more information.
If you experience issues (#72) or want to avoid constant recompilation of your library during development, you can also npm link src
instead of npm link dist
in step 4 of the process above.
This will let you consume the TypeScript code directly from the src
directory of your library instead of the generated bundle from the dist
directory. This increases development speed if you are testing your library in a local Angular application, but remember to test the generated bundle using npm link dist
after you finish writing your code, to ensure that your generated bundle is working as expected before you publish your library to NPM.
Simply store your styles in a file with a filename extension of scss
and reference it in your component's styleUrls
property.
So if you have a sample.component.scss
:
1h1 { 2 color: red; 3}
then reference it in your component's styleUrls
in sample.component.ts
accordingly:
1@Component({ 2 selector: 'sample-component', 3 template: `<h1>Sample component</h1>`, 4 styleUrls: [ 5 'sample.component.scss' 6 ] 7})
The .scss files will automatically be compiled and inlined in your library bundle.
To import a .scss file in an existing .scss file, you can specify a relative path:
@import '../relative/path/to/other.scss';
or use a tilde to import a file from the nearest parent node_modules
directory:
@import '~@angular/material/prebuilt-themes/deeppurple-amber.css';
From the command line, run
1$ yo
and select the option Update your generators.
Please report bugs and issues here.
To run the generator unit tests:
1$ npm run test
MIT © Jurgen Van de Moere
styleUrls
to fix #140README.md
example codetsconfig.json
filesNgModule
src
and dist
directorybrowser.d.ts
to files in tsconfig.json
instead of using tripleslash (see #9)PROVIDERS
, DIRECTIVES
and PIPES
No vulnerabilities found.
Reason
no binaries found in the repo
Reason
license file detected
Details
Reason
Found 12/30 approved changesets -- score normalized to 4
Reason
0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
Reason
project is not fuzzed
Details
Reason
branch protection not enabled on development/release branches
Details
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
Reason
64 existing vulnerabilities detected
Details
Score
Last Scanned on 2024-12-23
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More