env node 到底是什么

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

nodejs中的#!/usr/bin/env node 到底是什么

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

Shebang

Shebang 的名字来自于 SHArp 和 bang,或 haSH bang 的缩写,指代 Shebang 中 #! 两个符号的典型 Unix 名称。 Unix 术语中,井号通常称为 sharp,hash 或 mesh;而叹号则常常称为 bang。也有看法认为,shebang 名字中的 sh 来自于默认shell Bourne shell 的名称,sh,因为常常使用 shebang 调用之。

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

当你输入一个命令的时候,npm是如何识别并执行对应的文件的呢?具体的原理阮一峰大神已经在npm>

在一些情况下,即使你增加了这一行,但还是可能会碰到一下错误,这是为什么呢?

No such file or directory
复制代码

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

看到这里你应该理解,为什么会出现No such file or directory的错误?因为你的node安装路径没有添加到系统的PATH中。所以去进行node环境变量配置就可以了。

要是你只是想简单的测试一下,那么你可以通过which node命令来找到你本地的node安装路径,将/usr/bin/env改为你查找到的node路径即可。

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


分享到:


相關文章: