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

鑫钰 阅读 16

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

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

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

我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
硕辰~
硕辰~ 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