我正在创建一个库,我们将其命名为share
,将在其他服务中使用,并使用Rollup.js捆绑库
share
是一个由多个服务使用的共享库,因此我需要能够对库进行树摇。发生的事情是……假设我有依赖于share
的service A
和service B
。
-
service A
使用googleapis
,这是shared
使用的依赖项之一,然而,googleapis
是对等依赖项,是service A
的真正依赖项。 -
service B
根本不使用googleapis
,并且不是一个依赖项。使用googleapis
的shared
中甚至没有函数包含在service B
中。
在绑定时,service A
和service B
只包含所需的函数/属性。我遇到的问题是在service B
上,当我查看生成的包时,有以下行…
service A
的生成包
// ...
var path = require('path');
var googleapis = require('googleapis'); // works as expected
// ...
service B
的生成包
// ...
var path = require('path');
require('googleapis'); // this line is causing my issue
// ...
简单地在service B
上删除require('googleapis')
确实解决了这个问题,因为这个库根本不使用,甚至是全局的,然而,这只是这个共享库的开始,我宁愿不手动删除不必要的要求,或者编写一个实用程序来剥离它们,如果有一个简单的修复这个问题。
我认为会有一些设置,我可以传递给treeshake
,但我还没有找到我想要的。
我知道是哪个属性导致了这个问题。
treeshake.moduleSideEffects
我的解决方案是…
...
treeshake: {
moduleSideEffects: (id) => !id.includes('googleapis')
}
...
,我需要包含它以防止绑定空的require语句