"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, "\\");
}
}