【问题标题】:How to disable Tree shaking in rollupjs如何在 rollupjs 中禁用 Tree Shaking
【发布时间】:2018-01-28 20:02:09
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: javascript swift javascriptcore rollupjs


    【解决方案1】:

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

    // main.js
    import Base from './Base.js';
    import SubB from './SubB.js';
    import SubA from './SubA.js';
    
    export { Base, SubA, SubB };
    

    【讨论】:

    • 哇哦! rollup.js 的创建者的回应!这是一个很大的帮助!
    • 当我使用您的建议时,它会生成一个 javascript 文件,其中包含导出中指定的所有类以及 export {Base, SubA, SubB}。但是看起来 JavaScriptCore 不支持关键字“export”。所以我的解决方法是使用以 cjs 格式构建的export default function(){Base, SubA, SubB}。 with 不使用“export”作为关键字。
    猜你喜欢
    • 2017-09-05
    • 2020-01-30
    • 2021-12-29
    • 2020-03-02
    • 1970-01-01
    • 2019-02-14
    • 2019-01-28
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多