2016-04-05 1 views
1

私はrollupを初めて使用していますが、予期せぬ結果が出ています。下の例では、3つのファイルをrollupの出力と探しています。不要な依存関係を含むロールアップと出力に機能がありません

Here's a repo with my complete example.

私は三つのファイル01.js02.js03.jsを持っています。これは何をされ

03.js

import Promise from 'bluebird' 

export function stupidReference (str) { 
    return Promise.resolve(str) 
} 

01.js

import { fakePromise } from './02' 

export default fakePromise 

02.js

import { map } from 'lodash' 
import { stupidReference } from './03' 

export function fakePromise (str) { 
    return stupidReference(str) 
} 

export function fakeMap (arr) { 
    return map(arr, item => item + ' is stupid') 
} 
rollupが返されます。 (実際の)

import { map } from 'lodash'; 
import Promise from 'bluebird'; 

function fakePromise (str) { 
    return stupidReference(str) 
} 

export default fakePromise; 

これは、私はロールアップが返すように期待するものです。 (予想される)

import Promise from 'bluebird'; 

function stupidReference (str) { 
    return Promise.resolve(str) 
} 

function fakePromise (str) { 
    return stupidReference(str) 
} 

export default fakePromise; 

私はロールアップは、あなたのプロジェクトに必要としなかったすべての依存関係を振るだろうという印象の下にありました。しかし、の実際の出力には不要な依存関係lodashが含まれており、別の内部機能stupidReferenceもありません。

私が期待したとおりに動作しない理由が不思議です。 rollupツールを正しく使用しているのかどうか不思議です。これが意図された使用でない場合は、私が探している機能を実現するツールを見つけることが大好きです。私は関数(または上記の01.jsのようなファイル)を提供したいと思いますし、その関数を実行するのに必要なコードだけを持っています。

アップデート1

私のコードで何が起こっているのかわからないが、ロールアップサイトの編集者は、別のファイルに引っ張り、ダウンツリーを次のことができます。 Here's a link to exactly what I have.

アップデート2

私が間違ってバベルが設定されていることを実現し、私は、以下の両方のモジュールをインストールし、ならびに.babelrcrollup.config.jsを加えました。

npm i rollup-plugin-babel babel-preset-es2015-rollup --save 

rollup.config.js

import babel from 'rollup-plugin-babel'; 

export default { 
    entry: './01.js', 
    plugins: [ babel() ], 
    format: 'es6' 
}; 

。babelrc同じ出力がまだ生産されている。このアップデートで

{ 
    "presets": [ "es2015-rollup" ] 
} 

答えて

4

あなたは自分自身を蹴るでしょう:-)レポにはタイプミスがあります - stupidReferenceは2,の綴りです。それらを修正し、うまくバンドルします。 (ロールアップで起源を知らない識別子が見つかった場合は、タイプミスではなくグローバルであるとみなされます)

ロールアップでは、依存関係の関数が含まれていませんLodashには副作用がありません。 1つのオプションは、ロールアップコードを見ることができるように(すなわちrollup-plugin-node-resolveを使用)バンドルにLodashを含めることが、tree-shaking Lodash is easier said than done、その勧告はlodash-esを使用して、個々のファイルをインポートすることであることを認識し、次のようになります。

import map from 'lodash-es/map.js'; 
+1

ねえリッチ!私は確かに自分自身を蹴っている。 'lodash'については少し混乱しています。私のビルドでは( '01.js'の関数で使われていない)' lodash'は必要ないので、これは未使用のインポートです。私たちはシェイクをする必要はありません(ロダッシュの 'map'関数をソースに含めてください。' rollup'が作成したバンドルの 'npm'依存としては必要ありません)。 – ThomasReggi

+1

' map'は未使用のインポートですGH [issue](https://github.com/rollup/rollup/issues/595)を開きました - 理想的にはその指定子を捨てるでしょう)しかし、 'lodash'自体は潜在的な副作用のためにそうではありません。これらの副作用をより積極的に破棄するオプションについての議論がありますが、非常に扱いにくいです。 –

+0

私は探しているものが少し異なります。特定のファイル/機能を別のノードモジュールに分解するツールを構築することに興味があります関連する 'packages.json'ファイルを作成します)。未使用のデープと潜在的な副作用を無視します。ロールアップは一部の方法であるように感じます。[' acorn-umd'](https://github.com/megawac/acorn-umd )は役に立ちます。['Standard'](https://github.com/feross/standard)には、どの変数が使われていないかを知る方法があります。' 'map '定義されているが使用されていない。より多くの研究が必要です。 – ThomasReggi

関連する問題