2017-08-20 10 views
0

RollUp.jsを使用していくつかのjavascriptファイルをバンドルしようとしていますが、使用していないクラスは削除されます。このプロセスはツリーシェイクと呼ばれ、私はそれを無効にしたい。rollupjsでのツリーの揺れを無効にする方法

私は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()") 

しかし、理由は基底クラスを振っ木のは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はキーワード "export"をサポートしていないようです。ですから、私の回避策は 'export default function(){Base、SubA、SubB}'をcjs形式で組み込むことです。 withは "export"をキーワードとして使用しません。 – DerrickHo328

関連する問題