内容提要
文章讲述在Windows下进行Electron开发时遇到的依赖管理问题:项目需要32位npm安装依赖,却要用64位运行,还需重新编译node-sass,每次安装新依赖都会出问题,重装麻烦。作者尝试改用nvm方案,但Windows不支持Linux的nvm,npm参数也无效,最终使用nvs,却因PowerShell安全策略需先设置执行策略,且每次打开终端都要重设。作者由此感叹需要深入了解命令行以及Windows与Linux的差异。
延伸解读
32位与64位混用的代价
文章中的项目需要32位npm安装依赖,却要用64位运行,这导致node-sass等原生模块必须重新编译。每次安装新依赖都可能破坏现有环境,作者不得不重装依赖。这种架构混用不仅增加操作步骤,还让依赖管理变得脆弱,任何新依赖都可能引入冲突,迫使开发者反复修复环境。
nvm方案在Windows的局限
作者尝试用nvm管理Node版本,但Windows不支持Linux的nvm。转而使用nvs后,又遇到PowerShell安全策略限制,需要先设置执行策略才能运行脚本,且每次打开终端都要重新设置。这反映出Windows与Linux在命令行工具和权限模型上的差异,增加了开发环境配置的复杂度。
npm参数调整的无效尝试
文章提到尝试用npm install --arch=ia32 electron或npm set npm_config_arch ia32来控制架构,但实测无效,且npm文档中并无这些参数。这说明仅靠npm参数无法解决项目整体架构区分问题,因为不止electron一个依赖需要区分架构,需要更系统的版本管理工具。
Q&A
为什么在Windows下开发Electron项目需要同时使用32位和64位的Node?
因为项目立项用的是32位Electron,所以npm i时必须用32位Node;但运行时如果用32位,保存后热更新会报错(如内存不足),因此必须用64位运行npm run dev。
在Windows下用32位npm安装依赖后,运行前还需要做什么额外操作?
需要执行npm rebuild node-sass,因为32位node-sass在64位环境下不能直接使用。
为什么保留32位和64位两个Node安装包的方法最终行不通?
因为每npm i一个新依赖,项目就可能无法运行,可能是依赖的依赖产生冲突导致某些修改,不得不重装依赖,频繁出现很麻烦。
在Windows下尝试用npm参数指定32位架构为什么失败?
类似npm install --arch=ia32 electron的方法只能控制electron,但项目还有其他区分arch的依赖;而npm set npm_config_arch ia32和npm clean-install --arch=ia32实测无效,且npm文档中根本没有这些参数。
Windows下有哪些类似nvm的Node版本管理工具?作者最终用了哪个?
有nvs和nvm-windows两个替代方案,作者最终使用了nvs。
在Windows下使用nvs时遇到PowerShell无法运行的问题,如何解决?
需要先设置PowerShell执行策略:Set-ExecutionPolicy Unrestricted -Scope CurrentUser,才能运行脚本。
使用nvs切换Node版本后,每次打开终端需要注意什么?
每次打开终端都需要重新设置一次nvs。