npx使用教程

今晚在学习Vue-Cli时, 由于突发奇想想试试最新的@4.x.x版本, 但是本地全局安装的脚手架版本是@2.x.x的, 因为不想污染全局于是就想到用npx命令, 一路上踩坑不断, 为了以后能够更好的使用npx并区分其跟npm的指令, 就有了本篇笔记

npm 是从5.2版开始, 增加(自带)了 npx 命令。 如果发现没安装请手动安装:

npm i -g npx

npm与npx的概念

  1. NPM(Node Package Manager) 是Node.js提供的一个包管理器, 可以使用 NPM 来安装 node.js 包
  2. NPX(Node Package Excuted) 可以理解为用于临时安装并执行某个包的一个工具

总结的来说:

  1. npm专注于安装包
  2. npx专注于执行包, 并且是较特殊的执行

npx的使用场景(对比npm的一些优势)

从几个使用场景出发, 希望能够有对应您当前的场景, 这样就能直接套用了


使用场景1: 想用项目中已经安装好的某个包, 但是不能直接执行(因为没有全局安装, 涉及环境变量的问题)

对于这个场景, 有些笨方法:

  1. 到项目的根目录下执行: node-modules/.bin/包对应的脚本
  2. 配置npm script: 在package.jsonscripts中将方法1添加进脚本, 然后就能在需要的时候执行"npm run 自定义指令"以快速执行啦, 本质上只是对方法1的改进

更优雅的方法, 就是使用npx命令啦:

npx <包对应的命令>

# 以less编译为例:
npx lessc -v # 查看当前项目下less编译器的版本

使用场景2: 已全局安装某个包, 项目又已安装了不同版本的某个包, 想用项目的那个版本

以我今晚的踩坑作为第二个使用场景, 我本地已经全局安装了Vue脚手架的@2.x.x版本, 但是我想用并已经在本地项目文件目录中安装了最新的@4.x.x版本, 即:

# 已经执行过
npm i -g vue-cli@2
vue -V # vue@2.9.6
# 已经执行过 cd my-project
npm i -D @vue/cli@4
vue -V # vue-cli@4.5.13

这时, 如果使用vue -V会发现使用的是全局的版本, 因为npm默认会执行全局中的包。如果想使用项目已经安装的那个版本就直接执行如下命令:

npx <包对应的命令>

# 以vue-cli为例:
npx vue create my-project

使用场景3: 不想全局或在项目中安装某个包, 只想临时使用

对于这种场景, npx就是必要的选择。npx会将要用的下载到一个临时目录, 使用完毕后自动删除, 还是以Vue-Cli为例: 这次的我突发奇想想看看React脚手架的项目文件结构, 由于我还没学, 所以本地和全局都没有安装(只是临时想用脚手架创建一个React项目)

npx create-react-app my-react-project #react脚手架将会在项目搭建完后自动被删除掉

使用场景4: 临时使用特定版本的包(本地没有安装)

如题所示, 这里以我突发奇想想使用Vue脚手架的@3.x.x版本, 但是我全局已经安装了@2.x.x版本

cd my-vue-project   # 进入我的vue项目
npx @vue/cli@3 create big-project # 利用vue-cli的3.x版本创建一个名为big-project的项目

关于npx的一些参数

  1. 安装并使用特定版本: npx 包@版本号 包对应的命令
  2. --no-install 强制使用本地包, 本地包如果没安装就会报错: npx --no-install vue create my-project
  3. --ignore-existing 强制安装使用远程模块: npx --ignore-existing vue create my-project
  4. -p 对于一次性安装多个包,使用参数-p: npx -p @vue/cli -p less 切记: 安装多个包一定要使用 -p
  5. -c 在一次性安装并使用多个包的场景中: 在低版本下执行npx -p vue-cli -p less lessc -v & vue -V命令, 有可能只有第一个命令项能正常执行, 即:只打印出less编辑器的版本。npx的参数-c就是为了告诉npx执行指定的所有命令的范围: npx -p vue-cli -p less -c "lessc -v & vue -V", 这样就能保证绝对的安全了。 注: &代表两个命令都执行, |代表前面执行成功后面命令就不执行

这一小节中最常用、重要的是第5点, 根据此总结: 不管安装的包、命令的个数个数是多少(哪怕只安装1个包), 严格遵守npx -p 包1 -p 包2 -p 包n -c "命令1 & 命令2 & 命令n" 一定没错


写在最后

啰里啰嗦只为了更加详细的记录, 全文结束!

