Babel command not found

Kokodoko picture Kokodoko · Dec 22, 2015 · Viewed 97.4k times · Source

I have installed the babel-cli tool as explained by the Babel 'getting started' page.

From a terminal inside my project folder:

npm install --save-dev babel-cli

After this, there is a node_modules directory with a babel-cli folder, but there is no package.json created. npm also shows the following error:

npm WARN enoent ENOENT: no such file or directory, open '/Users/MyName/Sites/Tutorials/Babel2/package.json

When trying to run babel, I get this:

babel src -d lib
-bash: babel: command not found

I have the latest version of nodejs/npm installed. I have run npm update -g, and I have edited my .bash_profile file to include:

export PATH=$PATH:/Users/MyName/npm/bin
export PATH=/usr/local/share/npm/bin:$PATH

I have not experienced this with other npm tools such as browserify. Why is babel not recognized?

Answer

joemaller picture joemaller · Mar 10, 2016

There are two problems here. First, you need a package.json file. Telling npm to install without one will throw the npm WARN enoent ENOENT: no such file or directory error. In your project directory, run npm init to generate a package.json file for the project.

Second, local binaries probably aren't found because the local ./node_modules/.bin is not in $PATH. There are some solutions in How to use package installed locally in node_modules?, but it might be easier to just wrap your babel-cli commands in npm scripts. This works because npm run adds the output of npm bin (node_modules/.bin) to the PATH provided to scripts.

Here's a stripped-down example package.json which returns the locally installed babel-cli version:

{
  "scripts": {
    "babel-version": "babel --version"
  },
  "devDependencies": {
    "babel-cli": "^6.6.5"
  }
}

Call the script with this command: npm run babel-version.

Putting scripts in package.json is quite useful but often overlooked. Much more in the docs: How npm handles the "scripts" field