使用rollup.js进行Bundeling时,“OuterSubscriber未定义”

时间:2016-09-14 12:42:34

标签: javascript angular rxjs5 rollupjs

更新到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,我使用了example中的经典映射。

有没有人知道我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

目前rollup似乎存在两个问题。

  • rollup未对路径('/''\\')和issue is still open中的斜杠进行规范化。要修复它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工作正常,因此需要使用ES2015模块将rxjs-es编译为ES5并使汇总解析器使用它。这是一个单独的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, "\\");
    }
}

答案 1 :(得分:0)

Rollup 0.34.0适用于2.0.0-rc.7,经过验证的Rollup 0.34.0也适用于2.0.0但我能够以0.35.0复制该问题