Laravel 5.4中的'cross-env'未被识别为内部或外部命令

107

我想执行 Laravel Mix 的 npm run dev 命令,但是出现了以下错误:

> @ dev D:\projects\ptcs
> cross-env NODE_ENV=development webpack --progress --hide-modules --
config=node_modules/laravel-mix/setup/webpack.config.js

'cross-env' is not recognized as an internal or external command,
operable program or batch file.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @ dev: `cross-env NODE_ENV=development webpack --progress --hide-
modules --config=node_modules/laravel-mix/setup/webpack.config.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @ dev script.

我将node.js更新到了6.11.0版本,同时将npm更新到了5.2.0版本,但没有起到帮助的作用。我的操作系统是Windows 7,正在运行Homestead。


我认为这取决于您是从Homestead还是Windows 7运行安装程序,因为它会安装特定于操作系统的库。 - thefallen
对我来说,重新安装最新的node.js(8.9)修复了这个问题。 - Rav
在遵循 Yevgeniy Afanasyev 的建议后,如果你遇到了以下错误:> The CLI moved into a separate package: webpack-cli. 你应该运行以下命令:$ npm install webpack-cli -D - Hayreddin Tüzel
18个回答

251

你需要使cross-env在全局范围内工作,而不是只在项目中使用。

1)删除node_modules文件夹

2)运行

npm install --global cross-env

3)从package.json文件的devDependencies部分删除"cross-env": "^5.0.1"。实际上,你可以跳过此步骤并保持package.json不变。如果你愿意的话。

4)运行

npm install --no-bin-links

5)运行

npm run dev

然后查看其是否正常工作

注:本人在Windows 10上测试了Laravel-5.4

附:Windows 10上的Laravel-5.6则没有此问题,因此升级是另一种解决方案。


经测试,确认在基于win10操作系统的Virtual Box上使用Vagrant wint Laravel 5.4(Homestead)可正常运行。 - Yevgeniy Afanasyev
1
因为我不知道命令 npm install --no-bin-links 的用途是什么(即使进行了研究,我也无法理解),所以我避免使用它并继续工作。为什么这是必要的呢? - Felipe Augusto
1
太好了!它像魔法一样运行。我使用了 npm install 而不是 npm install --no-bin-links,这有什么区别吗?提前感谢。 - Joel Meza Baca
1
谢谢。这个中午解决了我的问题。但是我只做了第二步和第三步,然后在node_modules文件夹中删除了相应的cross-env包文件夹和package-lock.json文件。它起作用了。 - Lex Soft
我们必须支持拥有一个自给自足的存储库/源代码,这意味着只需下载和运行它,应用程序即可正常工作。我建议将“cross-env”添加到“devDependencies”部分,以便任何新的入职开发人员都可以获取存储库并运行代码,而无需经过繁琐的预环境配置。 - Alexz S.
显示剩余4条评论

40

第一次运行:

rm -rf node_modules
rm package-lock.json yarn.lock
npm cache clear --force

然后执行该命令

npm install cross-env

npm install 

然后你也可以运行

npm run dev

没有删除任何文件,也没有清除缓存,我按照命令的其余部分操作了一下... 它完美地运行了..谢谢 Flick。 - Pankaj
1
不幸的是,这些步骤对我来说并没有解决问题。 - Ryan

28

按照以下步骤解决了我的问题。

  1. 删除 node_modules 目录
  2. 删除 package-lock.json 文件
  3. 以管理员身份启动命令提示符 <- 重要
  4. 运行 npm install
  5. 运行 npm run dev

16

你之所以会出现这个错误,是因为你可能还没有运行 npm install 命令。

即先运行 npm install,然后再运行 npm run dev


9
在Linux操作系统中也存在同样的问题。该问题与Windows操作系统有关,但Homestead是一个Ubuntu虚拟机,在其他操作系统上发布的解决方案非常有效。我使用了flik建议的命令,问题得到了解决。我只使用了以下命令:
rm -rf node_modules
npm cache clear --force

之后

npm install cross-env
npm install 
npm run watch

在 Linux Fedora 25 上它运行良好。


8
根据此问题评论,编辑cross-env路径可以解决问题。将cross-env更改为node node_modules/cross-env/dist/bin/cross-env.js,在package.json中像这样:
    "dev": "npm run development",
    "development": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "watch": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "watch-poll": "npm run watch -- --watch-poll",
    "hot": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
    "prod": "npm run production",
    "production": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"

1
对于那些尝试过这个方法但没有成功的人,按照以下步骤进行:1)从产品中删除node_modules文件夹;2)使用“npm install --no-bin-links”重新安装它;3)尝试“npm run dev”,看看是否能正常工作。此外,这种方法适用于WIN10,但在Ubuntu-Laravel-5.4-Homestead上不起作用。我在这里发布了自己的答案,适用于Windows和Ubuntu。 - Yevgeniy Afanasyev

6
对于我来说,只需要简单运行:
npm install cross-env

足够了。

5
您的错误提示cross-env未安装。
'cross-env' is not recognized as an internal or external command, operable program or batch file.

你只需要运行即可。
npm install cross-env

5
在您项目的根目录中,只需运行npm install --save-dev cross-env即可。

4
以下内容适用于Laravel 7.x(考虑到问题的性质,其他任何版本应该也可以使用)。
npm uninstall --save-dev cross-env
npm install -g cross-env

cross-env 从本地 devDependency 移动到全局可用的软件包。


+1 是因为这个方法有效,而且我找不到其他有效的答案。但是这种方法感觉像是一个 hack,并没有解决 cross-env 项目特定安装无法工作的根本原因。在我的情况下,我相当确定它曾经是有效的,所以我很困惑为什么它停止工作了。 - Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接