为什么我的 package.json 里 script 脚本在 Windows 上跑不起来?

鑫钰 阅读 68

我在 macOS 上写的 npm script 换到 Windows 后就报错了,明明命令看起来没问题啊?比如下面这个 dev 脚本:

{
  "scripts": {
    "dev": "NODE_ENV=development webpack serve --open"
  }
}

在 Windows PowerShell 里一运行就提示“NODE_ENV 不是内部或外部命令”,但同事用 Mac 就完全正常。我试过改成 cross-env,但不确定是不是必须加,而且不想为了兼容多装依赖……有没有更简单的办法?

我来解答 赞 10 收藏
二维码
手机扫码查看
2 条解答
轩辕天佑
在 Windows 上确实会遇到这种环境变量设置的问题,macOS 和 Linux 用等号设置环境变量很自然,但 Windows 命令行不认这一套。

建议改成用 set NODE_ENV=development && webpack serve --open 这种写法。不过这还只是解决了语法问题,实际运行时可能会因为 cmd 和 PowerShell 的差异继续报错。

最省事的办法还是用 cross-env,虽然你说不想多装依赖,但它确实是最优雅的跨平台解决方案。如果实在想避免额外依赖,那就得根据不同命令行分别处理:

如果是用 cmd.exe,就用上面那种 set 写法;要是用 PowerShell,就得这样写:
"dev": "powershell -Command "$env:NODE_ENV='development'; webpack serve --open""


但说实话,维护两套脚本太麻烦了,cross-env 真的值得加。这个库就是为了干这事而生的,一行搞定,兼容所有平台。我以前也纠结过要不要多加个依赖,后来发现为了这点小事牺牲代码可移植性真不划算。
点赞
2026-03-26 15:06
硕辰~
硕辰~ Lv1
这个问题其实很常见,主要原因是 macOS 和 Windows 在设置环境变量的方式上有所不同。在 macOS 上,你可以直接在命令前面加上 NODE_ENV=development 来设置环境变量,但在 Windows 上,这种写法就不行了。

解决这个问题的方法有几个,我们来逐一看看。你提到不想增加额外的依赖,那我们先来看看能不能不依赖第三方库来解决。

方法一:使用 Windows 的 set 命令
Windows 有一个 set 命令可以用来设置环境变量,我们可以在命令前面加上 set NODE_ENV=development && 来实现类似的效果。修改后的 script 如下:

{
"scripts": {
"dev": "set NODE_ENV=development && webpack serve --open"
}
}


这样,在运行 npm run dev 时,会先设置 NODE_ENV 环境变量为 development,然后再运行 webpack serve --open

方法二:使用 npm 的 cross-env 库
虽然你说不想增加依赖,但有时候这可能是最简单也是最有效的方法。cross-env 是一个可以让不同操作系统统一设置环境变量的小工具。安装方法也很简单,只需要运行:

npm install cross-env --save-dev


然后将 script 修改为:

{
"scripts": {
"dev": "cross-env NODE_ENV=development webpack serve --open"
}
}


这样,无论是 macOS 还是 Windows,都可以通过 npm run dev 来启动开发服务器了。

选择哪个方法?
- 方法一 对于不想增加额外依赖的人来说是个好选择,但是当你需要在不同的脚本中多次设置环境变量时,可能会显得比较繁琐。
- 方法二 虽然需要增加依赖,但是会让你的项目在不同平台上更加一致,也更容易维护。

希望这些信息能帮到你。这里需要注意的是,环境变量在不同的操作系统上的处理方式不同,所以遇到这类问题时,通常需要针对不同的平台进行相应的调整。
点赞
2026-03-24 15:03