Babel命令未找到。

91

根据Babel '入门指南'页面的介绍,我已经安装了babel-cli工具。

在我的项目文件夹内的终端中:

npm install --save-dev babel-cli

在此之后,会有一个包含babel-cli文件夹的node_modules目录,但没有创建package.json。npm还显示以下错误:
npm WARN enoent ENOENT: no such file or directory, open '/Users/MyName/Sites/Tutorials/Babel2/package.json

尝试运行babel时,我遇到了这个问题:
babel src -d lib
-bash: babel: command not found

我已安装最新版本的nodejs/npm。我已运行npm update -g,并编辑了我的.bash_profile文件,包含以下内容:
export PATH=$PATH:/Users/MyName/npm/bin
export PATH=/usr/local/share/npm/bin:$PATH

我在使用其他npm工具(如browserify)时没有遇到过这种情况。为什么babel没有被识别?

1
你可以在这里查看如何开始使用babel-cli:https://dev59.com/questions/01sW5IYBdhLWcg3w4qew#34484065 - James Hibbard
如果您正在使用fish,请尝试使用https://github.com/oh-my-fish/plugin-node-binpath。 - onmyway133
在我的情况下,我不得不重新安装我的node_modules:rm -rf ./node_modules && npm i - Richard
14个回答

99

这里有两个问题。首先,您需要一个package.json文件。如果没有它告诉npm安装会抛出npm WARN enoent ENOENT: no such file or directory错误。在您的项目目录中运行npm init来为项目生成一个package.json文件。

其次,本地二进制文件可能找不到,因为本地的./node_modules/.bin不在$PATH中。在如何在node_modules中使用本地安装的软件包?中有一些解决方案,但将babel-cli命令包装在npm脚本中可能更容易。这是有效的,因为npm runnpm binnode_modules/.bin)的输出添加到提供给脚本的PATH中。

这是一个简化的示例package.json,返回本地安装的babel-cli版本:

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

使用以下命令调用脚本:npm run babel-version

将脚本放入package.json中非常有用,但经常被忽视。文档提供了更多信息:npm如何处理“scripts”字段


2
在考虑了其他答案并尝试修改~/.profile文件以确保可以调用本地node_modules中的包后,我得出结论:package.json中的scripts区域是最佳选择。你不需要告诉你的同事更改他们的配置文件或创建别名,你的脚本将直接起作用。 - Jared Egan
我正在使用Yarn(工作要求),大多数修复此问题的方法都使用npx。对于我来说,“./node_modules/.bin不在$PATH中”解决了这个问题。谢谢! - Chris DiPiero
如果你在Docker中运行,那么在npm install之后,文件可能不会出现在node_modules中(已知的Linux怪异问题,UID/GID??)。然后,当然,在node_modules/bin中也找不到二进制文件。 - JWCS

47

当我发现这个问题时,我正在寻找

$ npm install -g babel-cli

2
你不应该在使用npm时使用sudo。尝试使用nvm来管理你的node版本。 - John Franke
1
npm install -g babel-cli 可以在不使用 sudo 的情况下工作。 - John Franke
3
使用 sudo 命令来安装全局的 Babel 命令行工具,例如:npm install -g babel-cli,才能访问位于 /usr/local/lib/node_modules 中的文件,否则会被拒绝访问。 - Ericgit
@babel/cli文档建议不要全局安装babel-cli(以避免与使用不同版本的babel的其他项目发生冲突,并提高可移植性)。 - 7hibault

17

全局安装babel可以解决这个问题:

npm install -g @babel/core @babel/cli

然而,不鼓励全局安装依赖项,因为这些依赖项不会根据每个项目进行版本管理。

正如 babel文档 所建议的那样,您应该本地安装依赖项:

npm install --save-dev @babel/core @babel/cli

缺点是没有快速/方便的方法来交互式地调用本地二进制文件(在这种情况下是babel)。npx为您提供了一个很好的解决方案:

npx babel --version

这将运行您本地安装的babel。此外,如果您想避免输入npx,您可以配置shell自动回退,然后只需运行:

babel --version

注意:创建一个 .babelrc 文件非常重要,该文件需放在您项目的根目录下,并在其中指定您的 Babel 配置。您可以使用 env-preset 作为起点,将代码转换成 ES2015+:

npm install @babel/preset-env --save-dev

为了启用预设,您必须在.babelrc文件中定义它,就像这样:

{
  "presets": ["@babel/preset-env"]
}

根据文档的建议,您需要安装@babel/core和@babel/cli,无论它们的版本如何。 - guneetgstar

12

要安装Babel的7+版本,请运行:

npm install -g @babel/cli
npm install -g @babel/core

那就是帮助了我! - JavaRunner

12

这是一个常见问题,它正在从安装了babel-cli的根目录寻找.cmd文件。请尝试以下命令。

./node_modules/.bin/babel.cmd

一旦您能在命令提示符中看到源代码,请安装另一个npm模块babel-preset-es2015

按照下面的答案来安装babel-preset-es2015并了解为什么需要它。

babel-file-is-copied-without-being-transformed


6

这是我自动将本地项目node_modules/.bin路径添加到PATH的方法。我在~/.profile中添加了以下内容:

if [ -d "$PWD/node_modules/.bin" ]; then 
    PATH="$PWD/node_modules/.bin"
fi

然后重新加载你的bash配置文件: source ~/.profile

3
我遇到了同样的问题。删除了 nodemodules 文件夹,然后以管理员身份打开命令提示符并运行 npm install 命令。所有的包都成功安装了。

2

对我有用,例如:

./node_modules/.bin/babel --version
./node_modules/.bin/babel src/main.js

1

一种选择是全局安装CLI。

自从Babel 7发布以来,命名空间已从babel-cli更改为@babel/cli,因此:

npm install --global @babel/cli

您可能仍然会遇到与 @babel/core 相关的错误,因此:

npm install --global @babel/core

1

实际上,如果您想使用cmd命令,有两种方法。 第一种方法是在全局环境中安装它。 另一种方法是npm link。 因此,请尝试第一种方法:npm install -g babel-cli


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