Skip to content
graham edited this page Dec 10, 2017 · 32 revisions

PrimeNG is a collection of rich UI components for Angular 2. PrimeNG is a sibling of the popular JavaServer Faces Component Suite, PrimeFaces.

  1. Add the NPM packages
npm install --save primeng
npm install --save font-awesome
  1. Add external font-awesome

Configure FontAwesome with the below paths.

See this for a guide on how to add external fonts.

FONTS_DEST = `${this.APP_DEST}/fonts`;

FONTS_SRC = ['node_modules/font-awesome/fonts/**'];
  1. Add external scripts and styles

Replace <theme-name> with whatever theme from PrimeNG you want to use. See this for a guide on how to add external scripts and styles.

{ src: 'primeng/resources/primeng.css', inject: true },
{ src: 'primeng/resources/themes/<theme-name>/theme.css', inject: true },
{ src: 'font-awesome/css/font-awesome.min.css', inject: true },
  1. SystemJS config for the dev environment

Modify SYSTEM_CONFIG_DEV in seed.config.ts adding this:

...
protected SYSTEM_CONFIG_DEV: any = {
...
paths: {
  ...
  'primeng': `${this.APP_BASE}node_modules/primeng`,
  ...
}
...

Starting with SystemJS version 0.20.14 (or maybe even a bit earlier), using SYSTEM_CONFIG_DEV as shown above no longer works. Instead, include the following in your project.config.ts:

const additionalPackages: ExtendPackages[] = [{
   name: 'primeng',
   path: 'node_modules/primeng',
   packageMeta: {
      defaultExtension: 'js'
   }
}];

this.addPackagesBundles(additionalPackages);

There is commented-out code snippet you can use as starting point.

  1. Ensure that images referenced by the PrimeNG theme CSS are copied to dist/prod/css/images by production build

Production build bundles all CSS files used by your app into dist/prod/css/main.css. Any images (e.g. background-image) referenced by your PrimeNG theme CSS must be available in dist/prod/css/images.

Add the following to project.config.ts:

 PRIME_NG_THEME = '<theme-name>';
 CSS_IMAGE_DEST = `${this.CSS_DEST}/images`;
 CSS_IMAGE_SRC = [
   'node_modules/primeng/resources/themes/' + this.PRIME_NG_THEME + '/images/**'
 ];

Create new task build.css_images.ts in tools/tasks/project with the following code:

import * as gulp from 'gulp';
import Config from '../../config';

export = () => {
   return gulp.src(Config.CSS_IMAGE_SRC)
       .pipe(gulp.dest(Config.CSS_IMAGE_DEST));
};

Modify seed.tasks.json to include the new task in the production build:

 "build.prod": [
...
   "build.assets.prod",
   "build.fonts",
   "build.css_images",  //<< new task
   "build.html_css",
...
 ],
  1. Ensure that any theme fonts are also copied over to the build directory.

Add the following to project.config.ts:

THEME_FONTS_DEST = `${this.APP_DEST}/css/fonts`;
THEME_FONTS_SRC = [
    'node_modules/primeng/resources/themes/' + this.PRIME_NG_THEME + '/fonts/**',
];

Create a new task file tools/tasks/project/build.theme_fonts.ts:

import * as gulp from 'gulp';
import Config from '../../config';

export = () => {
  return gulp.src(Config.THEME_FONTS_SRC)
      .pipe(gulp.dest(Config.THEME_FONTS_DEST));
};

In gulpfile.ts

// Build dev.
gulp.task('build.dev', done =>
  runSequence('clean.dev',
              'tslint',
              'build.assets.dev',
              'build.fonts', 
              'build.theme_fonts',    // Added task;
              'build.js.dev',
              'build.index.dev',
              done));
// Build prod.
gulp.task('build.prod', done =>
  runSequence('clean.prod',
              'tslint',
              'build.assets.prod',
              'build.fonts',
              'build.theme_fonts',    // Added task;
              'build.html_css.prod',
              'build.js.prod',
              'build.bundles',
              'build.bundles.app',
              'build.index.prod',
              done));
// Build test.
gulp.task('build.test', done =>
  runSequence('clean.dev',
              'tslint',
              'build.assets.dev',
              'build.fonts',
              'build.theme_fonts',    // Added task;
              'build.js.test',
              'build.index.dev',
              done));