npx是什么?npx的用法?

关于npx的用法,我也是先读了阮一峰的博文,写得比较清楚了。

npx需要node@5.2及以上版本支持,如果不支持可以用npm安装。

本文就简洁地讲一下重点:

什么是npx?

npx是一个用来执行其他命令的命令

// 查看node版本
node -v

// npx命令查看node版本,与上面命令等效(假设只有全局node模块被安装)
npx node -v

npx 有什么作用?

npx在执行命令时,既可以检查当前项目中已安装的命令,也可以检查全局命令。比如:

// 在当前项目路径下安装了create-react-app,但没有全局安装,此时初始化一个react项目
./node_modules/.bin/create-react-app myapp

// 因为没有全局安装,所以直接执行 create-react-app 会报错,只能引用本地命令的路径

// 使用npx,就可以直接访问当前项目下的命令
npx create-react-app myapp

以上npx运行的时候,会到node_modules/.bin路径和环境变量$PATH里面检查命令是否存在。 由于 npx 会检查环境变量$PATH,所以系统命令也可以调用。当然如果环境变量里也没有这个命令,npx会在当前工程路径下载这个命令(临时),执行完后会删除这个命令。所以npx每次都有可能调用最新的命令。

npx的用法根据参数配置来实现,具体看文档。看不懂源文档可以看阮一峰的。其中 -p -c –no-install –ignore-existing 浅显易懂。

使用体会

解决了在当前工程目录的命令执行问题,通常命令会写在package.json的scripts里,现在可以简化了。

需要思考的是,什么时候使用项目模块或全局模块。

比如在react项目中,强烈建议用npx执行create-react-app命令。曾经我遇到的node版本导致的项目跨团队开发startup问题,以及某些包依赖的版本问题,用npx完全可以解决,并且这是一个不错的选择,至少减少了文档中冗余的说明和沟通的成本。

文档引用

什么是图灵机

万物皆数学。

图灵(Turing)在他的论文《论数字计算在决断难题中的应用》中提出了图灵机的概念。当然后人们称之为图灵机。

图灵机不是真正的机器,简单说是一种模型,一种思维方式。

图灵机由4个部分组成:输入集合、输出集合、内部状态、固定的程序指令。

在现实中总有很多场景惊人的相似,如打酱油、吃瓜,当我们用图灵机来描述这些行为时,会将生动的事物变得轻描淡写,把感官逻辑变得生涩。以打酱油作为个例子:

  1. 打酱油的地方在出门:左转,右转,右转,左转,左转,左转,右转,左转的地方。
  2. 当我们遇到指示牌就会沿着指示牌改变方向。
  3. 如果手里的没封口的酱油瓶撒出了一些,最好还是原路返回再打满。

上面这些仿佛机器一般的逻辑,已经不能再直白,但是用图灵机来描述,将会是另一番样子:

  • 输入集合:{向左转指示牌,向右转指示牌}
  • 输出集合:{向左转,向右转}
  • 内部状态:{酱油瓶满,酱油瓶不满}
  • 固定程序指令:
    • 如果酱油瓶满,向前走,看见向左转的指示牌,就向左转。
    • 如果酱油瓶满,向前走,看见向右转的指示牌,就向右转。
    • 如果酱油瓶不满,向后退,看见向左转的指示牌,就向右转。
    • 如果酱油瓶不满,向后退,看见向右转的指示牌,就向左转。

打酱油的例子换成图灵机描述后,最难理解的是固定程序指令。它是一种脚本,而当我们按照脚本来行动的时候,要考虑酱油瓶自身的状态。我们拿着酱油瓶,看着指示牌,再看看酱油瓶的状态,从而决定到底是前进还是后退,是向左还是向右。

图灵机的组成

如果把上面4个组成部分放在这张图上,可以看到,Tape的每一格就是向左或向右的指示牌,Program就是固定的程序,CurrentState就是内部状态,整个“方盒子”的移动,就是根据上面这些条件和专题进行运算后的结果。

对图灵机来说,Tape可以是无限长的,上面存满了信息。无论这些信息是0或1,还是A或B,都是抽象的存在。理解到这里,可以说现实的各类行为和决策都可以通过图灵机来描述。

除了图灵机,还有个概念叫“图灵完备”。

可图灵指在可计算性理论中,编程语言或任意其他的逻辑系统如具有等用于通用图灵机的计算能力。换言之,此系统可与通用图灵机互相模拟。

《维基百科》

粗犷地说一个系统具备图灵机那四点抽象概念,基本上就算是图灵完备了。