我正在尝试将一个项目与依赖于 RxJS (v5) 的汇总捆绑在一起。我想要的是汇总到 tree-shake 并且只包含我正在使用的 RxJS 模块。
我想我已经接近了,但它从以下位置离开system-observable
:
module.exports = require('./ponyfill')(global || window || undefined);
示例 repo 在这里。
我目前正在使用npm i rxjs-es
,我知道还有其他 rxjs 安装,但我假设那是正确的。
这是我目前正在做的事情:
const rollup = require( 'rollup' );
const nodeResolve = require( 'rollup-plugin-node-resolve' );
const commonjs = require( 'rollup-plugin-commonjs' );
// found this online, it does seem to correctly rewrite the rxjs paths
// but is it helping or hurting?
class RollupRx {
constructor( options ){
this.options = options;
}
resolveId( id ){
if(id.startsWith('rxjs/')){
return `${__dirname}/node_modules/rxjs-es/${id.replace('rxjs/', '')}.js`;
}
}
}
const rollupRx = config => new RollupRx( config );
rollup.rollup({
entry: 'index.js',
plugins: [
rollupRx(),
nodeResolve({ jsnext: true, main: true }),
]
}).then( bundle => {
bundle.write({
format: 'iife',
dest: 'bundle.js'
});
}).catch( err => console.error( err ) );
更新:如果我将 RxJS 的唯一依赖项重写symbol-observable
为 ES6 模块,那么它可以工作。
我的问题是:
- 汇总(和一些插件/配置)是否应该处理转换以获取 CJS 依赖项?还是应该做一个 PR 来
symbol-observable
制作 es6? - 是否需要自定义插件来重写
rxjs-es
导入路径?或者是否有现有的插件或配置可以做到这一点?
更新 2:看起来symbol-observable
大约一周前已经这样做了,但是 npm 正在安装旧版本。( https://github.com/ReactiveX/rxjs/issues/1785 )