汇总包括不需要的依赖项和缺少输出中的函数
Rollup including unneeded dependancies and missing a function in output
我是第一次使用 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
正在 return 的内容。 (实际)
import { map } from 'lodash';
import Promise from 'bluebird';
function fakePromise (str) {
return stupidReference(str)
}
export default fakePromise;
这是我希望汇总到 return 的结果。 (预期)
import Promise from 'bluebird';
function stupidReference (str) {
return Promise.resolve(str)
}
function fakePromise (str) {
return stupidReference(str)
}
export default fakePromise;
我的印象是汇总会摆脱项目中不需要的所有依赖项。但是您可以看到 actual 输出还包含不需要的依赖项 lodash
,并且还缺少另一个内部函数 stupidReference
.
我很好奇为什么它没有像我预期的那样工作。我也很好奇我是否正确使用 rollup
工具。如果这不是预期用途,我真的很想找到一种工具来实现我正在寻找的功能。我想提供一个函数(或上面 01.js
之类的文件)并且只有 运行 该函数所需的代码。
更新 1
不确定我的代码发生了什么,但是汇总站点上的编辑器能够拉入另一个文件并沿着树向下移动。 Here's a link to exactly what I have.
更新 2
我意识到我可能没有正确配置 babel,我安装了下面的两个模块并添加了 .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" ]
}
使用此更新仍会生成相同的输出。
你会踢自己的:-) 回购有错字 – stupidReference
在几个地方拼写为 stuidReference
。修复这些问题,它会很好地捆绑。 (如果 Rollup 看到一个它不知道来源的标识符,它会假定它是全局的而不是打字错误。)
即使不包含其依赖函数,Lodash 也会包含在内,因为 Rollup 无法知道 Lodash 是否有副作用。一种选择是将 Lodash 包含在捆绑包中(即使用 rollup-plugin-node-resolve) so that Rollup can see the code, but be aware that tree-shaking Lodash is easier said than done,因此建议使用 lodash-es
并导入单个文件:
import map from 'lodash-es/map.js';
我是第一次使用 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
正在 return 的内容。 (实际)
import { map } from 'lodash';
import Promise from 'bluebird';
function fakePromise (str) {
return stupidReference(str)
}
export default fakePromise;
这是我希望汇总到 return 的结果。 (预期)
import Promise from 'bluebird';
function stupidReference (str) {
return Promise.resolve(str)
}
function fakePromise (str) {
return stupidReference(str)
}
export default fakePromise;
我的印象是汇总会摆脱项目中不需要的所有依赖项。但是您可以看到 actual 输出还包含不需要的依赖项 lodash
,并且还缺少另一个内部函数 stupidReference
.
我很好奇为什么它没有像我预期的那样工作。我也很好奇我是否正确使用 rollup
工具。如果这不是预期用途,我真的很想找到一种工具来实现我正在寻找的功能。我想提供一个函数(或上面 01.js
之类的文件)并且只有 运行 该函数所需的代码。
更新 1
不确定我的代码发生了什么,但是汇总站点上的编辑器能够拉入另一个文件并沿着树向下移动。 Here's a link to exactly what I have.
更新 2
我意识到我可能没有正确配置 babel,我安装了下面的两个模块并添加了 .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" ]
}
使用此更新仍会生成相同的输出。
你会踢自己的:-) 回购有错字 – stupidReference
在几个地方拼写为 stuidReference
。修复这些问题,它会很好地捆绑。 (如果 Rollup 看到一个它不知道来源的标识符,它会假定它是全局的而不是打字错误。)
即使不包含其依赖函数,Lodash 也会包含在内,因为 Rollup 无法知道 Lodash 是否有副作用。一种选择是将 Lodash 包含在捆绑包中(即使用 rollup-plugin-node-resolve) so that Rollup can see the code, but be aware that tree-shaking Lodash is easier said than done,因此建议使用 lodash-es
并导入单个文件:
import map from 'lodash-es/map.js';