在 linux上,运行 npm 脚本报 `: No such file or directory` 的一种解决方法

564 阅读1分钟

为了方便开发,我封装了一个cli库,里面添加了一个 npm 命令:

"bin": {
    "my-vue-cli-service": "./bin/my-vue-cli-service.js"
  },

./bin/my-vue-cli-service.js 内容如下:

#!/usr/bin/env node

require('@vue/cli-service/bin/vue-cli-service.js');

在 windows机器上运行此命令,一切正常,但是放到 linux上的jenkins运行时,报错:: No such file or directory

查看 npm的源码 ,发现最终运行的是 sh -c my-vue-cli-service 命令。

手动在linux 上运行 sh -c my-vue-cli-service (my-vue-cli-service通过软链,链接到my-vue.cli-service.js,所以实际运行的是 sh -c my-vue-cli-service.js),也报此错。最终发现是此文件( my-vue-cli-service.js) 的换行方式是 crlf,将文件的换行方式改成 lf就正常了😂

小知识:

  • 为什么脚本头部要添加#!/usr/bin/env node

当系统看到这一行的时候,首先会到env设置里查找node的安装路径,再调用对应路径下的node程序,执行此脚本。