3

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

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

4

2 回答 2

0

Rollup 0.34.0 适用于 2.0.0-rc.7 并且经过验证 Rollup 0.34.0 适用于 2.0.0 但我能够使用 0.35.0 复制该问题

于 2016-09-15T08:35:49.600 回答
0

目前似乎有两个问题rollup

  • rollup不规范化路径('/'vs '\\')中的斜杠,并且该问题仍然存在。要修复它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使用 ES2015 模块编译到 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, "\\");
    }
}
于 2016-09-15T06:56:45.683 回答