2

我正在尝试将一个项目与依赖于 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 )

4

0 回答 0