基于vue-cli 开发的自定义组件 A 被另一个ssr 项目引用vue
A 经过默认命令打包 生成 dist/A.umd.js 和dist/A.common.jsnode
package.json 设置 main 为 dist/A.umd.jswebpack
搜索服务 出现告警 查询系统监控发现服务 由于内存暴涨在不断重启web
内存泄漏严重vue-cli
1.比对最近提交的代码 在发现A的使用会致使内存泄露之后 想查出npm
2.该组件 经过webpack 打包进入服务端渲染的vue-server-bundle.json中json
3.删除该组件 内存泄露修复segmentfault
1.组件在webpack 配置了nodeExternals whitelist 打包进项目中 内存泄露babel
2.组件main 设置为 umd 或者commonjs 在上述条件下都会引发内存泄露app
3.组件 直接经过 nodeExternals 过滤 不打包进vue-server-bundle.json 在ssr node 项目中 npm install 组件A 运行 不会内存泄露
4.nuxt 调用该组件 没有内存泄露
<template>
<i />
</template>
<script>
export default {
props: {
test: {
type: Number
}
}
}
</script>
复制代码
将组件最小化 而后进行打包 以后分析打包结果 发现内存引入了针对Number的polyfill
1.组件服务端安装 不要打包到vue-server-bundle.json中
2.打包组件的时候 babel 配置中使用 useBuiltIns:false不要将polyfill 打包到代码当中去 调用方本身使用polyfill
3.打包组件的时候 若是是为了提供给服务端渲染使用 babel 配置 @vue/app 而且 node:current polyfill 也不会打包进去
babelrc babel.config.js 加载逻辑: segmentfault.com/a/119000001…