javascript - 如何在 rollupjs 中禁用 Tree shaking

标签 javascript swift javascriptcore rollupjs

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

我找到了 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 并生成一些空的东西。很明显,tree shaking 正在发生,它正在删除 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()")

但是由于 tree shaking,Base 类永远不会放在 product.js 中

有没有办法禁用 tree shaking?

我添加了一个 sample project为此。

最佳答案

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

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

export { Base, SubA, SubB };

关于javascript - 如何在 rollupjs 中禁用 Tree shaking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45785357/

相关文章:

ios - Swift JSON 崩溃与零

ios - 静态 TableView 获取 NSRangeException

ios - JSValue.toObjectOf 返回 nil

javascript - 每次调用时都会重新创建 JavaScript 函数内部的数组吗?

javascript - 本地 React 构建有效,但服务器构建 js css 文件时出现错误 404。如何让包裹正确构建路径?

javascript合并两个函数以检查另一个元素的节点类型

swift - swift 中 tvOS 的 Toast 功能

javascript - 在 JavaScriptCore 中的全局对象上公开一个字符串

javascript - 'aria-describedby'什么时候返回空值

javascript - 如果其任何一个子级获得焦点,则防止触发模糊事件