2017-08-20 110 views
0

我想使用RollUp.js將幾個javascript文件捆綁在一起,但是當我這樣做時,未使用的類將被刪除。這個過程稱爲樹抖動,我想禁用它。我發現this但它似乎沒有任何作用。如何禁用rollupjs中的樹抖動

// 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,它產生一些空的東西。很明顯,即使我輸入了基類,也會發生樹抖動。

到目前爲止,我發現的唯一解決方法是實際創建類的實例,這是不受歡迎的。

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

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

我的目標是使用帶有JSContext的捆綁JavaScript文件。它將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()") 

因爲樹搖晃基類永遠不會被放置在product.js

有沒有一種方法來禁用樹搖晃,但?

我已爲此包含sample project

回答

1

您的輸入文件 - main.js - 需要導出需要註冊後才能對外界訪問的任何類或其他值:

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

export { Base, SubA, SubB }; 
+0

哇哦!來自rollup.js創建者的回覆!這是一個很大的幫助! – DerrickHo328

+0

當我使用您的建議時,它會生成一個包含導出中指定的所有類以及'export {Base,SubA,SubB}'的JavaScript文件。不過,它看起來像JavaScriptCore不支持關鍵字「導出」。所以我的解決方法是使用以cjs格式構建的'export default function(){Base,SubA,SubB}'。與不使用「導出」作爲關鍵字。 – DerrickHo328