systemjs / builder

SystemJS build tool
MIT License
466 stars 122 forks source link

r.BevhaviourSubject is not a constructor #829

Open Skuriles opened 6 years ago

Skuriles commented 6 years ago

Hello all, I've tried to update systemjs Builder to 0p.16 and system.js with 0.20 (latest version) For developement we use systemjs, for production we use the systemjs-builder (same system.config.js).

Problem: After using the builder Rxjs components no longer work like here: Issue on Angular Cli (for me it is r.BevhaviourSubject is not a constructor). But I didn't find a solution in this issue which works for me

system.config: Map 'rxjs': 'npm:rxjs', Package 'rxjs': {main: 'Rx', defaultExtension: 'js' },

in TS file: import {BehaviorSubject} from "rxjs/BehaviorSubject"; public authenticatedChange = new BehaviorSubject<boolean>(null);

In dev everthing works fine with 0.20. and 0.19. system js version. So I rolled back to 0.15.X of systemjs Builder and 0.19 systemjs and everything works fine again.

We are also using some kind o uglify/minifier -> Could this issue related to this? Or does anyone have the same issue, that rxjs is not working correctly after using the builder? Or do the breaking changes in 0.16 affect the handling of rxjs?

Any help would be appreciated

Regards

jamesbrobb commented 6 years ago

Does it relate to this issue?

https://github.com/systemjs/systemjs/issues/1675

aluanhaddad commented 6 years ago

This is usually caused by missing package configuration, specifically the format flag needs to be set since SystemJS 0.20 no longer automatically hoists named exports of CommonJS modules

SystemJS.config({
  packages: {
    'rxjs': {
      main: 'Rx',
      defaultExtension: 'js',
      format: 'esm'
    }
  }
});
Skuriles commented 6 years ago

Hm, tried it with the format flag, but now it throws other errors. Just went back to systemjs 0.19 and all works fine. Will have on the linked issue from @jamesbrobb

Thanks for help

Go4th commented 5 years ago

FYI, for me this was due to importing BehaviorSubject (and Subject for that matter) like import { BehaviorSubject } from 'rxjs/BehaviorSubject' This works during ng serve, but fails in prod build. I changed to import { BehaviorSubject } from 'rxjs/Rx' and all works.