Skip to content

JS files from 3rd party to be included in index.html are not copied to dist/ **in prod mode** #949

@feloy

Description

@feloy
  1. OS? Ubuntu Linux 14.04.4 LTS
  2. Versions.
    angular-cli: 1.0.0-beta.5
    node: 5.10.1
    os: linux x64

Repro steps.

ng new angular-cli-primeng-issue && cd angular-cli-primeng-issue
npm install primeng --save
npm install primeui --save

angular-cli-build.js

var Angular2App = require('angular-cli/lib/broccoli/angular2-app');

module.exports = function(defaults) {
  return new Angular2App(defaults, {
    vendorNpmFiles: [
      'systemjs/dist/system-polyfills.js',
      'systemjs/dist/system.src.js',
      'zone.js/dist/**/*.+(js|js.map)',
      'es6-shim/es6-shim.js',
      'reflect-metadata/**/*.+(js|js.map)',
      'rxjs/**/*.+(js|js.map)',
      '@angular/**/*.+(js|js.map)',
      'primeng/**/*.+(js|js.map)',
      'primeui/**/*'
    ]
  });
};

src/system-config.ts

const map: any = {
  'primeng': 'vendor/primeng'
};

/** User packages configuration. */
const packages: any = {
  'primeng': { defaultExtension: 'js' }
};
...

src/index.html

...
<script src="vendor/primeui/primeui-ng-all.min.js"></script>
...

The failure

$ ng build && ls dist/vendor/primeui/primeui-ng-all.min.js 
[...build...]
dist/vendor/primeui/primeui-ng-all.min.js
$ ng build -prod && ls dist/vendor/primeui/primeui-ng-all.min.js 
[...build...]
dist/vendor/primeui/primeui-ng-all.min.js NOT FOUND

Mention any other details that might be useful.

The solution I have found is

  • do not include script from src/index.html
  • define the polyfills option to AngularApp in angular-cli-build.js:
var Angular2App = require('angular-cli/lib/broccoli/angular2-app');

module.exports = function(defaults) {
  return new Angular2App(defaults, {
      vendorNpmFiles: [
          'systemjs/dist/system-polyfills.js',
          'systemjs/dist/system.src.js',
          'zone.js/dist/**/*.+(js|js.map)',
          'es6-shim/es6-shim.js',
          'reflect-metadata/**/*.+(js|js.map)',
          'rxjs/**/*.+(js|js.map)',
          '@angular/**/*.+(js|js.map)',
          'primeng/**/*.+(js|js.map)',
          'primeui/**/*'
      ],
      polyfills: [
          'vendor/es6-shim/es6-shim.js',
          'vendor/reflect-metadata/Reflect.js',
          'vendor/systemjs/dist/system.src.js',
          'vendor/zone.js/dist/zone.js',
          'vendor/primeui/primeui-ng-all.min.js'
      ]
  });
};

Questions

  • Is it the preconized solution?
  • If so, this solution is not documented anywhere
  • if so, it could be interesting to get the default polyfills in angular-cli-build.js, instead of having to get them in node_modules/angular-cli/lib/broccoli/angular2-app.js

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions