#!/usr/bin/env node 究竟是什么?

上一篇文章中给你们介绍了开发npm包的过程,这篇文章来分享一下我在开发npm包中遇到的问题。第一个问题就是#!/usr/bin/env node究竟是什么?(若是个人理解有错误,欢迎各位大神指点)html

在开发npm包的时候,再将包link到你的项目以后,运行包发现报错了。前端

去Google查找了一下,发现解决方法是须要在你的bin文件的上面增长一行 #!/usr/bin/env node。这句话有什么做用呢?介绍它以前须要先介绍一个知识点。

Shebang

如果有使用过Linux或者Unix的前端开发者,对于Shebang应该不陌生,它是一个符号的名称,#!。这个符号一般在Unix系统的基本中第一行开头中出现,用于指明这个脚本文件的解释程序。了解了Shebang以后就能够理解,增长这一行是为了指定用node执行脚本文件。node

当你输入一个命令的时候,npm是如何识别并执行对应的文件的呢?具体的原理阮一峰大神已经在npm scripts 使用指南中介绍过。简单的理解,就是输入命令后,会有在一个新建的shell中执行指定的脚本,在执行这个脚本的时候,咱们须要来指定这个脚本的解释程序是node。shell

在一些状况下,即便你增长了这一行,但仍是可能会碰到一下错误,这是为何呢?npm

No such file or directory
复制代码

为了解决这个问题,首先须要了解一下/usr/bin/env。咱们已经知道,Shebang是为了指定脚本的解释程序,但是不一样用户或者不一样的脚本解释器有可能安装在不一样的目录下,系统如何知道要去哪里找你的解释程序呢? /usr/bin/env就是告诉系统能够在PATH目录中查找。 因此配置#!/usr/bin/env node, 就是解决了不一样的用户node路径不一样的问题,可让系统动态的去查找node来执行你的脚本文件。windows

看到这里你应该理解,为何会出现No such file or directory的错误?由于你的node安装路径没有添加到系统的PATH中。因此去进行node环境变量配置就能够了。测试

要是你只是想简单的测试一下,那么你能够经过which node命令来找到你本地的node安装路径,将/usr/bin/env改成你查找到的node路径便可。spa

最后须要说明的一点是,windows不支持Shebang,它是经过文件的扩展名来肯定使用什么解释器来执行脚本。code

相关文章
相关标签/搜索