"OuterSubscriber не определен" при смешивании с rollup.js

После обновления до Angular2 RC7 я получаю следующую ошибку JavaScript при запуске в браузере:

OuterSubscriber не определен

Это происходит только тогда, когда я создаю пакет, используя rollup.js, Если я запускаю приложение без JavaScript, оно работает нормально.

Ошибка должна как-то быть связана с rxjs поскольку OuterSubscriber является частью этого. Я проверил комплект и не смог найти OuterSubscriber там. Я полагаю rollup.js считает, что это не является необходимым и, следовательно, не включает его.

Среда:

  • angular, v2.0.0-rc.7
  • rxjs, v5.0.0-beta.12
  • systemjs, v0.19.27
  • gulp-rollup, v2.4.0
  • rollup-stream, v1.13.0

в system.js конфиг я сопоставляю umd модули (например, core.umd.js) за angular, За rxjs Я использую классическое отображение, как в этом примере.

У кого-нибудь есть идеи, что я здесь делаю не так?

2 ответа

Решение

Rollup 0.34.0 работает с 2.0.0-rc.7 и проверенный Rollup 0.34.0 также работает с 2.0.0, но я смог повторить проблему с 0.35.0

Кажется, есть две проблемы с rollup В настоящее время.

  • rollup не нормализует косые черты в путях ('/' против '\\') и этот вопрос все еще открыт. Починить это rollup.config.js необходимо следующее дополнение:
resolveId(id, from){
    if (id.startsWith('rxjs/') || id.startsWith('rxjs\\')){
        let result = `${__dirname}/node_modules/rxjs-es/${id.replace('rxjs/', '')}.js`;
        return result.replace(/\//g, "\\"); // Add this
    }
}
  • Он нарушает код ES2015, но ES5 работает нормально, поэтому он нуждается в компиляции rxjs-es в ES5 с модулями ES2015, и используйте вместо этого преобразователь роликов. Вот отдельный tsconfig.rx.json:
{
    "compilerOptions": {
        "target": "ES5",
        "module": "ES2015",
        "moduleResolution": "node",
        "sourceMap": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "removeComments": true,
        "noImplicitAny": false,
        "skipLibCheck": true,
        "outDir": "temp/rxjs",
        "allowJs": true
    },
    "include": [
        "node_modules/rxjs-es/**/*.js"
    ],
    "exclude": [
        "wwwroot",
        "node_modules/rxjs-es/rx.js"
    ]
}

а также rollup.config.js:

resolveId(id, from){
    if (id.startsWith('rxjs/') || id.startsWith('rxjs\\')){
        let result = `${__dirname}/temp/rxjs/${id.replace('rxjs/', '')}.js`;
        //let result = `${__dirname}/node_modules/rxjs-es/${id.replace('rxjs/', '')}.js`;
        return result.replace(/\//g, "\\");
    }
}
Другие вопросы по тегам