npx的使用方法、场景的更多相关文章

  1. 阿里云场景化阿里云企业数字化转型售前方法PSA

    阿里云场景化阿里云企业数字化转型售前方法PSA 目录 01 课程收获 理解企业数字化转型的概念.内涵.本质 了解企业数字化转型的要点.目标和切入点 掌握数字化转型项目售前阶段实践方法 场景化方案 阿里 ...

  2. Unity 中场景切换

    Unity游戏开发中,单个Scene解决所有问题似乎不可能,那么多个Scene之间的切换是必然存在.如果仅仅是切换,似乎什么都好说,但是在场景比较大的时候不想让玩家等待加载或者说场景与场景之间想通过一 ...

  3. Cocos2d-x-lua游戏两个场景互相切换MainScene01切换到MainScene02

    /* 场景一lua代码 */ require "MainScene02" local dic_size = CCDirector:sharedDirector():getWinSi ...

  4. iOS 多线程NSThread理解与场景示例

    NSThread是相对GCD和NSOperationQuene而言,比较轻量级的一种多线程处理方式. 但同时,它的弊端就是需要自己管理线程的生命周期,以及线程同步:而另外两种不需要自己管理. 常见方法 ...

  5. 【机器学习实战】第7章 集成方法 ensemble method

    第7章 集成方法 ensemble method 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重 ...

  6. Linux环境下Swap配置方法

    Linux环境下Swap配置方法 场景: 今天下午安装一个CentOS6.5操作系统,忘记配置swap分区.看看如何安装系统之后,增加和删除swap分区.方法如下:1.内存占用情况[root@josh ...

  7. npx命令介绍

    什么是npx 第一次看到npx命令是在 babel 的文档里 Note: If you do not have a package.json, create one before installing ...

  8. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

  9. npx 命令介绍

    这个是在 npmv5.2.0引入的一条命令(查看),引入这个命令的目的是为了提升开发者使用包内提供的命令行工具的体验. 为什么引入这个命令 举个例子,我们开发中要运行 parcel 命令来打包:par ...

随机推荐

  1. 32.qt quick-模仿QQ登录界面实现3D旋转(Rotation、Flipable)

    要想模仿QQ登录界面的3D旋转,我们需要学习Rotation和Flipable.由于没找到QQ的资源图,所以我们以两个图片为例模仿QQ的3D旋转,如下图所示: 最终效果如下所示: 1.Rotation ...

  2. Linux集群环境下NTP服务器时间同步

    NTP介绍 NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议.它的用途是把计算机的时钟同步到世界协调时UTC(Universal Time ...

  3. ffmpeg实战-音视频基础概念

    转发自白狼栈:查看原文 关于音视频,相信大家都看过电影(视频),听过音乐(音频),至少应该都知道mp4是视频文件,mp3是音频文件. 对于一个音视频文件,都有哪些属性呢?以视频为例,我们可以通过 ff ...

  4. bzoj2427 软件安装! 树dp

    软件安装 内存限制:128 MiB 时间限制:1000 ms 标准输入输出     题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一 些软 ...

  5. Flask一分钟Mock一个API

    如果安装了Python,并且安装了Flask: pip install flask 那么就可以在短短一分钟内Mock出来一个API,而且只需要用到一个文件. 彻底告别在线Mock网站无法指定请求方法, ...

  6. 进程与线程 .Net Core系列-多线程

    进程与线程 进程: 狭义定义:进程是正在运行的程序的实例 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分 ...

  7. Golang限制函数调用次数

    Golang限制函数调用次数 项目环境 ubuntu+go1.14 需求描述 限制某个函数5秒内只能调用一次,5秒内的其他调用抛弃 工具包使用 这里用到了官方限流器/time/rate 该限流器是基于 ...

  8. 从零实操基于WSL2 Docker部署Asp.Net Core项目

    前言 平日在公司里都是基于阿里Teambition中的飞流进行Docker部署Api项目或服务,已经习惯了那一套成熟的操作流程,开发和部署确实快捷方便,但是还没在自己的电脑上进行操作过,特别是Wind ...

  9. 最新Unity 与Android 交互通信(基于Unity 2019.4 和 Android Studio 4.1.1)

    原文章链接:https://blog.csdn.net/woshihaizeiwang/article/details/115395519 CLSays:网上找了一圈,真的是很多都不能用,要么太老,要 ...

  10. Unity Lamba错误集

    请先看对象层级视图 /// <summary> /// 选择关卡的内容对象 /// </summary> public Transform Transform_levelCon ...