‘“node --max-old-space-size=4096“‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

问题描述

使用npm run dev的时候报如下错误:
‘“node --max-old-space-size=4096”’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

两种情况,vue-cli2和vue-cli3:

1. 如果是使用的vue-cli2,那么解决办法如下:

npm run dev 和 npm run build 直接在前面加上–max_old_space_size=4096
参考地址:https://blog.csdn.net/win7583362/article/details/86305780

2. 如果是使用的vue-cli3,解决办法如下:

安装两个npm包 : cross-env increase-memory-limit

npm install cross-env increase-memory-limit

安装完成后,先执行一次 npm run fix-memory-limit,然后npm run dev即可。
启动之前先检查下配置是否有fix-memory-limit

...
"scripts": {
	"serve": "vue-cli-service serve",
	"build": "vue-cli-service build",
	"fix-memory-limit": "cross-env LIMIT=4096 increase-memory-limit",
},

操作完以上步骤之后,可能会报错 “node –max-old-space-size=4096不是内部或外部命令``”
该问题的解决办法:

在项目的node_modules.bin下面找到所有的*.cmd文件,
在ENDLOCAL语句的上边一行,修改"%_prog%" 改为 %_prog%, 去掉双引号。

或者写一个脚本修改:

// 运行项目前通过node执行此脚本 (此脚本与 node_modules 目录同级)
const fs = require('fs')
const path= require('path')
const wfPath =  path.resolve(__dirname, './node_modules/.bin')

fs.readdir(wfPath, (err, files)=>{
   if (err) {
    console.log(err);
   } else {
      if(files.length != 0 ) {
        files.forEach((item)=>{
           if(item.split('.')[1] === 'cmd') {
              replaceStr(`${wfPath}/${item}`, /"%_prog%"/, '%_prog%')
           }
        })
     }
   }
 })

// 参数:[文件路径、 需要修改的字符串、修改后的字符串] (替换对应文件内字符串的公共函数)
function replaceStr(filePath, sourceRegx, targetSrt) {
  fs.readFile(filePath, (err, data)=>{
     if(err) {
    	console.log(err)
     } else {
       let str = data.toString();
      str= str.replace(sourceRegx, targetSrt);
       fs.writeFile(filePath, str, (err)=> { console.log(err) })
     }
  })
}

参考文献

参考文献


版权声明:本文为qq_41614928原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。