nrm@1.2.1 无法在 Node.js 中正常工作

989 阅读2分钟

楔子

最近总能遇到点奇奇怪怪的事情,比如重新执行 npm install 安装依赖后,运行 npm run serve 报错 TypeError: Cannot read property 'vue' of undefined;

也在网上查询了很多办法依旧无法解决,包括但不限于:

  1. 升级 vue-loader
  2. 升级 webpack 总的来说是,虽然不会再报 TypeError: Cannot read property 'vue' of undefined 但是会衍生出其他奇奇怪怪的问题,叹气;

然后我就尝试更新 @vue/cli 然而更新失败,哪怕添加了 --force 去强制更新也不行,被逼无奈我转而重新安装 Node.js;

很棒的是在我更新了 Node.js@14.15.4@vue/cli@4.5.11 后进行安装依赖后没有报错了(虽然我是使用 cnpm 去安装的,但是在更新前使用 cnpm 安装也会报关于 vue-cli-service 的错误),但是我发现 nrm(公司在用私有源,所以要经常切换源,没有 nrm 会比较难受) 却在报错 throw new ERR_INVALID_ARG_TYPE(name, 'string', value);

经过一番查找,找到了解决的方案:nrm issues 81;

简单来说就是一个兼容性的问题,只需要找到 nrm 的全局安装路径后,对 cli.js 中的第十七行代码进行重写:

const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc')

关于 TypeError: Cannot read property 'vue' of undefined

关于这个问题我是这样解决的;
首先更新 vue-cli ,然后使用更新后的 vue-cli 创建一个新的项目模板,在新的项目模板里面把关于 vue 的依赖复制到,之前的项目当中,例如:

"vue": "^2.6.12",
"vuex": "^3.4.0",

"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-router": "~4.5.0",
"@vue/cli-plugin-vuex": "~4.5.0",
"@vue/cli-service": "~4.5.0",

然后安装最新的 webpack 执行命令应该是 npm add webpack@latest ,然后删除 node_modules 这一步还是很重要,然后使用 npm install 重新安装依赖即可;

总结

做个记录,以后碰到类似的问题可以有个查找的思路。 关于 TypeError: Cannot read property 'vue' of undefined 无法在升级 vue-loader and webpack 解决的时候,更新一下插件用 cnpm 安装可能有奇效,别问我为什么,我也不知道,叹气。