为了方便开发,我封装了一个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程序,执行此脚本。