更新到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中的经典映射。
有没有人知道我在这里做错了什么?
答案 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
}
}
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复制该问题