2017-08-20 1 views
0

J'essaie de regrouper plusieurs fichiers javascript en utilisant RollUp.js mais quand je le fais, les classes qui ne sont pas utilisées sont supprimées. Ce processus est appelé "tremblement d'arbre" et je veux le désactiver. J'ai trouvé this mais cela ne semble pas avoir d'effet.Comment désactiver Tree shaking dans rollupjs

// rollup.config.js 

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

export default configuration; 

I ajouté treeshake: false à la configuration, mais il ne semble pas avoir d'effet. Est-ce censé être placé ailleurs?

Voici les fichiers que j'essaie de récupérer. Donc, avec cette configuration, j'appelle le rollup --config et il produit quelque chose de vide. Il est donc clair que l'arbre bouge et qu'il supprime la classe de base, même si je l'ai importé. Jusqu'à présent, la seule solution de contournement que j'ai trouvée est de créer une instance de la classe, ce qui n'est pas souhaitable.

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

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

Mon objectif est d'utiliser le fichier javascript fourni avec JSContext. Il prendra dans le javascript comme une chaîne et à partir de là, j'appellerais des méthodes au besoin.

// 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()") 

Mais à cause de l'arbre en secouant la classe de base n'est jamais placé dans product.js

est-il un moyen de désactiver secouage des arbres? J'ai inclus sample project pour cela.

Répondre

1

Votre fichier d'entrée - main.js - a besoin d'exporter toutes les classes ou d'autres valeurs qui doivent être accessibles au monde extérieur:

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

export { Base, SubA, SubB }; 
+0

Oh wow! Une réponse du créateur de rollup.js! C'est une grande aide! – DerrickHo328

+0

lorsque j'utilise votre suggestion, il produit un fichier javascript avec toutes les classes spécifiées à l'export ainsi que 'export {Base, SubA, SubB}'. Cependant, il semble que JavaScriptCore ne supporte pas le mot clé "export". Donc, ma solution de contournement pour cela est d'utiliser 'exporter la fonction par défaut() {Base, SubA, SubB}' construit en format cjs. avec n'utilise pas "export" comme mot-clé. – DerrickHo328