如何在 rollupjs 中禁用摇树

Der*_*328 3 javascript javascriptcore swift rollupjs

我正在尝试使用 RollUp.js 将几个 javascript 文件捆绑在一起,但是当我这样做时,未使用的类会被删除。这个过程称为摇树,我想禁用它。

我发现了这个,但它似乎没有任何影响。

// rollup.config.js

let configuration = {
  output: {
    format: 'es',
  },
  name: 'namename',
  input: './main.js',
  treeshake: false, // <-- disabling tree shaking?
};

export default configuration;
Run Code Online (Sandbox Code Playgroud)

我添加treeshake: false到配置中,但它似乎没有任何影响。这应该放在其他地方吗?

这是我正在尝试汇总的文件。

// Base.js
export default class Base {
  aMethod() {
    return "Hello";
  }
}

// main.js 
import Base from './Base.js';
Run Code Online (Sandbox Code Playgroud)

所以通过这个设置,我打电话rollup --config,它产生了一些空的东西。很明显,树抖动正在发生,即使我导入了它,它也会删除 Base 类。

到目前为止,我发现的唯一解决方法是实际创建类的实例,这是不可取的。

// main.js
import Base from './Base.js';

export default function () {
    {   
        new Base();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的目标是将捆绑的 javascript 文件与 JSContext 一起使用。它将把 javascript 作为一个字符串,然后从那里,我会根据需要调用方法。

// suppose rollup.js produces a file called "product.js"

let s = String(contentsOfFile: "path/to/product.js")
let context = JSContext()!
context.evaluateScript(s)

context.evaluateScript("var b = new Base()")
context.evaluateScript("b.aMethod()")
Run Code Online (Sandbox Code Playgroud)

但是由于树摇动,Base 类永远不会被放置在 product.js 中

有没有办法禁用摇树?

我为此包含了一个示例项目

Ric*_*ris 6

你的入口文件——main.js需要导出任何需要被外界访问的类或其他值:

// main.js
import Base from './Base.js';
import SubB from './SubB.js';
import SubA from './SubA.js';

export { Base, SubA, SubB };
Run Code Online (Sandbox Code Playgroud)