'cross-env' is not recognized as an internal or external command

avatar
Borislav Hadzhiev

Last updated: Apr 4, 2024
5 min

banner

# Table of Contents

  1. 'cross-env' is not recognized as an internal or external command
  2. cross-env: command not found error

# 'cross-env' is not recognized as an internal or external command

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:

shell
# ๐Ÿ‘‡๏ธ 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

install cross env package

The command will add the cross-env package to the development dependencies of your project.

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 define commands in the scripts object of your package.json file.

package.json
{ "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.

# Delete your node_modules and reinstall your dependencies

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.

shell
# 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.

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
Make sure to restart your IDE and dev server if the error persists. VSCode often glitches and needs a reboot.

Alternatively, you solve the error by prefixing the command with npx.

shell
# ๐Ÿ‘‡๏ธ 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.

# cross-env: command not found error

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.

command not found cross env

The fastest way to solve the error is to use the npx command.

shell
# ๐Ÿ‘‡๏ธ 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.

shell
# ๐Ÿ‘‡๏ธ 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.

package.json
{ "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.

# Installing cross-env globally

If you decide to install cross-env globally and the installation fails, you might have to run the command prefixed with sudo.

shell
# ๐Ÿ‘‡๏ธ 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.

shell
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 the error is not resolved, try restarting your terminal.

# Update your PATH environment variable on macOS or Linux

If that doesn't help, run the following command:

shell
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 you add the output from the command to your PATH environment variable, you have to restart any open command prompts before it takes effect.

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:

shell
# 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.

~/.bashrc
# ๐Ÿ‘‡๏ธ make sure to update the path with the output # from the command export PATH="/usr/local/share/npm/bin:$PATH"
If you add the output from the command to your PATH environment variable, you have to restart any open command prompts before it takes effect.

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.

During the installation, you might get a prompt for whether you want to automatically update the PATH environment variable on your system, make sure to tick the option.
shell
# ๐Ÿ‘‡๏ธ installs cross-env globally (can run from any directory) npm install -g cross-env
If the global installation of cross-env fails, you might have to run the command prefixed with sudo.
shell
# ๐Ÿ‘‡๏ธ 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.

# Additional Resources

You can learn more about the related topics by checking out the following tutorials:

I wrote a book in which I share everything I know about how to become a better, more efficient programmer.
book cover
You can use the search field on my Home Page to filter through all of my articles.

Copyright ยฉ 2024 Borislav Hadzhiev