Впервые я использую 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" ]
}
С этим обновлением тот же вывод, по-прежнему производится.
Эй Богатые! Я определенно пинаю себя. Что касается 'lodash', я немного смущен. Поскольку 'lodash' не требуется в моей сборке (не используется ни одной из функций в' 01.js'), это неиспользуемый импорт. Нам не нужно было бы дребезжать (включить функцию «map» lodash в исходный код, и мы не будем нуждаться в ней как зависимость «npm» для этого пакета, созданного 'rollup'. – ThomasReggi
' map' - неиспользуемый импорт (просто открыла GH [issue] (https://github.com/rollup/rollup/issues/595) - в идеале это будет отличать этот спецификатор), но сам «lodash» не является из-за его потенциальных побочных эффектов. обсуждение вопроса о более агрессивном отбрасывании этих побочных эффектов, но это очень сложно –
Я немного иска создавая соответствующий файл 'package.json'). Игнорирование неиспользуемых депо и потенциальных побочных эффектов. Я чувствую, что rollup является только частью, [' acorn-umd'] (https://github.com/megawac/acorn-umd), и ['Standard'] (https://github.com/feross/standard) имеет способ узнать, какие переменные не используются' 'map' определяется, но никогда не используется'. Нужно больше исследований. – ThomasReggi