如何在rollupjs

时间:2017-08-20 18:10:27

标签: javascript swift javascriptcore rollupjs

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

我找到了this,但它似乎没有任何效果。

// rollup.config.js

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

export default configuration;

我在配置中添加了treeshake: false,但它似乎没有任何效果。这应该放在别的地方吗?

以下是我想要汇总的文件。

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

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

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

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

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

export default function () {
    {   
        new Base();
    }
}

我的目标是将捆绑的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()")

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

有没有办法禁用树摇动?

我已为此添加sample project

1 个答案:

答案 0 :(得分:1)

您的输入文件 - main.js - 需要导出外部世界需要访问的任何类或其他值:

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

export { Base, SubA, SubB };