95% emitting CompressionPlugin # # Fatal error in , line 0 # Fatal process out of memory: base::SmallVector::Grow # # # #FailureMessage Object: 000000C1929FE7C0 1: 00007FF70DAD158F 2: 00007FF70D9EC5CF 3: 00007FF70E6CDE32 4: 00007FF70DE27964 5: 00007FF70E158B83 6: 00007FF70E157C0A 7: 00007FF70E32C052 8: 00007FF70E32C190 9: 00007FF70E420131 10: 0000028DD964D097 PS G:\ruoyi\ruoyicloud\ecust-operate-web> npm run dev > [email protected] dev > vue-cli-service serve INFO Starting development server... 95% emitting CompressionPlugin # # Fatal error in , line 0 # Fatal process out of memory: base::SmallVector::Grow # # # #FailureMessage Object: 000000B3491FE170 1: 00007FF70DAD158F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+122159 2: 00007FF70D9EC5CF node::TriggerNodeReport+38239 3: 00007FF70E6CDE32 V8_Fatal+162 4: 00007FF70DE27964 v8::internal::wasm::BuildTFGraph+82628 5: 00007FF70E158B83 v8::base::TimeDelta::operator!=+34291 6: 00007FF70E157C0A v8::base::TimeDelta::operator!=+30330 7: 00007FF70E32C052 v8::internal::Builtins::code_handle+38418 8: 00007FF70E32C190 v8::internal::Builtins::code_handle+38736 9: 00007FF70E420131 v8::internal::SetupIsolateDelegate::SetupHeap+494641 10: 0000020B18C10BB7 PS G:\ruoyi\ruoyicloud\ecust-operate-web> npm run dev > [email protected] dev > vue-cli-service serve INFO Starting development server... 95% emitting CompressionPlugin # # Fatal error in , line 0 # Fatal process out of memory: base::SmallVector::Grow # # # #FailureMessage Object: 000000FC361FE2F0 1: 00007FF70DAD158F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+122159 2: 00007FF70D9EC5CF node::TriggerNodeReport+38239 3: 00007FF70E6CDE32 V8_Fatal+162 4: 00007FF70DE27964 v8::internal::wasm::BuildTFGraph+82628 5: 00007FF70E158B83 v8::base::TimeDelta::operator!=+34291 6: 00007FF70E157C0A v8::base::TimeDelta::operator!=+30330 7: 00007FF70E32C052 v8::internal::Builtins::code_handle+38418 8: 00007FF70E32C190 v8::internal::Builtins::code_handle+38736 9: 00007FF70E420131 v8::internal::SetupIsolateDelegate::SetupHeap+494641 10: 0000027D464B79B7 PS G:\ruoyi\ruoyicloud\ecust-operate-web> npm run dev > [email protected] dev > vue-cli-service serve INFO Starting development server... 95% emitting CompressionPlugin # # Fatal error in , line 0 # Fatal process out of memory: base::SmallVector::Grow # # # #FailureMessage Object: 000000DD181FE3C0 1: 00007FF70DAD158F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+122159 2: 00007FF70D9EC5CF node::TriggerNodeReport+38239 3: 00007FF70E6CDE32 V8_Fatal+162 4: 00007FF70DE27964 v8::internal::wasm::BuildTFGraph+82628 5: 00007FF70E158B83 v8::base::TimeDelta::operator!=+34291 6: 00007FF70E157C0A v8::base::TimeDelta::operator!=+30330 7: 00007FF70E32C052 v8::internal::Builtins::code_handle+38418 8: 00007FF70E32C190 v8::internal::Builtins::code_handle+38736 9: 00007FF70E420131 v8::internal::SetupIsolateDelegate::SetupHeap+494641 10: 0000024336D035F7
时间: 2025-07-02 13:09:35 浏览: 10
<think>我们正在解决Vue项目运行`vue-cli-serviceserve`时出现的内存不足错误,具体错误信息为:"95%emittingCompressionPluginFatalprocessoutofmemorybase::SmallVector::Grow"这个错误通常发生在项目构建过程中,尤其是在使用`CompressionPlugin`进行gzip压缩时,由于内存不足导致进程崩溃。###原因分析1.**内存不足**:Node.js进程默认的内存限制可能不足以处理大型项目,尤其是在进行资源压缩等操作时。2.**CompressionPlugin配置**:该插件在构建过程中可能会消耗大量内存,特别是当处理的资源文件很大或数量很多时。3.**其他可能因素**:如Webpack配置不当、项目依赖过多、项目体积过大等。###解决方案####1.增加Node.js内存限制通过设置`--max-old-space-size`参数来增加Node.js进程的内存限制。在运行`serve`命令时,可以这样做:```bashnode--max-old-space-size=8192node_modules/.bin/vue-cli-serviceserve```这里将内存限制设置为8GB(8192MB),你可以根据实际情况调整(如4096、6144等)。####2.禁用CompressionPlugin(临时方案)如果你不需要在开发阶段进行gzip压缩,可以在`vue.config.js`中禁用该插件:```javascriptmodule.exports={chainWebpack:config=>{//开发环境禁用CompressionPluginif(process.env.NODE_ENV==='development'){config.plugins.delete('compression')}}}```####3.优化Webpack配置-**仅对生产环境启用压缩**:确保压缩插件只在生产环境使用。-**调整压缩选项**:如果确实需要在开发环境使用,可以尝试调整压缩选项,降低压缩级别以减少内存占用:```javascriptmodule.exports={chainWebpack:config=>{config.plugin('compression').tap(args=>{//修改压缩级别(1-9,1最快但压缩率低,9最慢但压缩率高)if(args[0]){args[0].compressionOptions={level:1}}returnargs})}}```####4.升级依赖确保`@vue/cli-service`和相关依赖(如`compression-webpack-plugin`)是最新版本,因为新版本可能修复了内存问题。####5.检查项目结构-减少不必要的依赖和大型文件。-使用动态导入(codesplitting)分割代码。####6.使用外部工具进行压缩(可选)如果开发阶段确实需要gzip压缩,可以考虑在服务器层面(如Nginx)启用,而不是在构建阶段。###实施步骤建议1.**首先尝试增加内存限制**(方案1),这是最直接的方法。2.如果问题仍然存在,**在开发环境禁用压缩插件**(方案2)并检查是否解决。3.长期考虑,**优化项目结构和配置**(方案3、5),并确保依赖最新(方案4)。###注意事项-修改`vue.config.js`后需要重启开发服务器。-如果使用持续集成(CI)环境,同样需要调整内存限制。###相关问题1.如何优化Vue项目的构建性能?2.Webpack中还有哪些常见的性能优化手段?3.如何配置Nginx为Vue项目提供gzip压缩?4.Node.js内存管理机制是怎样的?如何监控Node.js应用的内存使用情况?希望这些解决方案能帮助你解决问题。如果问题依然存在,请提供更多关于项目配置的信息(如`vue.config.js`内容)。</think>针对运行 `vue-cli-service serve` 时出现的内存不足错误(`95% emitting CompressionPlugin Fatal process out of memory base::SmallVector::Grow`),以下是系统性的解决方案:
### 问题原因
该错误发生在 Webpack 构建的压缩阶段(`CompressionPlugin`),主要原因是:
1. **Node.js 内存限制**:默认堆内存限制(约 1.7GB)不足以处理大型项目
2. **压缩资源过大**:项目包含大量未优化的静态资源(如图片/字体)
3. **并发处理压力**:`CompressionPlugin` 同时压缩多个文件导致内存峰值
4. **Webpack 配置**:未优化的构建配置加剧内存消耗
---
### 解决方案
#### ✅ 1. 提升 Node.js 内存限制
在启动命令前增加内存参数:
```bash
node --max-old-space-size=4096 node_modules/.bin/vue-cli-service serve
# 或修改 package.json
"scripts": {
"serve": "node --max-old-space-size=4096 vue-cli-service serve"
}
```
- `4096` 表示 4GB(根据机器配置调整,建议 4096-8192)
- **原理**:突破 Node.js 默认 1.7GB 内存限制[^1]
#### ✅ 2. 禁用开发环境压缩(推荐)
在 `vue.config.js` 中关闭开发环境的压缩:
```javascript
module.exports = {
chainWebpack: config => {
// 开发环境禁用压缩
if (process.env.NODE_ENV === 'development') {
config.plugins.delete('compression')
}
}
}
```
- **优势**:直接消除内存峰值来源
- **注意**:不影响生产环境构建
#### ✅ 3. 优化 CompressionPlugin 配置
调整压缩参数降低内存消耗:
```javascript
// vue.config.js
module.exports = {
configureWebpack: {
plugins: [
new CompressionPlugin({
algorithm: 'gzip',
// 关键优化点
compressionOptions: { level: 1 }, // 降低压缩级别(1-9)
minRatio: 0.8, // 仅压缩大于80%收益的文件
threshold: 10240, // 仅压缩>10KB的文件
deleteOriginalAssets: false // 避免额外内存操作
})
]
}
}
```
#### ✅ 4. 项目资源优化
减少需要压缩的资源体积:
1. **图片压缩**:
```bash
npm install image-webpack-loader --save-dev
```
在 `vue.config.js` 中添加:
```javascript
chainWebpack: config => {
config.module
.rule('images')
.use('image-webpack-loader')
.loader('image-webpack-loader')
}
```
2. **排除大文件**:
```javascript
// vue.config.js
module.exports = {
configureWebpack: {
module: {
noParse: /\.(dat|wasm|bz2)$/ // 跳过非必要文件
}
}
}
```
#### ✅ 5. 升级依赖
解决已知内存泄漏问题:
```bash
npm update vue-cli-service compression-webpack-plugin webpack
# 或
npm install vue-cli-service@latest [email protected]
```
- **重点更新**:`compression-webpack-plugin` v5+ 优化了内存管理
#### ✅ 6. 分步构建(大型项目)
将构建拆分为独立步骤:
```json
// package.json
"scripts": {
"build:dll": "vue-cli-service build --target lib src/core.js",
"serve": "npm run build:dll && vue-cli-service serve"
}
```
---
### 验证步骤
1. 执行带内存监控的命令:
```bash
node --max-old-space-size=4096 --trace-gc node_modules/.bin/vue-cli-service serve
```
2. 观察控制台输出:
- 成功标志:不再出现 `FATAL ERROR: Ineffective mark-compacts`
- 内存警告:`<--- Last few GCs --->` 消失
---
### 预防措施
| 措施 | 配置文件 | 作用 |
|-----------------------|--------------------------|--------------------------|
| 长期内存监控 | `.env` 添加 `NODE_OPTIONS=--max-old-space-size=6144` | 固化内存限制 |
| 按需引入组件 | `babel.config.js` 配置 `plugins: ['lodash']` | 减少打包体积 |
| 定期清理 node_modules | 添加 `"preinstall": "npx npkill"` 到 package.json | 删除未使用依赖 |
> **关键提示**:开发环境通常无需开启 `CompressionPlugin`,建议通过 Nginx 在生产环境实现压缩[^2]。
阅读全文
相关推荐


















