为什么 webpack 在我的包中包含椭圆 bn.js module

IT技术 reactjs webpack
2021-05-01 13:58:37

webpack-bundle-analyzer 显示了我的 vendor.js 中包含的 elliptic 和 bn.js 但是这些module没有在代码中使用,也没有包含在 package.json 中。

npm ls bn.js 给出:

├─┬ eslint-import-resolver-webpack@0.8.1
│ └─┬ node-libs-browser@1.1.1
│   └─┬ crypto-browserify@3.11.0
│     └─┬ browserify-sign@4.0.0
│       └── bn.js@4.11.6
2个回答

如果您在代码中的某处作为依赖项导入Webpack 会在您的包中包含ellipticbn.js(以及其他较小的module)crypto

为了避免这些巨大的依赖,你可以寻找一个特定的 npm module,它只提供你需要的功能(性)

比如我是crypto导入的

const crypto = require('crypto');
const hmac = crypto.createHmac('sha1', buf);

...相反(在这种情况下...),您可以安装create-hmacmodule,然后执行;

const createHmac = require('create-hmac');
const hmac = createHmac('sha1', buf);

如果你需要一些动力;删除crypto作为依赖项将我们的 gzip 包大小减少了 150Kb(但 YMMV 取决于您使用的加密方法)。

这些是您的依赖项的依赖项。例如来源