Babel 踩坑笔记: babel 命令失效(/bin/sh: babel: command not found)

Babel 踩坑笔记: babel 命令失效(/bin/sh: babel: command not found)

前言

今天来分享一个使用 babel 的时候遇到的 bug,同时也是所有利用 node 创建可执行脚本命令的共同问题。

正文

项目背景

本问题适用于所有与 node 制作的命令行指令相关的问题

项目背景使用了 @babel/cli 包中自带的 babel 指令,首先先上配置文件

  • package.json
{
  "name": "bad_sample_xxx",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "scripts": {
    "build": "babel index.js -d lib"
  },
  "devDependencies": {
    "@babel/cli": "^7.14.5",
    "@babel/core": "^7.14.6",
    "@babel/preset-env": "^7.14.7"
  }
}

项目启动时的目标就是利用 @babel/cli 编译一个本地文件

问题描述

当我们使用 @babel/cli 的时候,就需要用到它附带的 babel 指令,如下使用方式

$ yarn babel index.js

这是最直接的使用命令的方式,结果是没问题的

但是当我们换成使用 package.json 定义的命令的时候却报错了

消息报错信息如下

yarn run v1.22.10
$ babel index.js -d lib
/bin/sh: babel: command not found
error Command failed with exit code 127.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

实际上问题在于 项目路径,这是由于上面使用的路径存在非法字符(前一个例子的目录名为 bad_sample/xxx),由于 yarn 执行指令的原理在于将 自身路径/.bin 加入命令搜索列表,所以路径中包含 / 会造成命令搜索错误,最后变成 command not found

解决方案

解决方式就是将目录或是路径上存在不正常 / 符号的目录改名即可

如下我们把目录名从 bad_sample/xxx 改成 good_sample

再运行就正常了

开发注意点

实际上在正常场景下 yarn inityarn install 的时候就会检测路径是否存在异常字符,所以其实只要不是后来将项目擅自移动到异常路径下,实际上是比较难出现这个问题的。

结语

另外可能还有人是直接运行命令,但是实际上 npm 项目制作的命令是必须由 yarn 主动添加前缀,否则如果不是全局安装的话是找不到命令路径的。

其他资源

参考连接

TitleLink

完整代码示例

https://github.com/superfreeeee/Blog-code/tree/main/front_end/babel/babel_note_command

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值