2016-04-05 3 views
1

Впервые я использую rollup, и это приводит к неожиданным результатам. Ниже у меня есть три файла в моем примере, а также вывод из rollup и вид вывода, который я ищу.Накопитель, включающий ненужные зависимости и отсутствующую функцию на выходе

Here's a repo with my complete example.

У меня есть три файла 01.js, 02.js, 03.js.

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') 
} 

03.js

import Promise from 'bluebird' 

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

Это то, что 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) и иметь только код, необходимый для запуска этой функции.

Update 1

Неуверенные, что происходит с моим кодом, но редактор на сайте накопительного пакета способен вытягивать в другом файл и после дерева. Here's a link to exactly what I have.

Обновление 2

я понял, что может настроить столпотворение неправильно, я установил как модули ниже, а также добавил .babelrc и rollup.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

Вы напишите сами :-) У repo есть опечатка - stupidReference написано stuidReference в нескольких местах. Исправьте те, и это связывает отлично. (Если Rollup видит идентификатор, он не знает происхождения, он предполагает, что это глобальная, а не опечатка.)

Lodash включен, хотя его зависимая функция не включена, поскольку Rollup не может знать, не Lodash имеет побочные эффекты. Одним из вариантов было бы включить Lodash в пачке (т.е. использовать rollup-plugin-node-resolve), так что Rollup может увидеть код, но имейте в виду, что tree-shaking Lodash is easier said than done, поэтому рекомендация использовать lodash-es и импортировать отдельные файлы:

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

Эй Богатые! Я определенно пинаю себя. Что касается 'lodash', я немного смущен. Поскольку 'lodash' не требуется в моей сборке (не используется ни одной из функций в' 01.js'), это неиспользуемый импорт. Нам не нужно было бы дребезжать (включить функцию «map» lodash в исходный код, и мы не будем нуждаться в ней как зависимость «npm» для этого пакета, созданного 'rollup'. – ThomasReggi

+1

' map' - неиспользуемый импорт (просто открыла GH [issue] (https://github.com/rollup/rollup/issues/595) - в идеале это будет отличать этот спецификатор), но сам «lodash» не является из-за его потенциальных побочных эффектов. обсуждение вопроса о более агрессивном отбрасывании этих побочных эффектов, но это очень сложно –

+0

Я немного иска создавая соответствующий файл 'package.json'). Игнорирование неиспользуемых депо и потенциальных побочных эффектов. Я чувствую, что rollup является только частью, [' acorn-umd'] (https://github.com/megawac/acorn-umd), и ['Standard'] (https://github.com/feross/standard) имеет способ узнать, какие переменные не используются' 'map' определяется, но никогда не используется'. Нужно больше исследований. – ThomasReggi