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

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

Shebang

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

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

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

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,它是通过文件的扩展名来确定使用什么解释器来执行脚本。

#!/usr/bin/env node 到底是什么相关推荐

  1. /usr/bin/env: ‘node’: Input/output error

    npm install 运行时报: /usr/bin/env: 'node': Input/output error 解决方法, 运行: wsl.exe --shutdown

  2. 安装nodejs和grunt以后出现 /usr/bin/env: node: No such file or directory

    现象如下: jiankunking@ubuntu:~$ cd software/plugins/elasticsearch-head/ jiankunking@ubuntu:~/software/pl ...

  3. 安装nodejs和npm以后出现 /usr/bin/env: node: No such file or directory

    安装完成以后需要执行此命令: sudo ln -s /usr/bin/nodejs /usr/bin/node 将2个文件夹链接.

  4. #!/usr/bin/env python与#!/usr/bin/python

    问: 最近在学习Python,有个问题向高手们求解 #!/usr/bin/env python到底有什么作用?有人说只有在UNIX类的系统下才有意义.是不是在windows下就没任何作用呢?它与#!/ ...

  5. Linux - #!/bin/bash 和 #!/usr/bin/env bash 的区别

    起因 为什么会想到写 #!/bin/bash 和 #!/usr/bin/env bash 的区别呢?还要从一次装插件的过程说起. 由于刚开始接触 Shell Script 不久,对一些语法用法等还不是 ...

  6. #!/usr/bin/env与#!/usr/bin/

    原文: https://blog.csdn.net/wh_19910525/article/details/8040494 #!/usr/bin/env python与#!/usr/bin/pytho ...

  7. #!/usr/bin/env python与#!/usr/bin/python的区别

    脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单 #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python ...

  8. Linux安装composer出现usr/bin/env: php: No such file or directory)

    mv composer.phar /usr/local/bin/composer composer -V 此时报错/usr/bin/env: php: No such file or director ...

  9. Python学习之 !/usr/bin/python 和 !/usr/bin/env python区别

    如果直接采用 python file.py 的方式运行脚本的话,有没有shebang都无所谓,因为我们自己直接指定了该脚本的解释器,即python.但是,如果以 ./file.py 的方式运行的话,一 ...

最新文章

  1. 每日一皮:年轻时的你,是不是也各种重构欲望?
  2. WeightedRandomSampler示例
  3. dubbo服务者配置说明
  4. opencv python教程简书_Python-OpenCV —— 基本操作一网打尽
  5. 当遇到用\来分隔字符串
  6. JavaScript计时器函数用法
  7. ubuntu窗口最小化消失,任务栏上无法找到的解决方法
  8. 视频会议之BigBlueButton
  9. 一图区分1.85mm/2.4mm/2.92mm/3.5mm/SMA射频接头
  10. 省级面板数据(2000-2019)三:人口比、抚养比、就业、失业、离婚、教育(stata版)
  11. 如何解决--Mac的磁盘工具无法对移动硬盘分区,分区按钮是灰色的?
  12. 五月天,十年;五件事,十首歌
  13. linux ssh互信配置
  14. 牛客网 水题 递推找规律
  15. 【数据库】数据库绪论,你都会了吗
  16. 正大国际期货:正大期货公司开户指南
  17. uva1203 - Argu
  18. ubuntu14.04 64位安装H3C iNode客户端
  19. 操作系统实验五 基于内核栈切换的进程切换(哈工大李治军)
  20. 推荐系统的混合加权技术研究

热门文章

  1. Pr 中英文版本切换批处理文件
  2. 第一天-2.安装vmware虚拟机kali系统
  3. 如何将试卷导入到mysql中,一种基于C#中将Word试题导入数据库实现方法.doc
  4. 通过云服务器对内网穿透实现外网访问群晖NAS
  5. 为什么需要api产品经理
  6. galaxy nexus升级包takju-jop40d的boot.img和recovery.img中ramdisk对比
  7. php socket 服务端
  8. 关于802.11ax
  9. Python爬取天气数据及可视化分析(附源码)
  10. 布法罗计算机专业怎么样,2019上海软科世界一流学科排名计算机科学与工程专业排名纽约州立大学布法罗分校排名第76-100...