1

我是rollup第一次使用,它产生了一些意想不到的结果。下面是我的示例中的三个文件以及rollup我正在寻找的输出和输出类型。

这是我的完整示例的回购。

我有三个文件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;

我的印象是,rollup 会摆脱项目中不需要的所有依赖项。但是,您可以看到实际输出还包括一个不需要的依赖项lodash,并且还缺少另一个内部函数stupidReference

我很好奇为什么这不像我预期的那样工作。我也很好奇我rollup是否正确使用了该工具。如果这不是预期用途,我真的很想找到一个能够实现我正在寻找的功能的工具。我想提供一个函数(或01.js上面的文件),并且只有运行该函数所需的代码。

更新 1

不确定我的代码发生了什么,但汇总站点上的编辑器能够拉入另一个文件并跟随树向下。这是我所拥有的链接。

更新 2

我意识到我可能错误地配置了 babel,我安装了下面的模块以及添加了.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

1 回答 1

4

你会踢自己:-) 回购有一个错字——在几个地方stupidReference拼写。stuidReference修复这些,它捆绑得很好。(如果 Rollup 看到一个它不知道其来源的标识符,它会假定它是全局的而不是拼写错误。)

即使不包含 Lodash 的依赖函数,也会包含 Lodash,因为 Rollup 无法知道 Lodash 是否有副作用。一种选择是将 Lodash 包含在包中(即使用rollup-plugin-node-resolve)以便 Rollup可以看到代码,但请注意,摇树 Lodash 说起来容易做起来难,所以建议使用lodash-es和导入单个文件:

import map from 'lodash-es/map.js';
于 2016-04-05T13:20:47.967 回答