Vue 项目打包时如果出现 内存不足(OOM,Out of Memory)简称就是OOM,通常是因为项目代码量较大、依赖过多、打包时 Webpack 需要处理的文件过多,导致 Node.js 运行时超出了默认的内存限制。
"scripts": {
"build": "node --max-old-space-size=8192 node_modules/.bin/vue-cli-service build"
}
或者直接在命令行执行:
export NODE_OPTIONS="--max-old-space-size=8192" # Linux/macOS
set NODE_OPTIONS="--max-old-space-size=8192" # Windows
npm run build
这里 8192 代表 8GB,你可以改成 4096(4GB)或 16384(16GB)看情况调整。
module.exports = {
productionSourceMap: false
}
这样可以减少 .map 文件的生成,降低内存占用。
在 vue.config.js 里启用持久化缓存,提高二次打包速度,减少内存占用:
module.exports = {
configureWebpack: {
cache: {
type: 'filesystem', // 持久化缓存
}
}
}
module.exports = {
configureWebpack: {
externals: {
vue: 'Vue',
'vue-router': 'VueRouter',
axios: 'axios'
}
}
}
这样 Webpack 就不会打包这些库,减少打包体积和内存占用。
(2)减少 Babel 转译的范围
在 babel.config.js 里排除 node_modules:
module.exports = {
presets: ['@vue/cli-plugin-babel/preset'],
ignore: ['node_modules']
}
module.exports = {
configureWebpack: {
module: {
rules: [
{
test: /\.js$/,
use: ['thread-loader', 'babel-loader'],
exclude: /node_modules/
}
]
}
}
}
这样可以利用多核 CPU,提高构建效率,减少单个进程的内存压力。
npm update -g @vue/cli
优化 Tree Shaking:确保 sideEffects 设置正确,避免无用代码进入打包:
"sideEffects": false
如果 Vue 项目打包时内存不足,可以尝试: