一、前言:

做微信小程序开发时,在装环境时就因为常识不够遇到几个问题:

✅ 第一个坑:Node.js装在C盘、小程序项目放在E盘,在微信开发者工具的PowerShell终端运行npm install,直接报错,提示无法运行npm脚本,压根用不了npm;

当时我第一反应是:Node在C盘、项目在E盘,当时运行终端是E盘程序目录下,而npm(npm(“Node 包管理器”)是 JavaScript 运行时 Node.js 的默认程序包管理器,存在nodejs中)在C盘,所以是因为找不到npm才报错?

小程序开发者工具的power shell

核心原因根本不是因为不可跨盘找,而是PowerShell禁止运行npm脚本,所以最简单的解决办法就是直接把终端换成CMD,但是又遇到其它问题了。。。

✅ 第二个坑:在CMD终端执行npm install,以为能顺利装依赖了,结果又提示找不到package.json,还是没法正常执行npm install。

系统终端cmd

我在遇到问题的时候直接截图丢给AI,发现AI只会给几种解决方法让你去试,原因原理啥的都不讲。现在梳理下具体原因并记录分享。

二、两大核心问题及分步解决

2.1 第一个问题:PowerShell终端无法运行npm

2.1.1 破除误区:报错和C盘、E盘跨盘符无关

先明确核心结论:这个报错绝对不是因为Node.js在C盘、项目在E盘,也不是系统找不到npm程序,完全是PowerShell自身的安全限制导致的,新手极易误解为跨盘符问题,二者实则毫无关联。

2.1.2 系统查找npm的底层逻辑(与项目路径无关)

在终端输入npm install并回车后,第一步是系统先找到npm程序才能执行命令,这一步仅和Node.js安装路径相关,具体逻辑如下:

  • 安装Node.js时,默认路径为C:\Program Files\nodejs\,安装程序会自动将该路径添加到系统环境变量PATH中;
  • 系统会遍历PATH里的所有文件夹,最终在C:\Program Files\nodejs\目录下找到npm可执行文件并启动程序;
  • 这一步只是系统调用工具的过程,和项目存储在哪个盘符、项目文件位置,没有任何关联。

系统power shell

2.1.3 解决方案:

所以最简便的是去CMD执行安装npm的命令。于是在cmd执行命令又遇到问题,提示找不到package.json。于是我又疑问,nodejs文件里有自带的package.json,我的E盘项目里没有,不会是跨盘找不到吧?其实又不是!

2.2 第二个问题:切换CMD后,提示找不到package.json

系统CMD

2.2.1 npm查找项目package.json的规则

npm程序启动后,只识别当前终端所在的E盘项目目录,绝对不会跨盘符查找文件,更不会主动去C盘Node.js目录里查找无关文件。npm查找package.json有固定铁律:

  1. 当前终端打开的项目根目录(E盘小程序项目目录)开始查找;
  1. 若当前目录未找到,向上一级目录逐级查找,直至当前盘符根目录(E盘根目录);
  1. 到达盘符根目录仍未找到,就会直接停止查找,绝不会跨到C盘搜索,盘符是文件系统的天然边界,npm不会突破该规则。

另外,C盘Node.js目录里自带的package.json,是npm工具自身的配置文件,和小程序项目毫无关联,npm不会读取该文件,完全不用担心C盘文件干扰E盘项目。

2.2.2 两类易混淆的package.json对比

新手极易混淆两个用途完全不同的package.json,具体区别如下:

文件类型

存储位置

核心用途

是否影响项目

Node.js自带package.json

C:\Program Files\nodejs\node_modules\npm\package.json

记录npm工具自身版本、依赖、命令入口等信息

❌ 完全无关

项目专属package.json

E:\WeChatprogram\Smart Community\package.json

管理项目所需第三方依赖,记录安装包及版本

✅ 必须手动创建

2.2.3 为什么Node.js会自带package.json?

Node.js本身是一款软件,也有自身依赖和配置需求,C盘自带的package.json是npm工具的自述文件,主要作用是告知系统:

  • npm工具的版本号
  • npm自身依赖的第三方包
  • npm命令的入口位置

这就好比微信安装在C盘有专属配置文件,但和微信内的聊天记录(你的项目文件)完全无关,核心逻辑:工具自身配置≠项目配置,二者一定要区分开!

2.2.4 正确做法:在E盘项目内创建专属package.json

每个项目都需要专属的package.json,记录自身依赖信息,示例内容如下:


{
  "name": "smart-community",
  "dependencies": {             //项目依赖    
    "@vant/weapp": "^1.10.0",   //要用的UI库   
    "moment": "^2.29.0"         //用的时间库 
  }
}

必须在项目目录创建该文件,原因有三点:

  1. 项目独立性:每个项目可配置专属依赖,互不干扰
  1. 可移植性:项目拷贝到其他电脑,依赖配置可同步跟随
  1. 版本管理:不同项目可使用同一依赖包的不同版本

总结:C盘的package.json是npm工具的自有配置,和项目完全无关;你的小程序项目,必须在E盘根目录创建专属的package.json,这是管理项目依赖的唯一正确方式。

2.2.5 完整实操解决步骤

第一步:确认终端处于项目根目录

打开微信开发者工具,先核对底部终端路径,必须精准定位到E盘小程序项目根目录,既不能是C盘Node.js目录,也不能是项目子文件夹,这是最核心的前提。

第二步:生成项目专属package.json

在项目根目录执行命令,仅在E盘生成专属配置文件,和C盘无任何关联:

cmd
npm init -y

执行后终端会提示:Wrote to E:\xxx\小程序项目\package.json,证明文件生成路径正确。

第三步:执行npm install安装依赖

生成配置文件后,直接执行npm install命令,依赖包会自动安装到项目根目录的node_modules文件夹,全程仅在E盘运行,不会触碰C盘任何文件。

第四步:安装项目实际所需依赖包

npm环境配置完成后,即可安装小程序所需的第三方依赖,比如常用的Vant组件库:

cmd
npm install @vant/weapp --production

最后在小程序构建npm,成功。

三、有没有想过, 为什么同样的命令PowerShell报错,CMD却完全正常?

这就要说到Node.js安装后的两个关键文件,以及两个终端的调用逻辑差异:

  • Node.js自带两套npm启动文件:C:\Program Files\nodejs\目录下,同时有npm.cmd(CMD专用批处理文件)和npm.ps1(PowerShell专用脚本文件);
  • CMD的运行逻辑:CMD是老式命令行,只识别.cmd后缀的文件,直接调用npm.cmd运行,完全不碰.ps1脚本,没有任何权限限制,所以能正常执行;
  • PowerShell的运行逻辑:PowerShell是现代化脚本环境,优先调用.ps1后缀的脚本文件,而Windows默认给PowerShell设置了Restricted(严格限制)执行策略,禁止运行任何本地.ps1脚本,直接把npm.ps1拦住了,所以报错。

简单说:PowerShell管得严,不让脚本随便跑;CMD管得松,直接运行批处理文件,这就是同一个命令、两个终端结果完全不同的核心原因。

那很多人都会纠结:PowerShell是微软新出的命令行,功能比CMD强太多,为什么遇到npm报错,所有人都让我换成CMD?二者到底有什么核心区别,对我们小程序开发来说该怎么选?

3.1 CMD与PowerShell核心差异

对比维度

CMD(命令提示符)

PowerShell

对npm的兼容性

完美兼容,直接调用npm.cmd,无任何权限阻碍,零配置可用

默认不兼容,调用npm.ps1被安全策略拦截,需要手动改系统设置

安全策略

几乎无脚本限制,安全性低,但对前端开发足够用

严格执行策略,防止恶意脚本,权限管控极严

上手难度

零门槛,不用改任何系统设置,切换就能用

需要管理员权限修改执行策略,新手容易改出问题

适配场景

专门适配小程序/前端npm安装、简单命令操作,轻量化无负担

适合系统运维、复杂自动化脚本,日常开发完全没必要

操作成本

微信开发者工具一键切换,10秒搞定,零风险

需要管理员运行、输命令改策略、重启终端,步骤繁琐有风险

3.2 为什么优先推荐CMD

  1. 零配置、零报错:不用动系统任何设置,不用管PowerShell的执行策略,微信开发者工具里切换终端,立刻就能运行npm install,完全避开报错;
  1. 完全适配小程序开发:我们做小程序,只用npm装依赖、执行简单命令,CMD的功能完全够用,PowerShell的高级功能根本用不上;
  1. 零风险:修改PowerShell执行策略需要管理员权限,新手如果改得太宽松,会留下安全隐患,而CMD完全没有这个顾虑;
  1. 不影响项目路径:不管项目在E盘、D盘,CMD都能正常识别,不会出现跨盘符问题,和PowerShell的报错问题彻底切割。

四、两种解决方案

4.1 新手首选:一键切换CMD

  1. 打开微信开发者工具,找到底部终端面板
  1. 点击终端右上角的下拉菜单,选择命令提示符(CMD)
  1. 重启终端,确认路径在E盘项目根目录,直接执行npm命令即可。

优势:不用改系统设置、不用管理员权限、不会留安全隐患,适合所有小程序开发者,一劳永逸避开PowerShell报错。

若未找到cmd,则点击“选择默认shell”,再选择command prompt即可。

4.2 进阶方案:修改PowerShell执行策略(长期用PowerShell选这个)

1、Windows开始菜单搜索PowerShell,右键以管理员身份运行

2、输入命令,修改当前用户的执行策略:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

3、弹出提示后输入Y确认,关闭所有PowerShell终端,重新打开即可正常运行npm。

注意:RemoteSigned是兼顾安全的策略,只允许本地脚本运行,不要改成Unrestricted,避免安全风险。

五、全文总结

  1. 路径误区澄清:C盘装Node.js、E盘放项目完全没问题,npm不会跨盘符找文件,报错和存储位置无关;
  2. 报错真正原因:PowerShell默认执行策略禁止npm.ps1脚本运行,CMD调用npm.cmd无限制,所以能正常运行;
  3. 终端选择建议:小程序开发优先用CMD,零配置零报错,不用折腾PowerShell;
  4. npm正确操作:终端切到项目根目录,先npm init -y生成配置,再执行install,全程只在项目盘符内运行。

以后再遇到PowerShell npm报错,不用再怀疑Node.js安装路径、不用乱改环境变量,直接切换CMD就能解决,再也不用踩这些新手坑!

(注:文档部分内容大部分由 AI 生成)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