Last updated: Apr 4, 2024
Reading timeยท5 min
To solve the error "cross-env is not recognized as an internal or external
command, operable program or batch file", open your terminal in your project's
root directory and install the cross-env
package by running
npm install --save-dev cross-env
.
Open your terminal in your project's root directory (where your package.json
file is located) and run the following command:
# ๐๏ธ installs cross-env locally npm install --save-dev cross-env # ๐๏ธ installs cross-env globally (can run from any directory) npm install -g cross-env # ---------------------------------------------- # ๐๏ธ installs cross-env locally yarn add cross-env --dev # ๐๏ธ installs cross-env globally (can run from any directory) yarn add cross-env --global
The command will add the cross-env package to the development dependencies of your project.
cross-env
as a development dependency is that you can control the version of the package in your package.json
file.You can also define commands in the scripts
object of your package.json
file.
{ "scripts": { "build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js" } }
cross-env
from your node_modules
directory because you ran npm install --save-dev cross-env
.Now you would run the command as npm run build
, and not use cross-env
directly.
If the error is not resolved, try to delete your node_modules
and
package-lock.json (not
package.json
) files, re-run npm install
and restart your IDE.
If you are on macOS or Linux, issue the following commands in bash
or zsh
.
# for macOS and Linux rm -rf node_modules rm -f package-lock.json rm -f yarn.lock # ๐๏ธ clean npm cache npm cache clean --force # ๐๏ธ install packages npm install
If you are on Windows, issue the following commands in CMD.
# for Windows rd /s /q "node_modules" del package-lock.json del -f yarn.lock # ๐๏ธ clean npm cache npm cache clean --force # ๐๏ธ install packages npm install
Alternatively, you solve the error by prefixing the command with npx.
# ๐๏ธ prefix with `npx` npx cross-env NODE_ENV=production webpack --config build/webpack.config.js
The npx
prefix will look for the cross-env
package in your local
dependencies and if it's not found, it will install the package before running
the command.
Use npx
to solve the error "cross-env: command not found", e.g.
npx cross-env NODE_ENV=production webpack --config build/webpack.config.js
or
install the package globally by running npm install -g cross-env
to be able to
use the command without the npx
prefix.
The fastest way to solve the error is to use the npx
command.
# ๐๏ธ prefix with `npx` npx cross-env NODE_ENV=production webpack --config build/webpack.config.js
Alternatively, you can install cross-env globally or as a development dependency.
# ๐๏ธ installs cross-env globally (can run from any directory) npm install -g cross-env # ๐๏ธ (better) installs cross-env locally to the project (must be run from root directory) npm install --save-dev cross-env
The benefit of installing cross-env
as a development dependency is that you
can control the version of the package in your package.json
file.
You can also create commands in the scripts
object of your package.json
file.
{ "scripts": { "build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js" } }
This works because
npm will resolve
cross-env
from your node_modules
directory because you ran
npm install --save-dev cross-env
.
Now you would run the command as npm run build
, and not use cross-env
directly.
If you decide to install cross-env
globally and the installation fails, you
might have to run the command prefixed with
sudo.
# ๐๏ธ If you get a permissions error sudo npm install -g cross-env
You can link your project to the globally installed cross-env
package, by
opening your terminal in your project's root directory (where your
package.json
file is) and running the npm link cross-env
command.
npm link cross-env
The npm link command creates
a symbolic link from the globally installed package to the node_modules/
directory of the current folder.
If that doesn't help, run the following command:
npm config get prefix
The command will show you the path where npm
puts your globally installed
packages. The global packages will be in the bin
directory at the specified
path.
Look at the PATH environment variable on your operating system and add the
path that the npm config get prefix
command outputs if it's not already
there.
If that didn't work, try to add the path to the bin
folder (from
npm config get prefix
) to your PATH environment variable and restart your
terminal.
For example, on macOS, you can update your path with the following command:
# make sure `path` matches with `npm config get prefix` export PATH=/usr/local/share/npm/bin:$PATH
If you are on Linux, you can add the output from the npm config get prefix
command to your .bashrc
file.
# ๐๏ธ make sure to update the path with the output # from the command export PATH="/usr/local/share/npm/bin:$PATH"
If that doesn't help try to reinstall Node.js on your machine and then install
cross-env
globally by running npm install -g cross-env@latest
.
# ๐๏ธ installs cross-env globally (can run from any directory) npm install -g cross-env
cross-env
fails, you might have to run the command prefixed with sudo
.# ๐๏ธ If you get a permissions error sudo npm install -g cross-env
Alternatively, you can see how you can fix the permissions error on this page in the official npm docs.
You can learn more about the related topics by checking out the following tutorials: