Skip to content

Rxjs imports don't work correctly #459

Closed
@chapati23

Description

@chapati23

I'm migrating my app over from a JSPM setup and running into issues with Rxjs Imports.
Created a new app with ng new test-app so no crazy settings or something.

It might be that it's just a misunderstanding on my part on how importing 3rd-party-packages works in angular-cli vs. jspm (where i can just jspm install abc and then import 'abc')

Error Msg
When bootstrapping the app, I get:

angular2.dev.js:23941 TypeError: rxjs_1.BehaviorSubject is not a constructor
    at new CategoryService (category.service.ts:12)
    at angular2.dev.js:1418
    at Injector._instantiate (angular2.dev.js:11770)
    at Injector._instantiateProvider (angular2.dev.js:11709)
    at Injector._new (angular2.dev.js:11699)
    at InjectorDynamicStrategy.getObjByKeyId (angular2.dev.js:11577)
    at Injector._getByKeyDefault (angular2.dev.js:11900)
    at Injector._getByKey (angular2.dev.js:11854)
    at Injector._getByDependency (angular2.dev.js:11842)
    at Injector._instantiate (angular2.dev.js:11738)

Repro steps
In a service I do (shortened for clarity):

import { BehaviorSubject, Subject } from 'rxjs'
export class MyService {
    public categories$: Subject<Array<Category>>

    constructor( private http: Http ) {
        this.categories$ = new BehaviorSubject([])
    }
}

index.html

  <body>
    <app>Loading...</app>

    <script src="vendor/es6-shim/es6-shim.js"></script>
    <script src="vendor/systemjs/dist/system-polyfills.js"></script>
    <script src="vendor/angular2/bundles/angular2-polyfills.js"></script>
    <script src="vendor/systemjs/dist/system.src.js"></script>

    <script src="vendor/angular2/bundles/angular2.dev.js"></script>
    <script src="vendor/angular2/bundles/http.dev.js"></script>
    <script src="vendor/angular2/bundles/router.dev.js"></script>
    <script src="vendor/papaparse/papaparse.js"></script>
    <script src="vendor/fuzzy/lib/fuzzy.js"></script>
    <script src="vendor/dropzone/dist/dropzone.js"></script>

    <script>
        System.config({
          map: {
            '@ngrx/store': 'vendor/@ngrx/store',
            'rxjs': 'vendor/rxjs'
          },
          packages: {
            app: {
              format: 'register',
              defaultExtension: 'js'
            },
            '@ngrx/store': {
              main: './dist/index.js'
            },
            'rxjs': {
              main: './bundles/Rx.js',
              map: {
                './BehaviorSubject': './subject/BehaviorSubject.js'
              }
            }
          }
        });
        System.import('app.js').then(null, console.error.bind(console));
    </script>
  </body>
  • also tried explicitly including Rx.js in a <script>-tag like in the default project => same result
  • also tried without 'rxjs': { map: … } => same result

angular-cli-build.js

/* global require, module */

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

module.exports = function(defaults) {
  var app = new Angular2App(defaults, {
    vendorNpmFiles: [
      '@ngrx/store/dist/*.js',
      'rxjs/**/*.js',
      'papaparse/papaparse.js',
      'fuzzy/lib/fuzzy.js',
      'dropzone/dist/dropzone.js'
    ]
  });
  return app.toTree();
};

Versions
OSX 10.11.4
angular-cli: 0.0.31
node: 5.10.1
os: darwin x64

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions