学习npm

今日偶得,npm run-script *(或者npm run *)实际上是开启了shell进程,执行命令。
比如对于 “scripts”: {“link”: “eslint .”} ,npm run link 等价于 (node) ./node-modules/.bin/eslint . 。这是为啥呢?

  1. npm run link == node eslint .
  2. npm run 会自动在$PATH中添加./node-bodules/.bin 目录,因此 上述命令 == node ./node-modules/.bin/ eslint .
  3. ./node-modules/.bin/ eslint 这个链接啥时候有的呢? npm i eslint 时候,除了把eslint 安装在node-modules子目录,还会自动在 ./node-modules/.bin 下生成符号链接,指向 eslint的执行脚本
    ps 直接执行 node ./node-modules/.bin/ eslint . 也可以
    至于为啥 我还没弄明白,
    之所以可以用node** 是因为,脚本有两种执行方式,第一种是直接用路径,然后系统用第一行shebang指定的解释器;第二种是直接指定解释器(node),这样会忽略第一行的shebang。打开./node-modules/.bin/ 下的文件,我发现第一行都是 #! /usr/bin/env node ,( #! 符号的名称叫 Shebang,用于指定脚本的解释程序)。 是shell执行的时候选择了node解释二进制文件。所以可以省略node
    from https://www.cnblogs.com/qinmengjiao123-123/p/8503163.html :
    !/usr/bin/node是告诉操作系统执行这个脚本的时候,调用/usr/bin下的node解释器;
    !/usr/bin/env node这种用法是为了防止操作系统用户没有将node装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找node的安装路径,再调用对应路径下的解释器程序完成操作。
    !/usr/bin/node相当于写死了node路径;
    !/usr/bin/env node会去环境设置寻找node目录,推荐这种写法

那env是啥?env里面有PATH,PATH里面有node在这里插入图片描述

ps :npm 官网: By default, on Unix-like systems it is the /bin/sh command, on Windows it is cmd.exe. The actual shell referred to by /bin/sh also depends on the system.You can customize the shell with the script-shell configuration 默认情况下,类unix 系统,会执行 bin/sh 命令, windows 执行 cmd.exe。 /bin/sh 实际用到的是哪个shell 也取决于系统,可以通过 script-shell 来配置。

ps 无论在哪个目录执行npm run * 脚本都是在根目录执行

ps from阮一峰(https://www.ruanyifeng.com/blog/2016/10/npm_scripts.html): 由于 npm 脚本的唯一要求就是可以在 Shell 执行,因此它不一定是 Node 脚本,任何可执行文件都可以写在里面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值